Grüezi!
Ich komme beim Code-Schreiben nicht weiter! Hoffentlich kann mir jemand von euch auf die Sprünge helfen!
Es geht um ein Zuordnungs-Spiel, welches nun um einen Zustand erweitert werden soll. Bis jetzt kann der Code mittels LED angeben, ob ein Bildpaar korrekt gefunden wurde. Wenn kein richtiges Bildpaar vorhanden ist, leuchtet eine Rote-LED. Nun soll die Rote-LED nur leuchten, wenn ein falsches Bildpaar gewählt wurde. Die Grüne-LED leuchtet bei korrektem Bildpaar und sonst soll NICHTS leuchten.
Ich habe an einen Zähler mittels Variable gedacht, der die Summe von gewählten Bilder hoch und runter zählt. Also 0, 1, oder 2 ist?!
Hoffentlich konnte man mein Problem und meinen Code verstehen?!
Harpa
// ZUORDNUNGS-SPIEL
// Fünf Bildpaare müssen per Steckkontakt (Mono-Klinke-Stecker mit interner Brücke) "verbunden" werden.
// Jede Klinkenbuchse (T1 bis T10) wird via Arduino ausgewertet.
// 3 Zustände sind möglich:
// 1. Kein Stecker oder ein Stecker => keine LED leuchtet.
// 2. Stecker stecken jeweils in einem richtigen Bildpaar => Grüne LED leuchtet.
// 3. Stecker stecken in einem falschem Bildpaar => Rote LED leuchtet.
int T1 = 2; //Klinkenbuchse 1
int T2 = 3; //Klinkenbuchse 2
int T3 = 4; //etc.
int T4 = 5;
int T5 = 6;
int T6 = 7;
int T7 = 8;
int T8 = 9;
int T9 = 10;
int T10 = 11;
int RED = 13; //Rote LED
int GREEN = 12; //Grüne LED
void setup()
{
//Serial.begin(9600); //Startet Serielle Kommunikation
pinMode(T1, INPUT_PULLUP);
pinMode(T2, INPUT_PULLUP);
pinMode(T3, INPUT_PULLUP);
pinMode(T4, INPUT_PULLUP);
pinMode(T5, INPUT_PULLUP);
pinMode(T6, INPUT_PULLUP);
pinMode(T7, INPUT_PULLUP);
pinMode(T8, INPUT_PULLUP);
pinMode(T9, INPUT_PULLUP);
pinMode(T10, INPUT_PULLUP);
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
}
void loop()
{
int Z1 = digitalRead(T1);
int Z2 = digitalRead(T2);
int Z3 = digitalRead(T3);
int Z4 = digitalRead(T4);
int Z5 = digitalRead(T5);
int Z6 = digitalRead(T6);
int Z7 = digitalRead(T7);
int Z8 = digitalRead(T8);
int Z9 = digitalRead(T9);
int Z10 = digitalRead(T10);
// Keep in mind the pullup means the pushbutton's
// logic is inverted. It goes HIGH when it's open,
// and LOW when it's pressed.
if (Z1 == LOW && Z10 == LOW
|| Z3 == LOW && Z6 == LOW
|| Z5 == LOW && Z4 == LOW
|| Z7 == LOW && Z8 == LOW
|| Z9 == LOW && Z2 == LOW
)
{
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
}
else
{
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
}
}
Das mit dem Zähler ist eine gute Idee aber mit der gewählten Realisierung umständlich umzusetzen.
Ich würde Dir vorschlagen Arrays zu nutzen, dann kannst Du die Anzahl der Stecker gleich zählen.
Etwa so (ungetestet)
const byte anzahl = 10;
const byte pins[anzahl] = {2,3,4,5,6,7,8,9,10,11};
// im setup:
for(byte i=0; i < anzahl; i++) {
pinMode(pins[i], INPUT_PULLUP);
}
// im loop
byte aktiv = 0;
for(byte i=0; i < anzahl; i++) {
if (!digitalRead(pins[i])) {
aktiv++;
// evtl. ein Ergebnisarray füllen
}
if (aktiv > 2) Serial.println("geschummelt");
else if (aktiv == 2) {
// rot/grün -Auswertung
}
}
Gruß Tommy
Danke Tommy für den Tipp! Werd's morgen – ausgeschlafen – gleich mal testen. Das wäre natürlich sehr elegant! Hoffentlich bekomm ich den Code hin...
Wenn es klemmt, melde Dich mit dem Code wieder hier.
Gruß Tommy
Lieber Tommy
Es hat nur leicht geklemmt und ich war ganz erstaunt, als es funktionierte!
Vielen herzlichen Dank für den perfekten Impuls in die richtige Richtung.
Es ist für ein interaktives Spiel in unserem Naturmuseum und wird Gross und Klein bestimmt viel Spass machen. Danke!
Harpa
// ZUORDNUNGS-SPIEL
// Fünf Bildpaare müssen per Steckkontakt (Mono-Klinke-Stecker mit interner Brücke) "verbunden" werden.
// Jede Klinkenbuchse (T1 bis T10) wird via Arduino ausgewertet.
// 3 Zustände sind möglich:
// 1. Kein Stecker oder ein Stecker => keine LED leuchtet.
// 2. Stecker stecken jeweils in einem richtigen Bildpaar => Grüne LED leuchtet.
// 3. Stecker stecken in einem falschem Bildpaar => Rote LED leuchtet.
int T1 = 2; //Klinkenbuchse 1
int T2 = 3; //Klinkenbuchse 2
int T3 = 4; //etc.
int T4 = 5;
int T5 = 6;
int T6 = 7;
int T7 = 8;
int T8 = 9;
int T9 = 10;
int T10 = 11;
int RED = 13; //Rote LED
int GREEN = 12; //Grüne LED
const byte anzahl = 10;
const byte pins[anzahl] = {2,3,4,5,6,7,8,9,10,11};
void setup()
{
//Serial.begin(9600); //Startet Serielle Kommunikation
for(byte i=0; i < anzahl; i++) {
pinMode(pins[i], INPUT_PULLUP);
}
/*
pinMode(T1, INPUT_PULLUP);
pinMode(T2, INPUT_PULLUP);
pinMode(T3, INPUT_PULLUP);
pinMode(T4, INPUT_PULLUP);
pinMode(T5, INPUT_PULLUP);
pinMode(T6, INPUT_PULLUP);
pinMode(T7, INPUT_PULLUP);
pinMode(T8, INPUT_PULLUP);
pinMode(T9, INPUT_PULLUP);
pinMode(T10, INPUT_PULLUP);
*/
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
}
void loop()
{
int Z1 = digitalRead(T1);
int Z2 = digitalRead(T2);
int Z3 = digitalRead(T3);
int Z4 = digitalRead(T4);
int Z5 = digitalRead(T5);
int Z6 = digitalRead(T6);
int Z7 = digitalRead(T7);
int Z8 = digitalRead(T8);
int Z9 = digitalRead(T9);
int Z10 = digitalRead(T10);
byte aktiv = 0;
for(byte i=0; i < anzahl; i++) {
if (!digitalRead(pins[i])) {
aktiv++;
// evtl. ein Ergebnisarray füllen
}
if (aktiv < 2){
digitalWrite(RED, LOW);
digitalWrite(GREEN,LOW);
}
else if (aktiv == 2) {
// rot/grün -Auswertung
if (Z1 == LOW && Z2 == LOW
|| Z3 == LOW && Z4 == LOW
|| Z5 == LOW && Z6 == LOW
|| Z7 == LOW && Z8 == LOW
|| Z9 == LOW && Z10 == LOW
)
{
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
}
else
{
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
}
}
}
// Keep in mind the pullup means the pushbutton's
// logic is inverted. It goes HIGH when it's open,
// and LOW when it's pressed.
}
Schön, dass es funktioniert und danke für die Rückmeldung.
Gruß Tommy