我正在使用arduino UNO和FSR 400 short做学校项目,以克为单位进行授课,当FSR受到挤压时,需要在OLED 128x32屏幕上显示。到目前为止,这段代码为我提供了我需要的讲座,如“ fsrGrams”,但我需要在OLED屏幕上显示此变量,例如:“ 200 gr”
#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>
#include <Wire.h>
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0);
int fsrPin = 0;
int fsrReading;
int fsrVoltage;
unsigned long fsrResistance;
unsigned long fsrConductance;
long fsrForce;
long fsrGrams=0 ;
void setup(void) {
u8g2.begin();
Serial.begin(9600);
}
void loop(void) {
fsrReading = analogRead(fsrPin);
Serial.print("Analog reading = ");
Serial.println(fsrReading);
fsrVoltage = map(fsrReading, 0, 1023, 0, 5000);
Serial.print("Lectura de volts en mV = ");
Serial.println(fsrVoltage);
if (fsrVoltage == 0) {
Serial.println("Sin presión");
} else {
// The voltage = Vcc * R / (R + FSR) where R = 10K and Vcc = 5V
// so FSR = ((Vcc - V) * R) / V
fsrResistance = 5000 - fsrVoltage;
fsrResistance *= 10000;
fsrResistance /= fsrVoltage;
Serial.print("Resistencia del fsr en ohms = ");
Serial.println(fsrResistance);
fsrConductance = 1000000;
fsrConductance /= fsrResistance;
Serial.print("Conductancia en microMhos: ");
Serial.println(fsrConductance);
if (fsrConductance <= 1000) {
fsrForce = fsrConductance / 80;
Serial.print("Fuerza en Newtons: ");
Serial.println(fsrForce);
fsrGrams = fsrForce*101.97162;
Serial.print("Gramos fuerza: ");
Serial.println(fsrGrams);
} else {
fsrForce = fsrConductance - 1000;
fsrForce /= 30;
Serial.print("Fuerza en Newtons: ");
Serial.println(fsrForce);
delay(200);
}
}
Serial.println("--------------------");
delay(200);
}
我对编码还很陌生,是否有使用u8g或u8g2库的命令在OLED屏幕上显示变量“ fsrGrams”? 我只找到以下命令:
void loop(void) {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_logisoso28_tr);
u8g2.drawStr(4,29,"HELLO WORLD!");
u8g2.sendBuffer();
delay(2000); //displays the text message for 2 seconds
但这仅显示文本消息,而不显示变量。
这是我对灰胡子要求的发现:
U8g2是用于嵌入式设备(OLED和LCD)的单色图形库
“ drawStr()”绘制字符串。第一个字符位于位置x和y。 setFont用于在显示器上绘制字符串之前分配字体。要绘制编码为127到255的字符,请使用C / C ++ / Arduino转义序列“ \ xab”(十六进制值ab)或“ \ xyz”(八进制值xyz)。此函数不能绘制任何编码大于或等于256的字形。使用drawUTF8或drawGlyph访问编码大于或等于256的字形。
C++/Arduino Prototype:
u8g2_uint_t U8g2::drawStr(u8g2_uint_t x, u8g2_uint_t y, const char *s)
C Prototype:
u8g2_uint_t u8g2_DrawStr(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *s);
参数:
u8g2: A pointer to the u8g2 structure.
x, y: Position of the first character on the display.
s: Text.
关于“ Serial.println(fsrGrams)”显示的内容:它显示一个数值,该数值根据施加到FSR传感器的力而不断变化,如下所示:“ Gram force:305”,我需要要在OLED上显示的数字值,如克的电子秤,仅显示“ 305 gr”,这就是我所需要的全部...请帮助...