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;
}
Lesezeichen