Hallo ich habe eine eigentlich Simple Aufgabe für die Schule bekommen
Zwei LEDs welche abwechselnd blinken zu lassen, mit einem Schalter ein und aus zu Schalten und mit einem zweiten die Frequenz zwischen 1Hz und 2 Hz umzuschalten.
bei mir fängt immer nur die 2te LED an zu leuchten und ich finde meinen Fehler nicht
Hier der Code
Da ist was schief gegangen, wie Du an der ersten Klammer nach dem delay(500) in Deinem Post erkennen kannst.
Gehe in Deinen ersten Post und editiere dieses.
Lösche den Code komplett.
Gehe in die IDE und dort auf BEARBEITEN - FÜR FORUM KOPIEREN - und dann kannst Du das einfach mit der rechten Maustaste ganz nohrmal einfügen.
Fertig....
Du solltest das, was man Dir schreibt auch lesen und beherzigen. Sonst wird das nichts mit der Hilfe. Links sind ebenfalls dazu da, das zu lesen, worauf sie zeigen.
Das wird nix!
Du gibst Deinen LED-Status nicht aus, sondern überschreibst den sofort wieder mit Ablauf des delay()!
Aber bevor Du weitermachst, gehst Du bitte in Dein Arduino-Verzeichnis und dort in das Unterverzeichnis lib und editierst die Datei formatter.conf
An das Ende der Datei schreibst Du folgendes:
# Kill all lines within Braces and without Code
delete-empty-lines
Speichern.
IDE beenden und neu starten.
Wenn der Code geladen ist, dann einmal STRG-T drücken.
Und wenn Du das gemacht hast, dann sieht der Code schick aus und Du kannst in den Beispielen das BLINK WITHOUT DELAY -Example mal anschauen.
Da siehst Du wie es blinkt ohne Einsatz von delay(),
Das musst Du dann für Deinen Zweck umarbeiten...
Eigentlich wurde mir ja auch immer vorgeworfen, vollständige Codes für Schulprojekte sind kontraproduktiv. Aber nachdem nun einer da ist, habe ich mich mal genau an dem Original orientiert.
Das wäre dann der folgende Code. Geht sogar mit delay().
Das ist die Fassung, die ich jetzt aktiviert habe.
Damit Du siehst, das das kontraproduktiv ist, kannst Du die Zeiten fürs blinken mal verlängern und dann den Schalter 1 aus machen.
Wenn Du Pech hast, dann wartest Du eine komplette Blinkfrequenz, bis die LED OFF gehen.
Die Ausgabe habe ich noch ein zweites Mal gebaut, um zu zeigen, das die Betätigung des Schalters 1 auch während einer einzigen Leucht- oder Pausenphase sofort zum Ende des blinkens führt.
Du musst also den aktiven Funktionsblock auskommentieren und dann den anderen einkommentieren....
Natürlich habe ich mich an Deinen Variablen orientiert - obwohl es mir widerstrebt - aber es ist ja ein Projekt....
// Forensketch Wechselblinker mit zwei Blinkfrequenzen
// Basiert auf https://forum.arduino.cc/t/schulprojekt-hilfe/1053172
// aufgrund der Ausgangslage Vorgaben nicht verändert!
/*
Was der Code machen soll:
Je nach Schalterstellung1 Blinken oder nicht
Je nach Schalterstellung2 Blinkfrequenz mit 1Hz oder 2Hz
1HZ = 1Takt/Sekunde sind 1Takt/1000ms
2Hz = 2Takte/Sekunde sind 1Takt/500ms
Es gibt zwei unterschiedliche Ausgabevarianten die das selbe machen
*/
// pins definieren
#define IN_Schalter1 4
#define IN_Schalter2 5
#define OUT_LED1 2
#define OUT_LED2 13
//Variablen
bool Schalter1;
bool Schalter2;
bool LED1;
bool LED2;
unsigned int Takt;
unsigned long lastBlink;
void setup()
{
// Ein und Ausgang Pins bestimmt
pinMode(IN_Schalter1, INPUT);
pinMode(IN_Schalter2, INPUT);
pinMode(OUT_LED1, OUTPUT);
pinMode(OUT_LED2, OUTPUT);
}
void loop()
{
Auslesen();
Verarbeitung();
Ausgeben();
}
void Auslesen(void) //Eingabe
{
//Schalter auslesen
Schalter1 = digitalRead(IN_Schalter1);
Schalter2 = digitalRead(IN_Schalter2);
}
void Verarbeitung(void)
{
//Verarbeitung des Programms
if (Schalter1 == LOW) // Ausschalten
{
Takt = 0;
}
else // Einschalten
{
if (Schalter2 == HIGH)
{
Takt = 500; // Vorgabe für 2Hz
}
else
{
Takt = 1000; // Vorgabe für 1Hz
}
}
}
// Die folgende Variante ist vermutlich der Schulstoff
void Ausgeben(void)
{
if (Takt == 0)
{
digitalWrite(OUT_LED1, LOW);
digitalWrite(OUT_LED2, LOW);
}
else
{
digitalWrite(OUT_LED1, LOW);
digitalWrite(OUT_LED2, HIGH);
delay(Takt);
digitalWrite(OUT_LED1, HIGH);
digitalWrite(OUT_LED2, LOW);
delay(Takt);
}
}
/*
// Diese Variante ist blockadefrei und technisch zu bevorzugen
void Ausgeben(void) //Ausgabe der Signale
{
if (Takt == 0)
{
digitalWrite(OUT_LED1, LOW);
digitalWrite(OUT_LED2, LOW);
}
else if (millis() - lastBlink > Takt)
{
digitalWrite(OUT_LED1, !digitalRead(OUT_LED1));
digitalWrite(OUT_LED2, !digitalRead(OUT_LED1));
lastBlink = millis();
}
}
*/