pracuji na školním projektu, jehož cílem je vytvoření mobilní fotovoltaické elektrárny. Součástí má být i display, který bude zobrazovat všechny relevantní hodnoty. Zvolil jsem LCD display 128x64, konkrétně tento https://www.aliexpress.com/item/128-64- ... 0.0.LSoV46. Jelikož jsem naprostý začátečník ve světě arduina, tak jsem se X hodin brodil kódama na internetu, abych uvedl do provozu alespon měření jednotlivých článků baterie. Můj problém je takový, že se mi špatně zobrazují čísla při obnově. Některé pixely, jako kdyby se sekly, nezkaktualizovaly se, takže když je dejme tomu 3,21 a pak to skočí na 3,20 tak na druhém desetinném místě je paskvil, který je slátaninou 1 a 0. Při další obnově se to opraví a nebo taky ne. Dělá to poměrně často u všech čísel. Mám podezření, že jsem možná použil špatný kód pro vypsání analogovych hodnot ze sensoru na display. Níže příkládám svůj kód.
Kód: Vybrat vše
#include "U8glib.h"
// nastavení propojovacích pinů
#define EN 13
#define RW 12
#define RS 11
// inicializace OLED displeje z knihovny U8glib
U8GLIB_ST7920_128X64_1X lcd(EN, RW, RS);
void setup(void) {
// nastavení bílé barvy pro výpis
if ( lcd.getMode() == U8G_MODE_R3G3B2 ) {
lcd.setColorIndex(255);
}
// nastavení maximální intenzity svitu
elseif ( lcd.getMode() == U8G_MODE_GRAY2BIT ) {
lcd.setColorIndex(3);
}
// nastavení viditelnosti pixelů
elseif ( lcd.getMode() == U8G_MODE_BW ) {
lcd.setColorIndex(1);
}
// pro otočení displeje o 180 stupňů
// stačí odkomentovat řádek níže
// lcd.setRot180();
}
void loop(void) {
// pictureloop
lcd.firstPage();
do {
draw();
} while( lcd.nextPage() );
// rebuildthepictureaftersomedelay
delay(5000);
}
void draw(void) {
// graphiccommands to redrawthecompletescreenshouldbeplacedhere
int sensorValue1 = analogRead(A0);
float voltage1 = sensorValue1 *0.9787234042553191*(5.0 / 1023.0);
int sensorValue2 = analogRead(A1);
float voltage2 = sensorValue2 *0.7614457831325301*(5.0 / 1023.0);
int sensorValue3 = analogRead(A2);
float voltage3 = sensorValue3 *0.7994987468671679*(5.0 / 1023.0);
int sensorValue4 = analogRead(A3);
float voltage4 = sensorValue4 *0.7705314009661836*(5.0 / 1023.0);
floattotal = voltage1+voltage2+voltage3+voltage4;
lcd.setFont(u8g_font_5x7);
lcd.setPrintPos(42, 10);
lcd.print(voltage1);
lcd.setPrintPos(70, 10);
lcd.print("V");
lcd.setPrintPos(0, 10);
lcd.print("Cell(1)=");
lcd.setPrintPos(42, 20);
lcd.print(voltage2);
lcd.setPrintPos(70, 20);
lcd.print("V");
lcd.setPrintPos(0, 20);
lcd.print("Cell(2)=");
lcd.setPrintPos(42, 30);
lcd.print(voltage3);
lcd.setPrintPos(70, 30);
lcd.print("V");
lcd.setPrintPos(0, 30);
lcd.print("Cell(3)=");
lcd.setPrintPos(42, 40);
lcd.print(voltage4);
lcd.setPrintPos(70, 40);
lcd.print("V");
lcd.setPrintPos(0, 40);
lcd.print("Cell(4)=");
lcd.setPrintPos(42, 50);
lcd.print(total);
lcd.setPrintPos(70, 50);
lcd.print("V");
lcd.setPrintPos(0, 50);
lcd.print("Battery=");
}