使用arduino在OLED屏幕上显示变量(从FSR 400缩写)

时间:2019-03-16 21:46:59

标签: arduino sensor

我正在使用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”,这就是我所需要的全部...请帮助...

0 个答案:

没有答案