INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Reaktions Test
03.09.2015, 11:23 (Dieser Beitrag wurde zuletzt bearbeitet: 03.09.2015 11:27 von TheArduFreak.)
Beitrag #1
Reaktions Test
Hey Hey,
Ich wollte euch mal ein Projekt von mir Vorstellen.
Es ist nicht grade das Werk eine Profies und super toll aber mal für zwischen durch zum Testen ganz Lustig Wink

Mein Ziel war es herauszufinden wie lange ich brauche zu realisieren das eine Leuchtdiode angefangen hat zu Leuchten, also ein einfacher Reaktionstest.
Dazu sollte auf Knopfdruck ein Timer Anfangen hoch zu zählen. Bei einer zufälligen Sekunden zahl (bsp. 23s) sollte dann die Diode anfangen zu leuchten.
Leuchtet die Diode drückt man den gleichen knopf noch ein mal um den Timer zu stoppen. Dieser soll dann eine Zeit anzeigen (bsp. 23,67).
Jetze kann man erkennen wie schnell man erkannt hat das die leucht Diode leuchtet
und man den Knopf drücken muss.
Falls man wirklich erst 3s danach gemerkt hat das die Diode leuchtet wird die Zahl wo die Diode angefangen hat zu leuchten noch im Seriellen Monitor angezeigt.

Code:
//=================================================================//
//==================================================================//
//============================================-by-TheArduFreak-===//
int aPin = 2;  // ( A )           A
int bPin = 3;  // ( B )        ________
int cPin = 4;  // ( C )       |        |
int dPin = 5;  // ( D )      F|        |B
int ePin = 6;  // ( E )       |   G    |
int fPin = 7;  // ( F )       |________|
int gPin = 8;  // ( G)        |        |
int GND1 = 12; // ( S1 )      |        |
int GND2 = 9;  // ( S2 )     E|        |C
int GND3 = 10; // ( S3 )      |________|
int GND4 = 11; // ( S4 )          D    
int dig1 = 0;
int dig2 = 0;
int dig3 = 0;
int dig4 = 0;
int DTime = 2; // delay - Time   ( 1000delay = 1Sekunde )
int num = 0;
int n;
int i;
int ButtonPin = 13;
int ButtonState = 1;
int lastButtonState = 1;
int StartStop = 0;

int randNumber;
int LEDPin = A1;

//=================================================================//
//=========================== Void Setup ==========================//
//=================================================================//
void setup() {
  
   pinMode(LEDPin, OUTPUT);
   digitalWrite(LEDPin,HIGH);
   randomSeed(analogRead(0));
   randNumber = random(10, 60);  //logt zufällige nummer zwischen
                                 // 10 und 60 fest
   pinMode(aPin, OUTPUT);
   pinMode(bPin, OUTPUT);
   pinMode(cPin, OUTPUT);
   pinMode(dPin, OUTPUT);
   pinMode(ePin, OUTPUT);
   pinMode(fPin, OUTPUT);
   pinMode(gPin, OUTPUT);
   pinMode(GND1, OUTPUT);
   pinMode(GND2, OUTPUT);
   pinMode(GND3, OUTPUT);
   pinMode(GND4, OUTPUT);
   Serial.begin(9600);
  
   Serial.println(randNumber);    //gibt randNumber aus auf S.-Monitor
   randNumber = randNumber*100;
  
   pinMode(ButtonPin, INPUT);
   digitalWrite(ButtonPin, HIGH);   // Aktiviert Arduino Wiedersand
}                                  // für ButtonPin.
//=================================================================//
//========================= Void Loop =============================//
//=================================================================//
void loop() {  

   dig1 = num / 1000;             // Berechnet die Anzeigen
   n = num - (dig1 * 1000);       //Für die 4x7 Segment Anzeige.
   dig2 = n / 100;                //Jeweils einzelnd für die
   n = n - (dig2 * 100);          //bestimmten Segmente.
   dig3 = n / 10;
   dig4 = n - (dig3 *10);
  
   ButtonState = digitalRead(ButtonPin);  
   if ((ButtonState == 0)&&(lastButtonState == 1)) {
       if (StartStop == 1) {
           StartStop = 0; }
       else { StartStop = 1; }}
    
   lastButtonState = ButtonState;  
  
//==================== PickNumberAnzeige ==========================//
  pickNumber(dig4);
  digitalWrite( GND4, HIGH);    //digit 4
  delay(DTime);
  digitalWrite( GND4, LOW);

  pickNumber(dig3);
  digitalWrite( GND3, HIGH);    //digit 3
  delay(DTime);
  digitalWrite( GND3, LOW);

  pickNumber(dig2);
  digitalWrite( GND2, HIGH);   //digit 2
  delay(DTime);
  digitalWrite( GND2, LOW);
  
  pickNumber(dig1);
  digitalWrite( GND1, HIGH);   //digit 1
  delay(DTime);
  digitalWrite( GND1, LOW);  // }

  delay(2);

   if (num==randNumber){digitalWrite(LEDPin,LOW);}  
   if (StartStop == 1){num++ ;}
   if (num==10000){num=0 ;}    //Setz "NUM" falls es die Zahl "10´000"
}                              // auf 0 zurück.
//=================================================================//
//======================== Void PickNumber ========================//
//=================================================================//
void pickNumber(int x){
   switch(x){
     case 1: one(); break;
     case 2: two(); break;
     case 3: three(); break;
     case 4: four(); break;
     case 5: five(); break;
     case 6: six(); break;
     case 7: seven(); break;
     case 8: eight(); break;
     case 9: nine(); break;
     default: zero(); break;
   }
}
//=================================================================//
//======================= LED Einstellung =========================//
//=================================================================//
void clearLEDs() {  
  digitalWrite(  2, LOW);  // A
  digitalWrite(  3, LOW);  // B
  digitalWrite(  4, LOW);  // C
  digitalWrite(  5, LOW);  // D
  digitalWrite(  6, LOW);  // E
  digitalWrite(  7, LOW);  // F
  digitalWrite(  8, LOW); }// G
void one() {
  digitalWrite( aPin, LOW);     digitalWrite( bPin, HIGH);
  digitalWrite( cPin, HIGH);    digitalWrite( dPin, LOW);
  digitalWrite( ePin, LOW);     digitalWrite( fPin, LOW);
  digitalWrite( gPin, LOW); }
void two() {
  digitalWrite( aPin, HIGH);    digitalWrite( bPin, HIGH);
  digitalWrite( cPin, LOW);     digitalWrite( dPin, HIGH);
  digitalWrite( ePin, HIGH);    digitalWrite( fPin, LOW);
  digitalWrite( gPin, HIGH);  }
void three() {
  digitalWrite( aPin, HIGH);    digitalWrite( bPin, HIGH);
  digitalWrite( cPin, HIGH);    digitalWrite( dPin, HIGH);
  digitalWrite( ePin, LOW);     digitalWrite( fPin, LOW);
  digitalWrite( gPin, HIGH); }
void four() {
  digitalWrite( aPin, LOW);     digitalWrite( bPin, HIGH);
  digitalWrite( cPin, HIGH);    digitalWrite( dPin, LOW);
  digitalWrite( ePin, LOW);     digitalWrite( fPin, HIGH);
  digitalWrite( gPin, HIGH); }
void five() {
  digitalWrite( aPin, HIGH);    digitalWrite( bPin, LOW);
  digitalWrite( cPin, HIGH);    digitalWrite( dPin, HIGH);
  digitalWrite( ePin, LOW);     digitalWrite( fPin, HIGH);
  digitalWrite( gPin, HIGH); }
void six() {
  digitalWrite( aPin, HIGH);    digitalWrite( bPin, LOW);
  digitalWrite( cPin, HIGH);    digitalWrite( dPin, HIGH);
  digitalWrite( ePin, HIGH);    digitalWrite( fPin, HIGH);
  digitalWrite( gPin, HIGH); }
void seven() {
  digitalWrite( aPin, HIGH);    digitalWrite( bPin, HIGH);
  digitalWrite( cPin, HIGH);    digitalWrite( dPin, LOW);
  digitalWrite( ePin, LOW);     digitalWrite( fPin, LOW);
  digitalWrite( gPin, LOW); }
void eight() {
  digitalWrite( aPin, HIGH);    digitalWrite( bPin, HIGH);
  digitalWrite( cPin, HIGH);    digitalWrite( dPin, HIGH);
  digitalWrite( ePin, HIGH);    digitalWrite( fPin, HIGH);
  digitalWrite( gPin, HIGH);  }
void nine() {
  digitalWrite( aPin, HIGH);    digitalWrite( bPin, HIGH);
  digitalWrite( cPin, HIGH);    digitalWrite( dPin, HIGH);
  digitalWrite( ePin, LOW);     digitalWrite( fPin, HIGH);
  digitalWrite( gPin, HIGH);  }
void zero() {
  digitalWrite( aPin, HIGH);    digitalWrite( bPin, HIGH);
  digitalWrite( cPin, HIGH);    digitalWrite( dPin, HIGH);
  digitalWrite( ePin, HIGH);    digitalWrite( fPin, HIGH);
  digitalWrite( gPin, LOW);  }
Info: Ich bin etwas Komisch was den Code angeht, mach mir viele Hinweise etc. Hoffe ihr seht dadurch.
       

Es gibt auch ein Viedeo wo ich dies mal vorführe, hab und kenne leider nicht das richtige Format (das hier erlaubt ist) dafür.



Spaß macht es (mir jedenfalls) ab und zu mal kurz gekuckt wie schnell man reagiert und dann sowas wie ein kleines score board noch einführen Big Grin
Ausgereift ist es jedoch noch nicht, es gibt noch ein paar Ideen die ich umsetzen möchte, unteranderem ein einfach "Reset" Button und naja um ehrlich zu sein ist es ein ganz schöner Kabel Salat.
Habt ihr vllt noch Ideen? Tipp´s oder Trick´s für mich?
Bei wunsch halte ich euch auf den Laufenden Wink

Vielen Dank schon mal im vorraus.


P.S.
Ich beschäftige mich wegen meiner Ausbildung mit Arduino und find es toll, mach es aber noch nicht lange (kanpp halbes jahr). Verzeit mir allso wenn was nachfrage oder ähnliches Smile
ach und rechtschreibung ist bei mir leider nicht so gut ... sorry dafür schonmal...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.09.2015, 16:15 (Dieser Beitrag wurde zuletzt bearbeitet: 03.09.2015 16:18 von fraju.)
Beitrag #2
RE: Reaktions Test
Hallo
Für Die Rechtschreibung
http://www.arduinoforum.de/arduino-Threa...diskussion

Du könntest die Segmentausgabe als Byte ausgeben.
Jedes Zeichenmuster der Segmente 0-9 A-F in ein Array packen.
der Index 0-15 des Arrays ist dann deine Ausgabe.
zum Üben

P.S.
Es gibt bestimmt eine LIb für eine multiplexe 4 Stellige 7 Segmentanzeige. ;-)

Nicht jeder Neuling in einem Forum hat keine Ahnung über die Materie!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste