- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 14

Thema: Arduino Interrupt

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.02.2009
    Ort
    Aachen
    Beiträge
    1.176
    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;
    }
    Geändert von Cysign (09.06.2015 um 01:22 Uhr)

Ähnliche Themen

  1. Arduino vs. Arduino: Kampf um die Arduino IDE
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 04.04.2015, 17:21
  2. Rosenkrieg: Arduino zahlt Arduino keine Lizenzgebühren
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 20.03.2015, 08:00
  3. Arduino: laufendes Programm auf Arduino Uno beenden?
    Von Ford Prefect im Forum Arduino -Plattform
    Antworten: 2
    Letzter Beitrag: 15.06.2014, 08:25
  4. Arduino + WLAN = Arduino Yún
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 04.06.2013, 13:50
  5. [ERLEDIGT] [ARDUINO] 2 Motoren + Servo mit dem Arduino Uno steuern
    Von Torrentula im Forum C - Programmierung (GCC u.a.)
    Antworten: 0
    Letzter Beitrag: 31.08.2011, 16:31

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test