Das ist meine Erstes Script und ich wollte mal fragen ob dieses so funktionirt, der Arduino soll drei anzeigen die mit einem Signal hoch und mit einem Anderen resettet werden steuern . Jeden Tag sollen die Gsamtzahl um eins größer werden, jedes Display kann Ziffern von 0-9 Anzeigen. Die gezählten tage sollen jederzeit mit einem Taster zurückgesetzt werden.
ich habe es nochmal verändert und vom logischen her funktionirt es allerdings bin ich mir in der Schreibweise nicht sicher. Außerdem wollte ich fragen ob ich irgendwie dafür Sorgen kann, dass ich mit meinem Schalter immer das Display zurücksetzen kann, da im moment ja nur einmal ganz am anfang zurückgesetzt werden kann, da das script dann ja witer abläuft. Außerdem würde mich noch interessiren ob ich die Variablen der Tage so auf null setzen kann wie ich es getan habe.
Danke Schon mal im Vorraus
Ich habe es ein bisschen besser kommentiert und verbessert und hoffe, das es besser Nachvollziebar ist
int tag1 = 0;//die zählervariablen für die Anzahl der Tage werden kreirt
int tag2 = 0;
int tag3 = 0;
void setup()
{
pinMode(13, OUTPUT);// folgende 3 Signale sind die Signale um die Anzeigen um eins zu erhöhen
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, INPUT);// taster zum Zurücksetzen
pinMode(9, OUTPUT);//Folgende Signale sind die Rücksetzsignale der Anzeigen
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
}
void loop() {
if(digitalRead(10) == LOW)//wenn Taster gedrückt
{digitalWrite(9, HIGH);//rücksetzsignale für alle Anzeigen
digitalWrite(8, HIGH);
digitalWrite(7, HIGH);
delay(1000);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
}
else{
for(;tag1 <= 9;tag1++)//schleife die die anzahl der tage auf dem ersten bildschirm erhöht
{
digitalWrite(13, HIGH);//tag1 um eins erhöhen
delay(1000);
digitalWrite(13, LOW);
delay(86400000<U+202C>);// warte einen tag
}
if(tag1 == 9)//wenn nuen Tage erreicht sind setze Anzeige 1 zurück
{
digitalWrite(9, HIGH);// tag 1 zurücksetzen
delay(1000);
digitalWrite(9, LOW);
if(tag2 <=9)//wenn tag2 noch nicht neun erreicht hat setze den Zähler um eins hoch
{
for(;tag1 != 0;tag2++)
{
int tag1=0;
digitalWrite(12, HIGH);//tag2 um eins erhöhen
delay(1000);
digitalWrite(12, LOW);
}
}
else//wenn tag 2 schon bei neun ist sezte tag 2 zurück und ehhöhe tag 3 um 1´
{
digitalWrite(8, HIGH);//tag2 zurücksetzen
delay(1000);
digitalWrite(8, LOW);
digitalWrite(11, HIGH);//tag3 um eins erhöhen
delay(1000);
digitalWrite(11, LOW);
int tag1=0;//setze die Zähler beider Tage zurück
int tag2=0;
}
}
}
}
Hi
Bis zu 9000 Zeichen kannst Du in CODE-Tags den Sketch (beim Arduino heißen die Listings Sketch, nicht Script) direkt lesbar und kopierbar in den Post einfügen.
Leider sind Deine Ausführungen etwas wirr - auch vermisse ich große Buchstaben.
Bitte, dafür hättest Du Dich, besonders nicht vorher, bedanken müssen.
MfG
Ich habe es ein bisschen besser kommentiert und verbessert und hoffe, das es besser Nachvollziebar ist und weniger falsch ist
int tag1 = 0;//die zählervariablen für die Anzahl der Tage werden kreirt
int tag2 = 0;
int tag3 = 0;
void setup()
{
pinMode(13, OUTPUT);// folgende 3 Signale sind die Signale um die Anzeigen um eins zu erhöhen
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, INPUT);// taster zum Zurücksetzen
pinMode(9, OUTPUT);//Folgende Signale sind die Rücksetzsignale der Anzeigen
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
}
void loop() {
if(digitalRead(10) == LOW)//wenn Taster gedrückt
{digitalWrite(9, HIGH);//rücksetzsignale für alle Anzeigen
digitalWrite(8, HIGH);
digitalWrite(7, HIGH);
delay(1000);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
}
else{
for(;tag1 <= 9;tag1++)//schleife die die anzahl der tage auf dem ersten bildschirm erhöht
{
digitalWrite(13, HIGH);//tag1 um eins erhöhen
delay(1000);
digitalWrite(13, LOW);
delay(86400000<U+202C>);// warte einen tag
}
if(tag1 == 9)//wenn nuen Tage erreicht sind setze Anzeige 1 zurück
{
digitalWrite(9, HIGH);// tag 1 zurücksetzen
delay(1000);
digitalWrite(9, LOW);
if(tag2 <=9)//wenn tag2 noch nicht neun erreicht hat setze den Zähler um eins hoch
{
for(;tag1 != 0;tag2++)
{
int tag1=0;
digitalWrite(12, HIGH);//tag2 um eins erhöhen
delay(1000);
digitalWrite(12, LOW);
}
}
else//wenn tag 2 schon bei neun ist sezte tag 2 zurück und ehhöhe tag 3 um 1´
{
digitalWrite(8, HIGH);//tag2 zurücksetzen
delay(1000);
digitalWrite(8, LOW);
digitalWrite(11, HIGH);//tag3 um eins erhöhen
delay(1000);
digitalWrite(11, LOW);
int tag1=0;//setze die Zähler beider Tage zurück
int tag2=0;
}
}
}
}
Hallo FliyingUwe,
Dein Feind (Problem) das Du die Anzeigen nur ganz am Anfang zurücksetzten kannst, lieget am delay(86400000); // einen tag warten, denn genau das macht dann der arduino, nämlich für 24 Stunden garnix (ausser schauen , ob 24 Stunden um sind)
Schaue Dir mal das Beispiel 'Blink without delay' in der IDE an.
Ausserdem solltest du in der Referenz/Hilfe mal die Funktion 'for()' anschauen und wie die parameter erwartet werden.
Zudem brauchst Du die for-Schleife gar nicht, denn du hast schon eine Schleife, die Dein arduino abarbeitet - nämlich loop() .
so müsste es gehen:
unsigned long previus = 0;
unsigned long wait1day = 86400000;
int tag1 = 0;//die zählervariablen für die Anzahl der Tage werden kreirt
int tag2 = 0;
int tag3 = 0;
void setup()
{
pinMode(13, OUTPUT);// folgende 3 Signale sind die Signale um die Anzeigen um eins zu erhöhen
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, INPUT);// taster zum Zurücksetzen
pinMode(9, OUTPUT);//Folgende Signale sind die Rücksetzsignale der Anzeigen
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
}
void loop() {
if(digitalRead(10) == LOW)//wenn Taster gedrückt
{digitalWrite(9, HIGH);//rücksetzsignale für alle Anzeigen
digitalWrite(8, HIGH);
digitalWrite(7, HIGH);
delay(1000);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
}
else
{
if (previus == 0 || millis() - previus > wait1day){ // wenn das program grad gestartet wurde, oder 24 Stunden um sind dann Anzeige aktualisieren.
tag1++; // zähler tag1 um 1 erhöhen
{
digitalWrite(13, HIGH);//tag1 um eins erhöhen
delay(1000);
digitalWrite(13, LOW);
previus = millis(); // zeit merken wann der tag um eins erhöht wurde
if(tag1 == 9)//wenn nuen Tage erreicht sind setze Anzeige 1 zurück
{
digitalWrite(9, HIGH);// tag 1 zurücksetzen
delay(1000);
digitalWrite(9, LOW);
tag1 = 0; // zähler tag1 zurücksetzen
tag2 ++;
if(tag2 < 9)//wenn tag2 noch nicht neun erreicht hat setze den Zähler um eins hoch
{
digitalWrite(12, HIGH);//tag2 um eins erhöhen
delay(1000);
digitalWrite(12, LOW);
}
else//wenn tag 2 schon bei neun ist sezte tag 2 zurück und ehhöhe tag 3 um 1´
{
digitalWrite(8, HIGH);//tag2 zurücksetzen
delay(1000);
digitalWrite(8, LOW);
digitalWrite(11, HIGH);//tag3 um eins erhöhen
delay(1000);
digitalWrite(11, LOW);
tag1=0;//setze die Zähler beider Tage zurück
tag2=0;
}
}
}
}
}
}
Ach ja, brauchen Deine Anzeigen wirklich eine Impulslänge von einer Sekunde um den Zählerstand um 1 zu erhöhen oder um den Rücksetz-Befehl zu erkennen?
Man könnte auch da eine funktion schreiben, die den Impuls erzeugt und statt mit delay , mit millis() arbeitet.
Taster und ein 24Stunden-Delay macht normal nicht viel Sinn.
Ausserdem schreibt man kein Skript, das einmal im Verlauf mehrerer Tage durchläuft, sondern einen Sketch, dessen Funktion loop() unendlich oft drankommt und möglichst keine Zeit braucht.