Warum funktioniert es????

Guten Tag community,

ich bin blutiger Anfänger was Elektronik und Programmieren angeht.

Letzte Woche habe ich mir das Arduino UNO R3 starterpaket geholt um etwas zu spielen.

Jetzt hab ich Abends gedacht ich versuche ein kleines Zufallsspiel mit 5 LED´S und 5 Taster zu bauen und zu programmieren.

Es funktioniert auch komischer weiße genau so wie ich es wollte!!!!

//Spiel Prinzip

Zufalls LED generiert vom Arduino.
Spieler drückt Taste.
Generierte LED leuchtet wenn es der richtige Taster war.
Wenn es der Falsche Taster war leuchtet die richige LED.<----- Da ist der Wurm drin.

//

Also ich wollte das die Richtige LED bei falschem Button leuchtet. Aber ich habe es nicht Programmiert weil ich noch nicht wusste wie ich das mit den Variablen am einfachsten mache.

Da hab ich zuerst einmal ein paar weitere Kabel an die Button angeschlossen (Absicht war das rauschen aus den Buttons raus zu bekommen).

Effekt war.---> Die richtige LED bei falschem Button Leuchtet.

ABER WARUM???? Ich hab zu wenig Ahnung von STROM usw. und bitte hiermit um eine Erklärung warum es funktioniert.

Ich habe die Schaltung gezeichnet und den Code mit hochgeladen.

Viellicht blickt einer durch mein Chaos durch.

Und ja ich bin Anfänger aber ich freue mich schon darüber dass etwas blinkt :smiley: :smiley:

Grüße aus der Pfalz und an alles die es betrifft einen schönen Feiertag!

PS:/// ich habe die Originale Fritzing Zeichnung in .doc umbenannt einfach zurück in .fzz dann sollte es gehen.

LED ratespiel prog.ino (2.32 KB)

LED ratespiel.doc (8.35 KB)

Ohne die Anhänge zu öffnen- mal eine Frage....

Man kann es doch darauf reduzieren, dass wenn eine beliebige Taste gedrück wird, eine beliebige LED aufleuchtet. Eine logische Verknüpfung zwischen Eingabe und Ausgabe ist somit nicht erforderlich.

Dein Sketch (der Button </> links oben des Editorfensters):

int led1=3;
int led2=5;
int led3=6;
int led4=9;
int led5=10;

int b1=2;
int b2=4;
int b3=7;
int b4=8;
int b5=12;

int sollzahl=0;
int helligkeit=8;



void setup() {
  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
  pinMode(led4,OUTPUT);
  pinMode(led5,OUTPUT);
  pinMode(b1,INPUT);
  pinMode(b2,INPUT);
  pinMode(b3,INPUT);
  pinMode(b4,INPUT);
  pinMode(b5,INPUT);
  Serial.begin(9600);

}

void loop() {
  int buttonstate1=0;
  int buttonstate2=0;
  int buttonstate3=0;
  int buttonstate4=0;
  int buttonstate5=0;
  
  while (digitalRead(b1)==LOW & digitalRead(b2)==LOW & digitalRead(b3)==LOW & digitalRead(b4)==LOW & digitalRead(b5)==LOW){
    generator();
    flash();
    
  }

  
  buttonstate1=digitalRead(b1); //button abfrage
  buttonstate2=digitalRead(b2);
  buttonstate3=digitalRead(b3);
  buttonstate4=digitalRead(b4);
  buttonstate5=digitalRead(b5);

  
  if(buttonstate1 == HIGH & sollzahl==1){
    analogWrite(led1,helligkeit);
    delay(3000);
    digitalWrite(led1,LOW);
    goto rearm;
    
  }
  if (buttonstate2 == HIGH & sollzahl==2){
    analogWrite(led2,helligkeit);
    delay(3000);
    digitalWrite(led2,LOW);
    goto rearm;
    }
    if (buttonstate3 == HIGH & sollzahl==3){
      analogWrite(led3,helligkeit);
      delay(3000);
      digitalWrite(led3,LOW);
      goto rearm;
    }
    if (buttonstate4 == HIGH & sollzahl==4){
      analogWrite(led4,helligkeit);
      delay(3000);
      digitalWrite(led4,LOW);
      goto rearm;
    }
    if (buttonstate5 == HIGH & sollzahl==5){
      analogWrite(led5,helligkeit);
      delay(3000);
      digitalWrite(led5,LOW);
      goto rearm;
    }
   
//      analogWrite(led1,helligkeit);
//      analogWrite(led2,helligkeit);
//      analogWrite(led3,helligkeit);
//      analogWrite(led4,helligkeit);
//      analogWrite(led5,helligkeit);
//      Serial.println(sollzahl);
//      delay(2000);
      
      
    rearm:;
    delay(100);
    }
  
  

void generator() {
  sollzahl = rand() % 5+1;
  }

void flash(){
      Serial.println(sollzahl);
    analogWrite(led1,helligkeit);
    analogWrite(led2,helligkeit);
    analogWrite(led3,helligkeit);
    analogWrite(led4,helligkeit);
    analogWrite(led5,helligkeit);
    delay(400);
    analogWrite(led1,0);
    analogWrite(led2,0);
    analogWrite(led3,0);
    analogWrite(led4,0);
    analogWrite(led5,0);
    delay(400);
}

Deine Schaltung (der rechteckige Button in der Mitte des Editorfensters):


So bekommst Du auch Antworten von Tablet-Nutzern.

Damit willkommen im Forum :slight_smile:

playborn:
Es funktioniert auch komischer weiße genau so wie ich es wollte!!!!

Funktioniert es wirklich ?
Und funktioniert es jetzt immer noch ?

Wenn du Leds ohne Vorwiderstand anschließt, kann es schnell passieren, das es deinen Atmega zerschießt.

Und Warum ein externer Pullup für die Taster und der liegt auf 3,3 Volt.
Du kannst einen internen Pullup verwenden.

Also ja die Steuerung funktioniert tadellos.

Ich habe keine Ahnung was ein pullup ist.
Die taster habe ich an 3.3V angeschlossen weil ich der Meinung bin für ein HIGH Signal reicht es.

Wie gesagt ich hab das ding ca. eine Woche lang und arbeite nur mit dem was ich bisher gelesen habe und versuche es immer wieder anzuwenden um es zu vertiefen.

Weg geraucht sind mit bisher nur ein paar leds aber bei anderen Schaltungen.

playborn:
Also ja die Steuerung funktioniert tadellos.

Noch, wenn du weiterhin ohne Vorwiderstand für die Led arbeitest, evtl. nicht mehr lange.

Ich habe keine Ahnung was ein pullup ist.

Zieht die Leitung auf HIGH-Potential. Bitte Grundlagen lesen !

Die taster habe ich an 3.3V angeschlossen weil ich der Meinung bin für ein HIGH Signal reicht es.

Mann sollte in einem System, wenn nicht anders erforderlich, immer bei der selben Spannung bleiben.

Da hab ich zuerst einmal ein paar weitere Kabel an die Button angeschlossen (Absicht war das rauschen aus den Buttons raus zu bekommen).

Und das hier musst du mal genauer erklären. Was meinst du mir "rauschen aus den Buttons" ?
Das habe ich bisher noch nicht gehört.

Zu dem rauschen.

Ich habe festgestellt dass die Buttons bzw. die Leitungen eine gewisse Kapazität haben.

Also wenn ich einen Button drücke und wieder los lasse liefert er eine gewisse zeit noch ein high signal.

Das habe ich vorher nicht gewusst und habe die buttons jetzt über einen großen widerstand auf gnd gelegt.

Aber genau durch diesen GND anschluss leuchtet jetzt die LED wie im ersten post beschrieben.

Die LED´s habe ich jetzt auch mit einem widerstand belegt

Aber zurück zum eigentlichen Thema.

Ich möchte einfach nur den elektrischen Hintergrund verstehen warum die vom Zufall ausgewählte LED leuchtet wenn ich den falschen Button drücke.

Grüße

playborn:
Aber zurück zum eigentlichen Thema.

Ich möchte einfach nur den elektrischen Hintergrund verstehen warum die vom Zufall ausgewählte LED leuchtet wenn ich den falschen Button drücke.

Naja, so einfach ist es nicht. Wenn du die einfachen Dinge nicht verstehst, wie soll es dann mir den komplizierten funktionieren.

Zu dem rauschen.
Ich habe festgestellt dass die Buttons bzw. die Leitungen eine gewisse Kapazität haben.
Also wenn ich einen Button drücke und wieder los lasse liefert er eine gewisse zeit noch ein high signal.
Das habe ich vorher nicht gewusst und habe die buttons jetzt über einen großen widerstand auf gnd gelegt.
Aber genau durch diesen GND anschluss leuchtet jetzt die LED wie im ersten post beschrieben.

Mit "Rauschen" der Taster hat das nichts zu tun.
Durch lange Kabel und fehlenden Pullup-Widerstand sind die Eingänge sehr störungsanfällig. Die Kabel wirken wie Antennen. Dadurch schalten deine Eingänge wild hin und her.

Und entsprechend deiner obigen Schaltung schalten die Taster gegen GND und der Widerstand ist gegen Plus. Somit stimmt deine obige Aussage nicht.

Wenn du uns dann nochmal ein richtiges Schaltbild lieferst, können wir sicher auch erklären was bei dir falsch läuft.

playborn:
Ich habe keine Ahnung was ein pullup ist.

habe die buttons jetzt über einen großen widerstand auf gnd gelegt

Hoffentlich die Seite, die an den Arduino-Signal-Pin geht :wink:
Dann weisst du jetzt immerhin, was ein pulldown ist.

Und ohne hat so ein Arduino Pin nicht nur "eine gewisse Kapazität", sondern kann bei ungünstig gelegtem Draht zwischen offenem Taster und Arduino Pin auch als Antenne wirken, und spontan mal auf HIGH gehen.
( Dein "Rauschen" ?)

https://www.arduino.cc/en/Tutorial/Button braucht daher neben dem Taster einen Widerstand und 3 Drähte :wink:

Ein pullup hat den Vorteil, dass derWiderstand schon eingebaut ist, und der Taster nur eine GND Verbindung herstellen muss. 1 Bauteil und 2 Kontaktproblem-Fehlerquellen weniger

HotSystems:
Und entsprechend deiner obigen Schaltung schalten die Taster gegen GND und der Widerstand ist gegen Plus. Somit stimmt deine obige Aussage nicht.

Wenn du uns dann nochmal ein richtiges Schaltbild lieferst, können wir sicher auch erklären was bei dir falsch läuft.

Einspruch.
Da ist bei den Tastern weit und breit keine Masse. Alle Taster und Eingänge sind paralellgeschaltet und über einen Widerstand auf 3,3V gelegt.
Außerdem Fehlen die Vorwiderstände an den LED.

Letzte Woche habe ich mir das Arduino UNO R3 starterpaket geholt um etwas zu spielen.

@playborn
Dann spiel nicht nur etwas damit rum sondern arbeite die Beispiele durch und versuch sie zu verstehen. Dann kannst Du durch das erlernte Wissen auch Dein Projekt realisieren.

Grüße Uwe

uwefed:
Da ist bei den Tastern weit und breit keine Masse. Alle Taster und Eingänge sind paralellgeschaltet und über einen Widerstand auf 3,3V gelegt.
Außerdem Fehlen die Vorwiderstände an den LED.

Umso schlimmer, deswegen brauchen wir ja auch dringend ein richtiges und übersichtliches Schaltbild.