Anfänger Arduino Projekt

Gast #4380781
Lesenswert?
• ▲
▼
Ich probiere gerade eine simple Ampelsteuerung zu realisieren.

Nachdem der Taster "switchState" gedrückt wurde, soll für 10 Sekunden 
greenLED HIGH sein, dann soll greenLED auf LOW gehen und yellowLED für 3 
Sekunden auf HIGH, danach soll yellowLED auf LOW und redLED für 10 
Sekunden auf HIGH.

Wenn der Taster losgelassen wird, sollen alle LEDs auf LOW.

Hier der Code:

const int greenTime = 10000;
const int yellowTime = 3000;
const int redTime = 10000;

int greenLED = 3;
int yellowLED = 4;
int redLED = 5;
int temp, i, j, k = 0;
int switchState = 0;

void setup()
{
  pinMode(greenLED, OUTPUT);
  pinMode(yellowLED, OUTPUT);
  pinMode(redLED, OUTPUT);
  pinMode(1, INPUT);
}

void loop()
{
  switchState = digitalRead(1);

  if(switchState == HIGH)
  {
      for(i = 0; i <= redTime; i++)
      {
        for(j = 0; j <= yellowTime; j++)
        {
          for(k = 0; k <= greenTime; k++)
          {
            digitalWrite(greenLED, HIGH);
          }
          digitalWrite(greenLED, LOW);
          digitalWrite(yellowLED, HIGH);
        }
        digitalWrite(yellowLED, LOW);
        digitalWrite(redLED, HIGH);
      }
  }
  else
  {
    digitalWrite(greenLED, LOW);
    digitalWrite(yellowLED, LOW);
    digitalWrite(redLED, LOW);
  }
}

Wo ist mein Denkfehler? Bitte keine fertigen Lösungen, sondern anstupser 
in die richtige Richtung.
Gast #4380812
Lesenswert?
• ▲
▼
wie kommst du auf 10 bzw. 3 Sekunden, deine for-Schleifen zählen 10000 
mal, aber keine Sekunden.

Dann springt die Schleife direkt weiter, weil du auf gleich oder kleiner 
n-time abfragst.

Was noch falsch ist, habe ich nicht geprüft.
Gast #4380813
Lesenswert?
• ▲
▼
> pinMode(1, INPUT);
Pin 1 ist TxD der seriellen Schnittstelle
Den solltest du nicht als Input verwenden.
Denn der Bootloader nutzt ihn als Output.
Mit dem Taster baust du eine Kurzschlussgefahr.

> Wo ist mein Denkfehler?

Du sprichst von:
> Sekunden
Tust aber nichts mit "Sekunden"
Gast #4380822
Lesenswert?
• ▲
▼
Ulrich F. schrieb:
>> pinMode(1, INPUT);
> Pin 1 ist TxD der seriellen Schnittstelle
> Den solltest du nicht als Input verwenden.
> Denn der Bootloader nutzt ihn als Output.
> Mit dem Taster baust du eine Kurzschlussgefahr.

Hab meinen Code nun wie folgt geändert (do-while Schleifen anstelle der 
for Schleife und den Eingang auf Pin 2 verlegt):

const int greenTime = 10000;
const int yellowTime = 3000;
const int redTime = 10000;

int greenLED = 3;
int yellowLED = 4;
int redLED = 5;
int temp, i, j, k = 0;
int switchState = 0;

void setup()
{
  pinMode(greenLED, OUTPUT);
  pinMode(yellowLED, OUTPUT);
  pinMode(redLED, OUTPUT);
  pinMode(2, INPUT);
}

void loop()
{
  switchState = digitalRead(2);

  if(switchState == HIGH)
  {
    do
    {
      digitalWrite(redLED, LOW);
      digitalWrite(greenLED, HIGH);
      i++;
    }
    while(i <= greenTime);

    delay(1000);

    do
    {
          digitalWrite(greenLED, LOW);
          digitalWrite(yellowLED, HIGH);
          j++;
    }
    while(j <= yellowTime);

    delay(1000);

    do
    {
        digitalWrite(yellowLED, LOW);
        digitalWrite(redLED, HIGH);
        k++;
    }
    while(k <= redTime);

    delay(1000);
  }
  else
  {
    digitalWrite(greenLED, LOW);
    digitalWrite(yellowLED, LOW);
    digitalWrite(redLED, LOW);
  }
}




Ulrich F. schrieb:
> Du sprichst von:
>> Sekunden
> Tust aber nichts mit "Sekunden"

Stimmt an Kopf lang, jetzt muss ich nur herrausfinden, wie ich das 
implementiere.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.