Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ////////////////////////////////////////////////////////////////////
- // Zeiten speicherung: (nicht relevant)
- // nts = Zeit von Licht Nr. 1 (String)
- // stet = Zeit vom Ton Nr. 1 (String)
- // stz3 = Zeit vom Ton Nr. 2 (String)
- // stz4 = Zeit vom Licht Nr. 2 (String)
- // stz8 = Zeit vom Licht Nr. 3 (String)
- // stz9 = Zeit vom Ton Nr. 3 (String)
- // Pins:
- // 3 == Rot
- // 4 = Blau
- // 5 = Grün
- ////////////////////////////////////////////////////////////////////
- // name: Reaktionstest_Tag1
- // authors: [Robin, Abanoub]
- // version: 3.0
- // description: 'Dieses Programm ermittelt die Reaktionszeit (in mehreren Versuchen), die benötigt wird um einen Taster nach einem Licht oder Ton Signal zu drücken.'
- #include <Wire.h> /* Einbinden der */
- #include <LiquidCrystal_I2C.h> /* Bibliotheken für das */
- LiquidCrystal_I2C Display(0x27,16,2); /* monochrome LCD-Display */
- // Deklarieren der Variablen (Namensgebung der Variablen bitte nicht beachten)
- int taster_neu_neu_neu = 6; // Dies ist der Taster, mit dem die Farbe der LED ausgewählt werden kann
- int taster = 13; // Dies ist der Taster, der für den Reaktionstest gebraucht wird
- int led = 5; // Der Pin, an den die grüne LED angeschlossen ist
- int ton = 12; // Der Pin, der zum Gate des Transistors führt
- ////////////////////////////////////////////////////////////////////
- // Methoden für das Display erstellen um Befehle zu vereinfachen
- void cc() {
- Display.clear(); // Mit 'cc();' kann man nun das Display leeren
- }
- void sc() {
- Display.setCursor(0,0); // Mit 'sc();' setzt man den Cursor wieder auf 0,0
- }
- void bl() {
- Display.backlight(); // Mit 'bl();' kann man die Hintergrundbeleuchtung des Displays aktivieren
- }
- void nb() {
- Display.noBacklight(); // Mit 'nb();' schaltet man die Hintergrundbeleuchtung des Displays aus
- }
- void resetDisplay() { // Mit der Methode 'resetDisplay()' werden (die oben beschriebenen) Methoden auf einmal ausgeführt
- cc(); // #Clear
- sc(); // #Cursor
- bl(); // #Backlight
- }
- ////////////////////////////////////////////////////////////////////
- // Methode für den Tasterstatus
- void ts() {
- int neue_eingabe20 = digitalRead(taster);
- }
- ////////////////////////////////////////////////////////////////////
- void setup() { // Die Methode 'setup' wird nur einmal (beim Starten des Programms) ausgeführt
- Serial.begin(9600); // Setzt die Baudrate auf 9600 (für die Konsole / den seriellen Monitor)
- pinMode(led, OUTPUT); // PinMode der oben deklarierten Variable (5) auf Output setzten (da eine LED angeschlossen ist)
- pinMode(3, OUTPUT); // PinMode (3) auf Output setzten (da eine LED angeschlossen ist)
- pinMode(4, OUTPUT); // PinMode (4) auf Output setzten (da eine LED angeschlossen ist)
- digitalWrite(led, HIGH); // Zum Testen und sichergehen, dass die LED funktioniert wird (die Grüne) während dem Laden angeschaltet
- //////////////////////////////////
- // Die anderen zwei Pins werden am Anfang auf Low gesetzt
- digitalWrite(3, LOW);
- digitalWrite(4, LOW);
- //////////////////////////////////
- Display.init(); // Initialisieren des Displays (dies muss einmal in der Setup Methode geschehen, damit man das Display verwenden kann
- pinMode(13, INPUT_PULLUP); // PinMode (13) auf Input_Pullup setzten (da ein Taster angeschlossen ist)
- pinMode(6, INPUT_PULLUP); // PinMode (6) auf Input_Pullup setzten (da ein Taster angeschlossen ist)
- pinMode(10, INPUT_PULLUP); // PinMode (10) auf Input_Pullup setzten (da ein Taster angeschlossen ist)
- pinMode(9, INPUT_PULLUP); // PinMode (9) auf Input_Pullup setzten (da ein Taster angeschlossen ist)
- Display.clear(); // Das Display wird einmal am Anfang geleert
- Display.backlight(); // Die Hintergrundbeleuchtung des Displays wird angeschalten
- int z = 400; // Diese Variable bestimmt die Zeit zwischen den 'Loading' Nachrichten (siehe unten)
- Display.setCursor(0,0); // Der Cursor des Displays wird auf 0,0 gesetzt
- ////////////////////////////////////////////////////////////////////
- /* Loading 'Animation' wird auf dem LCD Display gezeigt */
- Display.print("Loading (T1)"); // #Text
- delay(z); // #Delay
- Display.clear(); // #Clear
- Display.setCursor(0,0); // #Cursor
- Display.print("Loading. (T1)"); // #Text
- delay(z); // #Delay
- Display.clear(); // #Clear
- Display.setCursor(0,0); // #Cursor
- Display.print("Loading.. (T1)");
- delay(z);
- Display.clear();
- Display.setCursor(0,0);
- Display.print("Loading... (T1)");
- delay(z);
- Display.clear();
- Display.setCursor(0,0);
- Display.print("Loading");
- delay(z);
- Display.clear();
- Display.setCursor(0,0);
- Display.print("Loading. (T1)");
- delay(z);
- Display.clear();
- Display.setCursor(0,0);
- Display.print("Loading.. (T1)");
- delay(z);
- Display.clear();
- Display.setCursor(0,0);
- Display.print("Loading... (T1)");
- delay(z);
- Display.clear();
- Display.setCursor(0,0);
- Display.print("Loading (T1)");
- delay(z);
- Display.clear();
- Display.setCursor(0,0);
- Display.print("Loading. (T1)");
- delay(z);
- Display.clear();
- Display.setCursor(0,0);
- Display.print("Loading.. (T1)");
- delay(z);
- Display.clear();
- Display.setCursor(0,0);
- Display.print("Loading... (T1)");
- delay(z);
- Display.clear();
- ////////////////////////////////////////////////////////////////////
- sc(); // Hier wird der Cursor des Displays wieder auf 0,0 gesetzt
- bl(); // Hier wird nochmal (zur Sicherheit) die Hintergrundbeleuchtung des Displays aktiviert
- digitalWrite(led, LOW); // Die LED (die zum Testen) angeschaltet wurde, wird hier wieder ausgeschaltet
- Display.print("Willkommen zum"); // Der Text wird auf dem Display angezeigt (kurz '#Text')
- Display.setCursor(0,1); // Der Cursor wird in die zweite Zeile gesetzt (Cursor setzten kurz '#Cursor')
- Display.print("Reaktionstest."); // #Text
- delay(3000); // Delay von drei Sekunden
- cc(); // Display leeren (kurz '#Clear')
- sc(); // Cursor auf 0,0 setzten
- // Drei booleans erstellen (später für die Farbwahl wichtig) (alle werden auf 'falsch' (false) gesetzt)
- boolean gruen = false;
- boolean rot = false;
- boolean blau = false;
- boolean taster_status = false;
- Display.print("Bitte"); // #Text
- Display.setCursor(0,1); // #Cursor
- Display.print("Farbe waehlen."); // #Text
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- int ss1 = digitalRead(10); // #Taster
- int ss2 = digitalRead(9); // #Taster
- int ss3 = digitalRead(taster_neu_neu_neu); // #Taster
- while(ss1 == 1 && ss2 == 1 && ss3 == 1) { // Solange kein Taster gedrückt ist, bleibt das Programm in der while-Schleife
- delay(1);
- // Debug Tasterstatus (nicht relevant)
- // Serial.println("Nicht gedrückt");
- ss1 = digitalRead(10); // #Taster
- ss2 = digitalRead(9); // #Taster
- ss3 = digitalRead(taster_neu_neu_neu); // #Taster
- }
- // Hier wird dann abgefragt, welcher der Taster gedrückt wurde und der Integer 'led' wird auf den entsprechenden Wert (Pin) gesetzt
- if(digitalRead(10) == 0) {
- rot = true; // Setzten des booleans für die Farbe
- led=3; // 'led' wird auf 3 gesetzt, da Pin 3 an das Beinchen der RGB LED für die Farbe Rot angeschlossen ist
- cc(); // #Clear
- sc(); // #Cursor
- Display.println("Rot"); // #Text
- } else if(digitalRead(9) == 0) {
- blau = true; // Setzten des booleans für die Farbe
- led=4; // 'led' wird auf 4 gesetzt, da Pin 4 an das Beinchen der RGB LED für die Farbe Blau angeschlossen ist
- cc(); // #Clear
- sc(); // #Cursor
- Display.println("Blau"); // #Text
- } else {
- gruen = true; // Setzten des booleans für die Farbe
- led=5; // 'led' wird auf 5 gesetzt, da Pin 5 an das Beinchen der RGB LED für die Farbe Grün angeschlossen ist
- cc(); // #Clear
- sc(); // #Cursor
- Display.println("Gruen"); // #Text
- }
- delay(3000); // #Delay
- ////////////////////////////////////////////////////////////////////
- cc(); // #Clear
- sc(); // #Cursor
- Display.print("Bereit?"); // #Text
- Display.setCursor(0,1); // #Cursor
- Display.print("[Knopf druecken]"); // #Text
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- void loop() { // Die Methode 'loop' ist sozusagen eine unendlich Schleife
- // Solange der Taster nicht gedrückt wird, wartet das Programm eine Millisekunde (kurz '#Taster')
- // Wenn er dann gedrückt wird, springt das Programm sofort aus der while-Schleife heraus
- int eingabe= digitalRead(taster); // Auslesen des Tasterstaus
- while(eingabe == 1) {
- delay(1); // #Delay
- eingabe = digitalRead(taster); // Aktualisieren des Tasterstatus
- }
- cc(); // #Clear
- sc(); // #Cursor
- Display.print("Achtung es geht"); // #Text
- Display.setCursor(0,1); // #Cursor
- Display.print("gleich los!"); // #Text
- delay(3000); // #Delay
- cc(); // #Clear
- sc(); // #Cursor
- Display.print("START!"); // #Text
- ///////////////////////////////////////////////////////////////////////////////////////
- //// Zufallszahl + Delay //// (kurz '#Random')
- // Generieren einer zufälligen Zahl
- randomSeed(analogRead(A1));
- float rz = 0;
- // Zwischen 5000 und 10.000
- rz = random(5000, 10001);
- delay(rz); // Wartet zwischen 5000 und 10.000 Millisekunden (Zufallszahl)
- // Debug random Zahl (nicht relevant)
- // Serial.println(rz);
- digitalWrite(led, HIGH);
- float st1 = millis();
- // #Taster
- int ein2 = digitalRead(taster);
- while(ein2 == 1) {
- delay(1);
- ein2 = digitalRead(taster);
- }
- digitalWrite(led, LOW);
- float ts2 = millis();
- float nt1 = ts2 - st1;
- cc(); // #Clear
- sc(); // #Cursor
- String nts;
- nts = String(nt1);
- Display.print("Zeit wurde"); // #Text
- Display.setCursor(0,1); // #Cursor
- Display.print("gespeichert!"); // #Text
- delay(3000); // #Delay
- // Nach diesem Prinzip funktioniert jedes Signal (entweder mit einem Licht- oder Tonsignal)
- // Deshalb sind die weiteren Abläufe auch nicht ausführlich kommentiert; relevant wird es dann wieder ab Zeile 448
- ///////////////////////////////////////////////////////////////////////////////////////
- // nts ist nun die erste Zeit vom Licht (nicht relevant)
- cc(); // #Clear
- sc(); // #Cursor
- Display.print("START!"); // #Text
- //// #Random ////
- randomSeed(analogRead(A1));
- float rz2 = 0;
- rz2 = random(5000, 10001);
- delay(rz2);
- tone(ton, 393); // Abspielen eines Tons mit einer Frenquenz von 393 Hz (kurz '#Ton')
- float stt1 = millis();
- int ein3 = digitalRead(taster);
- while(ein3 == 1) {
- delay(1);
- ein3 = digitalRead(taster);
- }
- noTone(ton); // Stoppen des Tons
- float stt2 = millis();
- float ntt2 = stt2 - stt1;
- cc();
- bl();
- sc();
- String stet;
- stet = String(ntt2);
- Display.print("Zeit wurde"); // #Text
- Display.setCursor(0,1); // #Cursor
- Display.print("gespeichert!"); // #Text
- delay(3000); // #Delay
- // stet ist nun die erste Zeit vom Ton (nicht relevant)
- cc();
- sc();
- Display.print("START!");
- randomSeed(analogRead(A1));
- float rz3 = 0;
- rz3 = random(5000, 10001);
- delay(rz3);
- tone(ton, 393); // #Ton
- float start3 = millis();
- int ein4 = digitalRead(taster);
- while(ein4 == 1) {
- delay(1);
- ein4 = digitalRead(taster);
- }
- noTone(ton);
- float stop3 = millis();
- float zeit3 = stop3 - start3;
- cc();
- bl();
- sc();
- String stz3;
- stz3 = String(zeit3);
- Display.print("Zeit wurde");
- Display.setCursor(0,1);
- Display.print("gespeichert!");
- delay(3000);
- // stz3 ist nun die erste Zeit vom Ton (nicht relevant)
- cc();
- sc();
- Display.print("START!");
- randomSeed(analogRead(A1));
- float rz4 = 0;
- rz4 = random(5000, 10001);
- delay(rz4);
- digitalWrite(led, HIGH);
- float start4 = millis();
- int ein5 = digitalRead(taster);
- while(ein5 == 1) {
- delay(1);
- ein5 = digitalRead(taster);
- }
- digitalWrite(led, LOW);
- float stop4 = millis();
- float zeit6 = stop4 - start4;
- cc();
- bl();
- sc();
- String stz4;
- stz4 = String(zeit6);
- Display.print("Zeit wurde");
- Display.setCursor(0,1);
- Display.print("gespeichert!");
- delay(3000);
- // stz4 ist nun die erste Zeit vom Licht (nicht relevant)
- cc();
- sc();
- Display.print("START!");
- randomSeed(analogRead(A1));
- float rz8 = 0;
- rz8 = random(5000, 10001);
- delay(rz8);
- digitalWrite(led, HIGH);
- float start8 = millis();
- int ein8 = digitalRead(taster);
- while(ein8 == 1) {
- delay(1);
- ein8 = digitalRead(taster);
- }
- digitalWrite(led, LOW);
- float stop8 = millis();
- float zeit8 = stop8 - start8;
- cc();
- bl();
- sc();
- String stz8;
- stz8 = String(zeit8);
- Display.print("Zeit wurde");
- Display.setCursor(0,1);
- Display.print("gespeichert!");
- delay(3000);
- // stz8 ist nun die erste Zeit vom Licht (nicht relevant)
- cc();
- sc();
- Display.print("START!");
- randomSeed(analogRead(A1));
- float rz9 = 0;
- rz9 = random(5000, 10001);
- delay(rz9);
- tone(ton, 393); // #Ton
- float start9 = millis();
- int ein9 = digitalRead(taster);
- while(ein9 == 1) {
- delay(1);
- ein9 = digitalRead(taster);
- }
- noTone(ton);
- float stop9 = millis();
- float zeit9 = stop9 - start9;
- cc();
- bl();
- sc();
- String stz9;
- stz9 = String(zeit9);
- Display.print("Zeit wurde");
- Display.setCursor(0,1);
- Display.print("gespeichert!");
- delay(3000);
- // stz3 ist nun die erste Zeit vom Ton (nicht relevant)
- cc();
- sc();
- Display.print("Geschafft!");
- int ein112 = digitalRead(taster);
- while(ein112 == 1) {
- delay(1);
- ein112 = digitalRead(taster);
- }
- // --> nicht relevant
- // nts = Zeit von Licht Nr. 1 (String)
- // stet = Zeit vom Ton Nr. 1 (String)
- // stz3 = Zeit vom Ton Nr. 2 (String)
- // stz4 = Zeit vom Licht Nr. 2 (String)
- // stz8 = Zeit vom Licht Nr. 3 (String)
- // stz9 = Zeit vom Ton Nr. 3 (String)
- ///////////////////////////////////////////////////////////////////////////////////////
- // Neue Variablen deklarieren und die Werte der alten übergeben (damit es übersichtlicher ist)
- String licht1 = nts;
- String ton1 = stet;
- String ton2 = stz3;
- String licht2 = stz4;
- String licht3 = stz8;
- String ton3 = stz9;
- ///////////////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////
- // Ausgeben der Reaktionszeiten //
- cc(); // #Clear
- sc(); // #Cursor
- Display.print("Zeit Licht1:"); // #Text
- Display.setCursor(0,1); // #Cursor
- Display.print(licht1); // #Text (Zeit ausschreiben)
- delay(4000); // #Delay
- cc();
- sc();
- Display.print("Zeit Ton1:");
- Display.setCursor(0,1);
- Display.print(ton1);
- delay(4000);
- cc();
- sc();
- Display.print("Zeit Ton2:");
- Display.setCursor(0,1);
- Display.print(ton2);
- delay(4000);
- cc();
- sc();
- Display.print("Zeit Licht2:");
- Display.setCursor(0,1);
- Display.print(licht2);
- delay(4000);
- cc();
- sc();
- Display.print("Zeit Licht3:");
- Display.setCursor(0,1);
- Display.print(licht3);
- delay(4000);
- cc();
- sc();
- Display.print("Zeit Ton3:");
- Display.setCursor(0,1);
- Display.print(ton3);
- delay(4000);
- //////////////////////////////////
- // Durchschnitt berechnen und ausgeben //
- // Strings (Licht) werden in Integer umgewandelt (sonst kann man damit ja nicht rechnen)
- int l1int = licht1.toInt();
- int l2int = licht2.toInt();
- int l3int = licht3.toInt();
- // Durchschnitt berechnen (Licht)
- int durchschnitt_licht = l1int + l2int + l3int;
- double dfl = durchschnitt_licht / 3;
- cc(); // #Clear
- sc(); // #Cursor
- Display.print("Durchschn. Licht"); // #Text
- Display.setCursor(0,1); // #Cursor
- Display.print(dfl); // Ausgeben des Durchschnittes für die Reaktionen (Licht)
- delay(4000);
- // Strings (Ton) werden in Integer umgewandelt (sonst kann man damit ja nicht rechnen)
- int t1int = ton1.toInt();
- int t2int = ton2.toInt();
- int t3int = ton3.toInt();
- // Durchschnitt berechnen (Ton)
- int durchschnitt_ton = t1int + t2int + t3int;
- double dft = durchschnitt_ton / 3;
- cc(); // #Clear
- sc(); // #Cursor
- Display.print("Durchschn. Ton"); // #Text
- Display.setCursor(0,1); // #Cursor
- Display.print(dft); // Ausgeben des Durchschnittes für die Reaktionen (Licht)
- delay(4000); // #Delay
- cc(); // #Clear
- sc(); // #Cursor
- Display.print("Fertig!"); // #Text
- ////////////////////////////////////////////////////////////////
- // An Frau Baur: //
- /* Liebe Frau Baur,
- *
- * bitte achten sie nicht auf die Namensgebung der Variablen ;)
- *
- * Das Programm für Tag 2 funktioniert nach genau dem selben
- * Prinzip, deshalb habe ich dies nicht kommentiert.
- * Ich hoffe das ist in Ordnung für Sie.
- *
- * Beste Grüße,
- * Robin und Abanoub
- *
- * PS: Bei Fragen einfach eine E-Mail an 'r.hettmer0205@gmail.com' schreiben.
- *
- */
- ////////////////////////////////////////////////////////////////
- //
- //
- // <!-- ENDE --!>
- //
- //
- ////////////////////////////////////////////////////////////////
- // --> nicht relevant
- // Unendliche for-Schleife (damit es nicht wieder im 'loop()' startet)
- // Man könnte das Programm natürlich nur im 'setup()' schreiben, aber so kann man das ja auch gut lösen
- for(long n=0; n==1; n=n-1) {
- sehr_langer_delay();
- }
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // --> nicht relevant
- void langerDelay() {
- delay(100000);
- delay(100000);
- delay(100000);
- delay(100000);
- delay(100000);
- delay(100000);
- delay(100000);
- delay(100000);
- delay(100000);
- delay(100000);
- delay(100000);
- delay(100000);
- delay(100000);
- delay(100000);
- }
- void sehr_langer_delay() {
- langerDelay();
- langerDelay();
- langerDelay();
- }
- ////////////////////////////////////////////////////////////////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement