Hallo Jörg, du hast vollkommen Recht mit deiner Aussage. Ich hab da gestern einfach so lange dran gesessen, dass ich irgendwann nur noch durch war
Der Code hier funktioniert:
Code:int ledPin = A5; volatile int state = HIGH; #include "sdelay.h" void setup() { pinMode(ledPin, OUTPUT); digitalWrite(3, HIGH); attachInterrupt(1, blink, FALLING); } void loop() { for (int i=0; i<100; i++) { sdelay(1000); } } void blink() { state = !state; digitalWrite(ledPin, state); }
Wohingegen es nicht funktioniert, aus der ISR heraus ein über I2C angeschlossenes Display über die LiquidCrystal_I2C.h zu steuern:
Code:#include "sdelay.h" #include <LiquidCrystal_I2C.h> #include <Wire.h> LiquidCrystal_I2C lcd(0x27,16,2); volatile int state = HIGH; void setup() { digitalWrite(3, HIGH); attachInterrupt(1, blink, FALLING); lcd.init(); lcd.setCursor(0,0); lcd.print("blablabla"); lcd.backlight(); } void loop() { lcd.backlight(); sdelay(100); } void blink() { lcd.clear(); lcd.print("*"); }
Scheinbar kann ich aus der ISR heraus nicht auf externe Funktionen zugreifen.
Ich hab das Problem jetzt testweise folgendermaßen umschifft:
Code:#include "sdelay.h" #include <LiquidCrystal_I2C.h> #include <Wire.h> LiquidCrystal_I2C lcd(0x27,16,2); int activated = 0; volatile int state = HIGH; void setup() { digitalWrite(3, HIGH); attachInterrupt(1, blink, FALLING); lcd.init(); lcd.setCursor(0,0); lcd.print("blablabla"); lcd.noBacklight(); } void loop() { if (activated == 0) { sdelay(2000); } else { lcd.backlight(); sdelay(4000); lcd.noBacklight(); activated = 0; } } void blink() { activated = 1; }







Zitieren

Lesezeichen