Arduino Forum

International => Deutsch => Topic started by: takriol on Apr 03, 2020, 01:37 pm

Title: Quiz Buzzersystem für 8 Spieler
Post by: takriol on Apr 03, 2020, 01:37 pm
Hallo, ich bin neu hier und auch recht unerfahren was das Programmieren von Arduinos angeht.

Ich habe mir vorgenommen ein Quiz mit Buzzern für 8 Spieler zu bauen. Bzw. gebaut ist es schon, zumindest so weit das ich testen kann, und dabei kam jetzt heraus das mein Programm nicht so funktioniert wie ich es gerne hätte. Ich habe es unten angehängt, mit Sicherheit könnt ihr mir da so einige Probleme und Ungereimtheiten zeigen. :D

Es sollte später so ablaufen, dass ich eine Frage stelle und wer die Antwort weiß buzzert. Damit eindeutig entschieden werden kann wer schneller war, hat jeder Spieler eine LED die leuchtet, wenn er der erste war.
Über einen Taster der an 5V und RST angeschlossen ist starte ich die nächste Runde.
Zusätzlich soll ein Signalton für eine Sekunde erklingen wenn jemand buzzert.

Ich denke das sollte gut mit einem Nano realisierbar sein.

Code: [Select]
int p1 = 2; //Buzzer Spieler 1
int p2 = 3; //Buzzer Spieler 2
int p3 = 4; //Buzzer Spieler 3
int p4 = 5; //Buzzer Spieler 4
int p5 = 6; //Buzzer Spieler 5
int p6 = 7; //Buzzer Spieler 6
int p7 = 8; //Buzzer Spieler 7
int p8 = 9; //Buzzer Spieler 8
int l1 = A7; //LED Spieler 1
int l2 = A6; //LED Spieler 2
int l3 = A5; //LED Spieler 3
int l4 = A4; //LED Spieler 4
int l5 = A3; //LED Spieler 5
int l6 = A2; //LED Spieler 6
int l7 = A1; //LED Spieler 7
int l8 = A0; //LED Spieler 8
int peep = 13; //Pieper als Signalton

void setup() {
  pinMode(p1, INPUT); //Buzzer sind an Input
  pinMode(p2, INPUT);
  pinMode(p3, INPUT);
  pinMode(p4, INPUT);
  pinMode(p5, INPUT);
  pinMode(p6, INPUT);
  pinMode(p7, INPUT);
  pinMode(p8, INPUT); 
  digitalWrite(p1, LOW); //Startwert der Buzzer
  digitalWrite(p2, LOW);
  digitalWrite(p3, LOW);
  digitalWrite(p4, LOW);
  digitalWrite(p5, LOW);
  digitalWrite(p6, LOW);
  digitalWrite(p7, LOW);
  digitalWrite(p8, LOW);
  pinMode(l8, OUTPUT); //LEDs sind an Output
  pinMode(l7, OUTPUT);
  pinMode(l6, OUTPUT);
  pinMode(l5, OUTPUT);
  pinMode(l4, OUTPUT);
  pinMode(l3, OUTPUT);
  pinMode(l2, OUTPUT);
  pinMode(l1, OUTPUT);
  digitalWrite(l1, LOW); //LEDs sind zu beginn aus
  digitalWrite(l2, LOW);
  digitalWrite(l3, LOW);
  digitalWrite(l4, LOW);
  digitalWrite(l5, LOW);
  digitalWrite(l6, LOW);
  digitalWrite(l7, LOW);
  digitalWrite(l8, LOW);
  while (digitalRead(l1) == LOW && digitalRead(l2) == LOW && digitalRead(l3) == LOW && digitalRead(l4) == LOW && digitalRead(l5) == LOW && digitalRead(l6) == LOW && digitalRead(l7) == LOW && digitalRead(l8) == LOW){
  //solange kein Buzzer betätigt wurde soll weiter nach einem gedrückten Buzzer 'gesucht' werden
  if (digitalRead(p1) == HIGH){ //Wenn Spieler 1 buzzert leuchtet seine LED und das Programm pausiert, gleiches gilt für alle anderen Spieler
  digitalWrite(l1, HIGH);
  }
  else if (digitalRead(p2) == HIGH){
  digitalWrite(l2, HIGH);
  }
  else if (digitalRead(p3) == HIGH){
  digitalWrite(l3, HIGH);
  }
  else if (digitalRead(p4) == HIGH){
  digitalWrite(l4, HIGH);
  }
  else if (digitalRead(p5) == HIGH){
  digitalWrite(l5, HIGH);
  }
  else if (digitalRead(p6) == HIGH){
  digitalWrite(l6, HIGH);
  }
  else if (digitalRead(p7) == HIGH){
  digitalWrite(l7, HIGH);
  }
  else if (digitalRead(p8) == HIGH){
  digitalWrite(l8, HIGH);
  }
 if (l1 == HIGH || l2 == HIGH || l3 == HIGH || l4 == HIGH || l5 == HIGH || l6 == HIGH | l7 == HIGH || l8 == HIGH){ //Wenn ein Spieler buzzert piept es für eine Sekunde
    digitalWrite(peep, HIGH);
    delay(1000);
    digitalWrite(peep, LOW);
  }
  }
}

void loop(){
}
Title: Re: Quiz Buzzersystem für 8 Spieler
Post by: HotSystems on Apr 03, 2020, 01:53 pm
Hallo,
ich sehe kein Programm, sondern nur Bilder.

Einen Sketch als Bild hier rein zu hängen, ist die schlechteste Idee.

Setze den Sketch bitte in Code-Tags.

Verwende dazu die Schaltfläche </> oben links im Editorfenster.

Dazu den Sketch markieren und die Schaltfläche klicken, oder [ code] davor und [ / code] dahinter ohne Leerzeichen.


Damit wird dieser für alle besser lesbar, auch für mobile Geräte. Das kannst du auch noch nachträglich machen.
Title: Re: Quiz Buzzersystem für 8 Spieler
Post by: my_xy_projekt on Apr 03, 2020, 03:19 pm
Moin,

Du schreibst, was Du willst, aber nicht, was jetzt passiert.
Vielleicht kommst Du dann selbst drauf, wo es klemmt.

Bitte mach Dich mal schlau, was setup() und was loop() machen und wie die funktionieren.

Quote
Über einen Taster der an 5V und RST angeschlossen ist starte ich die nächste Runde.
Dafür ist RST aber nicht gedacht.
Title: Re: Quiz Buzzersystem für 8 Spieler
Post by: takriol on Apr 03, 2020, 03:40 pm
Danke erstmal. Wie weiß ich denn was das Programm macht?
Der Hauptunterschied zwischen setup() und loop() ist doch das loop() ständig neu ausgeführt wird oder nicht?
Ist RST nicht der Resetpin?

Ja, die Taster liegen zwischen Pin uns 5V. Habe keine externen Widerstände.
Title: Re: Quiz Buzzersystem für 8 Spieler
Post by: MicroBahner on Apr 03, 2020, 03:44 pm
Neben dem, was schon geschrieben wurde, noch ein paar grundsätzliche Bemerkungen:

- Die Pins A6 und A7 des Nano sind reine Analog-Eingänge. Die kannst Du nicht als Digitale Ausgänge nutzen.

- Was bezweckst Du mit diesen Anweisungen:
Code: [Select]
digitalWrite(p1, LOW); //Startwert der Buzzer
...
Der Startwert ergibt sich aus der angeschlossenen Hardware.

- Das hier ist sinnfrei:
Code: [Select]
if (l1 == HIGH || l2 == HIGH ...Du vergleichst die Pinnummern mit HIGH/LOW. Aber du willst wohl eher den Status am Pin vergleichen. Ob ein Buzzer gedrückt wurde, machst Du aber besser mit einem Flag.

- Du solltest dich mal ganz dringend mit Arrays beschäftigen.

- Wenn Du keine externen Widerstände hast, musst Du die Taster zwischen PIN und Gnd anschließen. Den Pin mit INPUT_PULLUP initiieren, und die die Taster als LOW-aktiv abfragen.

- Um zu wissen, was das Programm macht, musst Du serielle Ausgaben einfügen, und das am ser. Monitor verfolgen.
Title: Re: Quiz Buzzersystem für 8 Spieler
Post by: noiasca on Apr 03, 2020, 03:46 pm
aktiviere Serial.begin(115200);

bau dir überall Serial.print Ausgaben ein, damit du siehst was dein Programm tut.

Entweder aktivierst die internen Pullups und schließt gegen Masse, oder du brauchst externe Pulldowns.
Schau dir Tutorials an, wie man Buttons anschließt und ausliest.
Title: Re: Quiz Buzzersystem für 8 Spieler
Post by: gregorss on Apr 03, 2020, 05:14 pm
Dafür ist RST aber nicht gedacht.
Das ist hier doch vollkommen wurscht. Es erfüllt seinen Zweck.

Gruß

Gregor
Title: Re: Quiz Buzzersystem für 8 Spieler
Post by: takriol on Apr 03, 2020, 05:48 pm
Ja, ich bin gerade etwas erschlagen von den vielen Dingen die ich noch vor mir habe.
Das mit dem Serial.begin(115200) und Serial.print läuft irgendwie auch nicht so recht. Da kommt nur der Fehler, dass es einen Fehler beim Hochladen gab, aber kein Fehlercode oder sowas.
Title: Re: Quiz Buzzersystem für 8 Spieler
Post by: noiasca on Apr 03, 2020, 05:53 pm
dann geb' ich dir noch etwas Zeit.

https://www.arduino.cc/en/Tutorial/DigitalReadSerial (https://www.arduino.cc/en/Tutorial/DigitalReadSerial) das wäre ein ganz einfaches Beispiel so wie es von Arduino kommt...

Kannst das nachbauen, hochladen und testen?
Title: Re: Quiz Buzzersystem für 8 Spieler
Post by: takriol on Apr 03, 2020, 06:08 pm
Danke, sowas ähnliches mit ner LED zwischen 5V und Taster hatte ich schon als Video gefunden, das zu adaptieren hat aber wie gesagt nicht geklappt.
Title: Re: Quiz Buzzersystem für 8 Spieler
Post by: michael_x on Apr 03, 2020, 10:34 pm
Quote
schon als Video gefunden, das zu adaptieren hat aber wie gesagt nicht geklappt.
Ein Video das zeigt wie toll etwas ist, ist manchmal nicht als Bauanleitung gedacht, sondern will zeigen, dass der Video-Ersteller stolz drauf ist, was er hingekriegt hat.

Eine Fehlerbeschreibung die nur besagt dass etwas nicht klappt, ruft oft noch nicht mal Beileidsbekundungen hervor.

Das bisherige zeigt mir nicht, dass du die Voraussetzungen hingekriegt hast:
1 Taster - 1 Buzzer - Taste gedrückt: Buzzer tönt 1 sec
( Wenn das klappt, wissen wir, dass du einen Taster und den Buzzer richtig anschließen kannst, und brauchen dir nichts von Pulldown-Widerständen erzählen. )
Dann kannst du einen zweiten Taster und 2 LED anschließen und den Sketch erweitern.
Wenn der nicht genau tut was du willst, kannst du erzählen was genau passiert und wir sehen weiter
(wenn du Glück hast, erklärt dir jemand warum genau das passiert was du programmiert hast).
Wenn nicht: Geht denn wenigstens der vorige Sketch noch (erste Taste gedrückt: Buzzer tönt 1 sec) ?

Noch ein Tip:
Wenn die LED auch nur solange leuchten soll wie der Buzzer tönt (1 sec) und egal ist, was währenddessen und danach passiert, kannst du dir das Ganze mit einem delay(1000); ganz einfach machen; selbst wenn du schon irgendwo gelesen hast, dass delay nicht gut ist wenn in einem Sketch Taster erfasst werden sollen. (Das Taster erfassen wird bei dir dann absichtlich verhindert, und nur die erste LED leuchtet 1 Sekunde lang)

Wenn du es komplizierter haben willst (z.B. der Buzzer trötet 1 sec, aber die LED bleibt an, bis der Quizmaster sie zurücksetzt) wird es natürlich komplizierter.

Die Fleißarbeit mit 8 Tastern brauchst du erst anzufangen, wenn du das mit zweien hingekriegt hast und noch Spaß an der Sache hast. (Das wäre jedenfalls meine Vorgehensweise)

Title: Re: Quiz Buzzersystem für 8 Spieler
Post by: MicroBahner on Apr 03, 2020, 10:52 pm
Die Fleißarbeit mit 8 Tastern brauchst du erst anzufangen, wenn du das mit zweien hingekriegt hast und noch Spaß an der Sache hast. (Das wäre jedenfalls meine Vorgehensweise)
Und wenn Du dir vorher die Fleißarbeit machst, und dich ein wenig mit Arrays beschäftigst, ist die Erweiterung auf 8 Tasten dann noch nichtmal eine Fleißarbeit ;)
Title: Re: Quiz Buzzersystem für 8 Spieler
Post by: noiasca on Apr 05, 2020, 10:34 pm
@takriol: Ich hoffe deine Recherchen haben was ergeben.
Wenn nicht, meinen Vorschlag und eine Erklärung dazu findest du auf meiner Seite (https://werner.rothschopf.net/202003_arduino_buzzer_fsm.htm).

(https://forum.arduino.cc/index.php?action=dlattach;topic=674983.0;attach=355761)
Title: Re: Quiz Buzzersystem für 8 Spieler
Post by: takriol on Apr 30, 2020, 09:59 pm
@noiasca Danke erstmal für die umfangreiche Hilfe, ich habe zwischendurch mal ein bisschen Abstand von dem Projekt genommen. Aber jetzt habe ich wieder Lust bekommen das mal endlich fertig zu machen. Dein Sketch lässt sich bei mir leider nicht kompilieren. error: too many arguments to function 'void noTone(uint8_t)'
Title: Re: Quiz Buzzersystem für 8 Spieler
Post by: postmaster-ino on Apr 30, 2020, 10:22 pm
Hi

Dann wird der Kompiler wohl damit Recht haben.
noTone() wünscht NUR den Pin, wo der Ton eben abgeschaltet werden soll - was übergibst Du sonst noch Alles?

MfG
Title: Re: Quiz Buzzersystem für 8 Spieler
Post by: noiasca on Apr 30, 2020, 11:14 pm
ja, soll wohl nur noTone(peep); heißen