Moin,
ich bin noch recht neu im Arduino basteln und ich bin auf ein Problem gestoßen, womit ich nicht weiter komme und ich hoffe hier kann mir jemand helfen. Ich möchte das mal kurz beschreiben.
Ich möchte in einem OLED Displays 3 Variablen anzeigen. Die Daten kommen aus einer Schnittstelle von DCS World Namens DCS Bios.
Die Variablen werden schon richtig angezeigt, nur aus einem mir unergründlichen Problem wiederholen die sich immer.
Variable 1 = Scr1
Variable 2 = Scr2
Variable 3 = ScrNumber
Im Display wird erst Scr1 dann Scr2 und dann ScrNumber angezeigt. Das geht auch soweit.
Aktuell wird aber Scr1 dann Scr2 dann ScrNumber angezeigt und nach Scr2 wird zusätzlich noch Scr1 wiederholt. Scr1 Wiederholung und ScrNumber überlagern sich aber dadurch und das Display ist kaum noch zu entziffern.
Kommentiere ich Scr1 aus und lasse Scr2 und ScrNumber allein einblenden, und beide ganz links im Display, dann wird Scr2 dann ScrNumber und dann Scr 2 angezeigt. Also gleiches Problem.
Ist eine Anzeige "fertig" dann wiederholt sich die davor. Kann man das mit einem Befehl den ich leider nicht kenne verhindern?
Vielen Dank schon mal.
Gruß Sky
Sketch füge ich mal mit an. Ich hoffe das geht so.
#define DCSBIOS_RS485_SLAVE 1
#define TXENABLE_PIN 2
#include <Arduino.h>
#include <U8g2lib.h>
#include "DcsBios.h"
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8G2_SSD1305_128X32_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
int i;
//char op1[12] = "";
char scr1[2] = "";
char scr2[2] = "";
char scrL[8] = "";
void setup(void) {
u8g2.begin();
DcsBios::setup();
for(int i = 0; i < 2; i++){
scr1[i] = ' ';
}
for(int i = 0; i < 2; i++){
scr2[i] = ' ';
}
for(int i = 0; i < 8; i++){
scrL[i] = ' ';
}
}
void loop(void) {
DcsBios::loop();
}
void onUfcScratchpadNumberDisplayChange(char* newValue) {
for(i = 0; i < 8; i++) {
scrL[i] = newValue[i];
}
displayPrintScr();
}
DcsBios::StringBuffer<8> ufcScratchpadNumberDisplayBuffer(0x543e, onUfcScratchpadNumberDisplayChange);
void onUfcScratchpadString1DisplayChange(char* newValue) {
for(i = 0; i < 2; i++) {
scr1[i] = newValue[i];
}
displayPrintScr();
}
DcsBios::StringBuffer<2> ufcScratchpadString1DisplayBuffer(0x5446, onUfcScratchpadString1DisplayChange);
void onUfcScratchpadString2DisplayChange(char* newValue) {
for(i = 0; i < 2; i++) {
scr2[i] = newValue[i];
}
displayPrintScr();
}
DcsBios::StringBuffer<2> ufcScratchpadString2DisplayBuffer(0x5448, onUfcScratchpadString2DisplayChange);
void displayPrintScr() {
u8g2.clearBuffer(); // clear the internal memory
u8g2.setFont(u8g2_DcsFontScratch1_3_tf); // choose a suitable font
//u8g2.setCursor(-25,25);
u8g2.drawUTF8(5,25,scr1); // write something to the internal memory
//u8g2.setFont(u8g2_DcsFontScratch1_1_tf); // choose a suitable font
// u8g2.setCursor(25,25);
u8g2.drawUTF8(37,25,scr2); // write something to the internal memory
//u8g2.setFont(u8g2_DcsFontScratch1_3_tf); // choose a suitable font
//u8g2.setCursor(42,25);
u8g2.drawUTF8(58,25,scrL); // write something to the internal memory
u8g2.sendBuffer(); // transfer internal memory to the display
}