Я работаю над школьным проектом с использованием Arduino UNO и короткой FSR 400, чтобы получить лекцию в граммах, которая должна отображаться на экране OLED 128x32, когда FSR сжимается. Пока этот код дает мне нужную лекцию в виде «fsrGrams», но мне нужно отобразить эту переменную на OLED-экране, что-то вроде: «200 гр»
#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 для отображения переменной "fsrGrams" на экране OLED ??
Я нашел только такие команды, как:
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
Но это работает только для отображения текстовых сообщений, а не переменных.
ЭТО ТО, ЧТО Я НАШЕЛ О GREYBEARD ЗАПРОСОВ:
U8g2 - это монохромная графическая библиотека для встроенных устройств (OLED и ЖК-дисплеи)
"drawStr ()" рисует строку. Первый символ помещается в позиции x и y. setFont используется для назначения шрифта перед рисованием строки на дисплее. Чтобы нарисовать символ с кодировкой от 127 до 255, используйте escape-последовательность 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, как: «Грамм сила: 305», мне нужно это числовое значение, которое будет отображаться на OLED как электронная шкала для граммов, показывая только «305 гр», и это все, что мне нужно ... Пожалуйста, помогите ...