-
        

Ergebnis 1 bis 4 von 4

Thema: Arduino Unendliche Schleife auf LCD

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.08.2010
    Alter
    18
    Beiträge
    114

    Frage Arduino Unendliche Schleife auf LCD

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo zusammen,
    ich habe ein Arduino System für meinen Kühlschrank gebaut, da dieser immer von alleine aufgeht. Ich habe eine Alufolie an der Tür und eine am Kühlschrank befestigt. Daran hab ich Kabel gelötet (eins geht in GND und eins in Pin 2). Zusätzlich ist ein Lautsprecher und ein LCD-Display angeschlossen. Wenn der Kühlschrank geschlossen ist, steht auf dem Display "Geschlossen" und wenn er geöffnet ist, steht dort "Geöffnet". Die Schleife fragt ab, ob der Wert des Schließers NICHT 0 gibt, dann steht auf dem Display "Geöffnet" und wenn der Schließer 0 gibt, steht "Geschlossen". Aber der Wert gibt bei jedem geschlossenen Male NICHT 0 ist (fast immer, da Kühlschrank immer zu ist) ist. Das ist mein Problem: Der Text auf dem Display wird immer neu geschrieben, und das gibt ein Flackern auf dem Display wieder. Das möchte ich verhindern. Das Problem ist, dass ich kein delay dahinter benutzen kann, da sonst die Erkennung des Inputs nicht mehr funktioniert. Gibt es irgendeine Schleife oder sowas was dieses Problem verhindert?

    Danke

    Skript:
    Code:
    #include "pitches.h"
    #include <LiquidCrystal.h>
    
    int kuehlschrank = 2;
    int ksvalue;
    int LS = 8;
    
    int melody[] = {
      NOTE_C4, NOTE_G3};
    
    
    int noteDurations[] = {
      2,2};
    
    byte oe[8] =
    {
      B01010,
      B00000,
      B01110,
      B10001,
      B10001,
      B10001,
      B01110,
      B00000,
    };
    
    LiquidCrystal lcd(12,11,10,7,6,5,4);
    
    void setup()
    {
      lcd.begin(16,4);
      lcd.setCursor(0,0);
      lcd.print("  KUEHLSCHRANK   ");
      lcd.setCursor(0,1);
      lcd.print("*****************");
      lcd.setCursor(0,2);
      lcd.print("Akt. Zustand");
      lcd.setCursor(0,3);
      lcd.print("Geschlossen");
      pinMode(kuehlschrank, INPUT);
      digitalWrite(kuehlschrank, HIGH);
      tone(LS, NOTE_C4, 4);
      lcd.createChar(0, oe);
    }
    
    void loop()
    {
      ksvalue = digitalRead(kuehlschrank);
      if(ksvalue == !0)
      {  
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("  KUEHLSCHRANK   ");
        lcd.setCursor(0,1);
        lcd.print("*****************");
        lcd.setCursor(0,2);
        lcd.print("Akt. Zustand:");
        lcd.setCursor(0,3);
        lcd.print("Ge");
        lcd.setCursor(2,3);
        lcd.write(0);
        lcd.setCursor(3,3);
        lcd.print("ffnet!");
        bell();
      }
      else
      {
          lcd.setCursor(0,0);
          lcd.print("  KUEHLSCHRANK   ");
          lcd.setCursor(0,1);
          lcd.print("*****************");
          lcd.setCursor(0,2);
          lcd.print("Akt. Zustand:");
          lcd.setCursor(0,3);
          lcd.print("Geschlossen!"); 
      }
    }
    
    void bell()
    {
         for (int thisNote = 0; thisNote < 3; thisNote++) 
         {
    
    
          // divided by the note type.
            //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
          int noteDuration = 1000/noteDurations[thisNote];
          tone(8, melody[thisNote],noteDuration);
    
          // to distinguish the notes, set a minimum time between them.
            // the note's duration + 30% seems to work well:
          int pauseBetweenNotes = noteDuration * 1.30;
          delay(pauseBetweenNotes);
          // stop the tone playing:
          noTone(8);
        }
    }
    MfG pro-bot128
    Verpackung eines PC´s:

    Bei Risiken und Funktionsproblemen Netzstecker durchbeißen und aus den PC aus dem Fenster werfen!

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    26.08.2006
    Beiträge
    84
    Derer Möglichkeiten gibt es viele, dies ist eine davon:
    Code:
    while(1) {
        while(!digitalRead(kuehlschrank);
            /* geschlossen */
        while(digitalRead(kuehlschrank);
            /* offen */
    }
    Man könnte auch einen Timer nehmen und z.B. einmal pro Sekunde den Status der Tür abfragen.
    Oder ksvalue nach jeder Prüfung merken und nur bei einer Änderung was aufs LCD schreiben.
    Oder einen Pin Change Interrupt nehmen.
    Geändert von Slein (01.07.2011 um 19:49 Uhr)

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Merke dir den Zustand der Tür und gib nur eine Meldung aus wenn sich der Zustand ändert. Nach der Ausgabe merkst du dir dann wieder den aktuellen Zustand:

    zustand=get_tuer();
    put_lcd(zustand);
    while(1)
    {
    if(get_tuer() != zustand)
    {
    zustand=get_tuer();
    put_lcd(zustand);
    }
    }

    [Edit]Mal wieder zu langsam ;)

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.08.2010
    Alter
    18
    Beiträge
    114
    danke für die Antworten! Jetzt hab ich es hinbekommen.
    Verpackung eines PC´s:

    Bei Risiken und Funktionsproblemen Netzstecker durchbeißen und aus den PC aus dem Fenster werfen!

Ähnliche Themen

  1. ARDUINO ARDUINO l293D + MegaservoLib
    Von m1ch15inner im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 2
    Letzter Beitrag: 11.07.2011, 12:50
  2. Variable aus for-schleife ausserhalb weiterbenutzen. Arduino
    Von Zimt Creme im Forum Software, Algorithmen und KI
    Antworten: 1
    Letzter Beitrag: 22.04.2011, 12:44
  3. Arduino Uhr?
    Von pro-bot128 im Forum Arduino -Plattform
    Antworten: 8
    Letzter Beitrag: 19.12.2010, 16:47
  4. Arduino und pal
    Von Thomas$ im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 22.03.2010, 22:35
  5. unendliche batterie???
    Von xbgamer im Forum Elektronik
    Antworten: 52
    Letzter Beitrag: 05.01.2007, 22:39

Berechtigungen

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