INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Ampelprogramm nur ein einziges mal Durchlaufen lassen
18.01.2014, 18:50
Beitrag #1
Ampelprogramm nur ein einziges mal Durchlaufen lassen
Hallo liebe Gemeinde,

ich bin neu hier und habe gerade heute mit dem Programmieren eines Arduino angefangen. Wie schon im Betreff zu lesen habe ich mit einer einfachen Ampelsteuerung angefangen.
Nun läuft das ganze allerdings unendlich lange, ich würde das ganze aber gerne dahingehend ändern das dass Programm nun nur einmal durchläuft. Quasi das ganze in eine schleife packen und nur einmal durchlaufen eben.
Es wäre nett wenn mir jemand den Start etwas erleichtern könnte. Da ich nicht genau weiß wo und wie ich das ganze in eine schleife Packe.
Code:
int ledPins [] = {12,10,8};

void setup()
{
  for(int i=0; i<3; i++)
  {
    pinMode(ledPins[i],OUTPUT);
  }
  Serial.begin(9600);
  Serial.println("Programm startet");
}
void loop()
{
  Serial.println("Die Ampel ist rot");
  ampel_Schaltung(true,false,false);
  delay(5000);
  Serial.println("Die Ampel ist rot&rot");
  ampel_Schaltung(true,true,false);
  delay(1000);
  Serial.println("Die Ampel ist gruen");
  ampel_Schaltung(false,false,true);
  delay(5000);
}
void ampel_Schaltung(boolean rot, boolean gelb, boolean gruen)
{
  if(rot)
  digitalWrite(ledPins[0],HIGH);
  else
  digitalWrite(ledPins[0],LOW);
  if(gelb)
  digitalWrite(ledPins[1],HIGH);
  else
  digitalWrite(ledPins[1],LOW);
  if(gruen)
  digitalWrite(ledPins[2],HIGH);
  else
  digitalWrite(ledPins[2],LOW);
}

Liebe grüße Twinky
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.01.2014, 19:19
Beitrag #2
Information RE: Ampelprogramm nur ein einziges mal Durchlaufen lassen
Schreib alles aus void loop() in void setup() und die Ampel läuft nur einmal.

void loop(){
}


oder loop ganz löschen

VG emstade
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.01.2014, 23:25 (Dieser Beitrag wurde zuletzt bearbeitet: 18.01.2014 23:35 von Polar.)
Beitrag #3
RE: Ampelprogramm nur ein einziges mal Durchlaufen lassen
Oder er setzt das Ganze in eine einmalige Bedingung.

Code:
int ledPins [] = {12,10,8};
int i = 0;

void setup()
{
  for(int i=0; i<3; i++)
  {
    pinMode(ledPins[i],OUTPUT);
  }
  Serial.begin(9600);
  Serial.println("Programm startet");
}

void loop()
{
if (i==0){
i++;

  Serial.println("Die Ampel ist rot");
  ampel_Schaltung(true,false,false);
  delay(5000);
  Serial.println("Die Ampel ist rot&rot");
  ampel_Schaltung(true,true,false);
  delay(1000);
  Serial.println("Die Ampel ist gruen");
  ampel_Schaltung(false,false,true);
  delay(5000);
}
void ampel_Schaltung(boolean rot, boolean gelb, boolean gruen)
{
  if(rot)
  digitalWrite(ledPins[0],HIGH);
  else
  digitalWrite(ledPins[0],LOW);
  if(gelb)
  digitalWrite(ledPins[1],HIGH);
  else
  digitalWrite(ledPins[1],LOW);
  if(gruen)
  digitalWrite(ledPins[2],HIGH);
  else
  digitalWrite(ledPins[2],LOW);
}
}

Mit "if (i < x)" könnte er dann, als nächsten Schritt die Anzahl der Durchläufe festlegen.
Bei diesem Beispiel würde die Loop-Schleife dreimal durchlaufen:
Code:
loop (){
if (i<3){
i++;
/*hier steht der Rest vom Code*/
}
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.01.2014, 12:08
Beitrag #4
RE: Ampelprogramm nur ein einziges mal Durchlaufen lassen
Danke für die schnellen Antworten ich würde gerne das ganze mit der if Funktion weiter verfolgen. Das das ganze so oft durchläuft wie ich das will gefällt mir.
Allerdings habe ich jetzt wie Polar es mir gezeigt hatte die if Funktion für 3 mal eingebaut und nun kommen leider ein paar Fehlermeldungen.

Hier erst nochmal der Code
Code:
int ledPins [] = {12,10,8};
int i=0;

void setup()
{
   for(int i=0; i<3; i++)
   {
     pinMode(ledPins[i],OUTPUT);
   }
   Serial.begin(9600);
   Serial.println("Programm startet");
}

void loop()
{
if (i<3)
   {
   i++;
    
     Serial.println("Die Ampel ist rot");
     ampel_Schaltung(true,false,false);
     delay(5000);
     Serial.println("Die Ampel ist rot&rot");
     ampel_Schaltung(true,true,false);
     delay(1000);
     Serial.println("Die Ampel ist gruen");
     ampel_Schaltung(false,false,true);
     delay(5000);
   }
   void ampel_Schaltung(boolean rot, boolean gelb, boolean gruen)
   {
   if(rot)
   digitalWrite(ledPins[0],HIGH);
   else
   digitalWrite(ledPins[0],LOW);
   if(gelb)
   digitalWrite(ledPins[1],HIGH);
   else
   digitalWrite(ledPins[1],LOW);
   if(gruen)
   digitalWrite(ledPins[2],HIGH);
   else
   digitalWrite(ledPins[2],LOW);
   }
}

und da kommt jetzt leider folgende Fehlermeldung.
sketch_jan19b.ino: In function 'void loop()':
sketch_jan19b:21: error: 'ampel_Schaltung' was not declared in this scope
sketch_jan19b:31: error: a function-definition is not allowed here before '{' token

leider verstehe ich das ganze auch nicht wenn ich mir das ins deutsche übersetze. bzw verstehen schon aber ich weiß einfach nichts so richtig damit anzufangen.
Vllt kann mir ja noch mal jemand helfen.

LG Twinky
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.01.2014, 15:49 (Dieser Beitrag wurde zuletzt bearbeitet: 19.01.2014 15:55 von emstade.)
Beitrag #5
Exclamation RE: Ampelprogramm nur ein einziges mal Durchlaufen lassen
Da ist dir eine geschweifte Klammer etwas verruscht.
Der Anhang enthält eine berichtigte Version

Jetzt ist die berichtigte Datei wirklich dabei
VG emstade


Angehängte Datei(en)
.ino  sketch_jan19b.ino (Größe: 882 Bytes / Downloads: 85)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.01.2014, 07:29
Beitrag #6
RE: Ampelprogramm nur ein einziges mal Durchlaufen lassen
Grundsätzlich kannst du einen Sketch immer immer anhalten/beenden, wenn du

Code:
for(;;){}

verwendest. Durchaus eine gängige Methode bei µC Wink

MfG demo
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.01.2014, 09:10 (Dieser Beitrag wurde zuletzt bearbeitet: 20.01.2014 09:10 von Polar.)
Beitrag #7
RE: Ampelprogramm nur ein einziges mal Durchlaufen lassen
(20.01.2014 07:29)demokrit schrieb:  Grundsätzlich kannst du einen Sketch immer immer anhalten/beenden, wenn du

Code:
for(;;){}

verwendest. Durchaus eine gängige Methode bei µC Wink

MfG demo


Hilf mir bitte mal auf die Sprünge.

Das ist doch nur eine For-Schleife ohne Bedingungen.
Warum sollte dadurch etwas beendet werden?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.01.2014, 09:15
Beitrag #8
RE: Ampelprogramm nur ein einziges mal Durchlaufen lassen
(20.01.2014 09:10)Polar schrieb:  
(20.01.2014 07:29)demokrit schrieb:  Grundsätzlich kannst du einen Sketch immer immer anhalten/beenden, wenn du

Code:
for(;;){}

verwendest. Durchaus eine gängige Methode bei µC Wink

MfG demo


Hilf mir bitte mal auf die Sprünge.

Das ist doch nur eine For-Schleife ohne Bedingungen.
Warum sollte dadurch etwas beendet werden?


Der Takt deines Mikrocontrollers läuft ja weiter, also "will er die ganze Zeit was machen".
Eine for-Schleife ohne Bedingungen läuft unendlich. Er macht also quasi nichts und ist damit angehalten/unterbrochen. Der Zustand kann nur durch einen Reset verlassen werden.

MfG demo
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  tip für Qellcode nur 1mal ablaufen lassen himbeersirup 4 349 19.05.2016 11:51
Letzter Beitrag: himbeersirup
  Programme lassen sich nicht auf das Gemma Board downloaden! Jack Sparrow 13 563 08.04.2016 10:01
Letzter Beitrag: hotsystems
  Lampe mit Key leuchten lassen FCraftLP 1 466 05.03.2016 11:44
Letzter Beitrag: hotsystems
  Leds blinken lassen mit if-Abfrage und millis ferdi 11 1.511 24.10.2015 08:54
Letzter Beitrag: Bitklopfer
  Counter rückwärts laufen lassen???? Haustechno 6 910 10.08.2015 18:26
Letzter Beitrag: Haustechno
  Loop nur einmal durchlaufen wowa 7 1.840 02.06.2015 20:05
Letzter Beitrag: wowa
  mehrere funksteckdosen über arduino laufen lassen. purzele06 12 1.939 28.03.2015 02:03
Letzter Beitrag: Homer
  Arduino mit der Außenwelt kommunizieren lassen raspido 0 744 22.03.2015 19:50
Letzter Beitrag: raspido
  LED Blinken lassen ohne delay und mit einem Ende EddyErdmann 3 2.992 26.10.2014 19:33
Letzter Beitrag: Thorsten Pferdekämper
  led blinken lassen sascha_k 2 1.332 17.10.2014 18:18
Letzter Beitrag: sascha_k

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste