Hallo zusammen,
ich versuche gerade mein erstes Projekt mit dem Arduino umzusetzen. Habe bisher zwar Erfahrung mit verschiedenen Programmiersprachen (C,C++, Java...), aber bei dem Projekt scheitert es gerade an einer (wahrscheinlich) simplen Sache, die ich einfach nicht seh.
Der unten gezeigte Code funktioniert soweit und ändert auf Basis des Drehgeber-Inputs Menüeinträge, die auf einem OLED-Display angezeigt werden. Mein Problem derzeit ist, dass der Code nicht mehr funktioniert, sobald ich die renderDisplay()-Methode in der Loop-Funktion außerhalb des if-Kontexts aufrufe. Also die Loop-Funktion wie folgt schreibe:
void loop()
{
uint8_t x = R.read();
if(x != 0){
Serial.println(x);
processEncoder(x);
}
renderDisplay(menuEntry);
}
In dem Beispiel auch nicht weiter schlimm. Das Projekt soll aber noch um eine RFID-Funktionalität ergänzt werden, sodass der aktive Menüeintrag aktiviert wird, sobald ein RFID-Tag erkannt wird. Das soll eigentlich auch funktionieren, ohne dass vorher der Drehgeber betätigt wird. Beim Debuggen konnte ich feststellen, das bei der oberen Loop-Funktion nur noch die zweite Funktion (renderDisplay()) ausgeführt wird, der Wert des Drehgebers aber immer 0 bleibt.
#include <MD_REncoder.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// set up encoder object
MD_REncoder R = MD_REncoder(3, 2);
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
int menuEntry;
void setup()
{
Serial.begin(57600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
R.begin();
menuEntry = 0;
display.clearDisplay();
renderDisplay(menuEntry);
}
void loop()
{
uint8_t x = R.read();
if(x != 0){
Serial.println(x);
processEncoder(x);
renderDisplay(menuEntry);
}
}
void processEncoder(int encoderValue){
if(encoderValue == DIR_CW){
menuEntry + 1 <= 3 ? menuEntry++ : menuEntry = 0;
}else{
menuEntry - 1 >= 0 ? menuEntry-- : menuEntry = 3;
}
}
void renderDisplay(int currentEntry){
display.setTextSize(1);
currentEntry == 0 ? display.setTextColor(BLACK, WHITE) : display.setTextColor(WHITE, BLACK);
display.setCursor(5,0);
display.println("Entry 1");
currentEntry == 1 ? display.setTextColor(BLACK, WHITE) : display.setTextColor(WHITE, BLACK);
display.setCursor(5,15);
display.println("Entry 2");
currentEntry == 2 ? display.setTextColor(BLACK, WHITE) : display.setTextColor(WHITE, BLACK);
display.setCursor(5,30);
display.println("Entry 3");
currentEntry == 3 ? display.setTextColor(BLACK, WHITE) : display.setTextColor(WHITE, BLACK);
display.setCursor(5,45);
display.println("Entry 4");
display.display();
}