Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /********************************************************
- * Autor: Martin Maskaľ
- * Názov programu: Merač reakčného času
- * Dátum: 15.11.2018
- * Verzia: 2.4
- *--------------------------------------------------------
- * Popis programu: Program na meranie reakčného času
- *********************************************************/
- /**************************************
- * Konštanty
- **************************************/
- #define btnSTART 2 //pin pre tlacidlo Start
- #define btnHIT 3 //pin pre hracie tlacidlo
- #define ledTrigger 4 //pin pre LEDku
- /**************************************
- * Premenne
- **************************************/
- // Inicializacia premennych do ktorych sa uklada cas reakcie a celkovy cas reakcii
- float timeReaction; // reakcny cas jedneho pokusu
- float timeTotal = 0; // celkovy rekacny cas vsetkych pokusov
- /**************************************
- * Podprogramy
- **************************************/
- void Round()
- {
- // Zacatie testovacieho kola
- for (int i = 0; i < 5; i++)
- {
- delay(random(700, 5000)); // pocka vygenerovany nahodny cas od 0,7 do 5 sekund
- timeReaction = millis(); // do premennej timeReaction sa ulozi cas millis()
- digitalWrite(ledTrigger, LOW); // zapne sa LEDka
- // Pocka kym sa nestlaci hracie tlacidlo
- while (digitalRead(btnHIT)) {}
- timeReaction = millis() - timeReaction; // od millis sa odpocita timeReaction cim sa vypocita cas reakcie
- timeTotal += timeReaction; // k celkovemu casu sa pripocita reakcny cas jedneho pokusu
- delay(10);
- while (!digitalRead(btnHIT)) {} // pocka kym sa neuvolni hracie tlacidlo
- digitalWrite(ledTrigger, HIGH); // LEDka zhasne
- Serial.print(i + 1); // "i" ide od nuly ale pokusy zacinaju od 1
- Serial.print(": ");
- Serial.print(timeReaction);
- Serial.println(" msec");
- delay(1000);
- }
- }
- void ReadyForStartRound()
- {
- // zapnutie LEDky
- digitalWrite(ledTrigger, LOW);
- timeTotal = 0; // vynulovanie celkoveho casu na zaciatku programu
- Serial.println("Press START button when you're ready");
- // Cakanie na stlacenie tlacidla Start
- while (digitalRead(btnSTART)) {}
- // Vypnutie LEDky
- digitalWrite(ledTrigger, HIGH);
- // Cakanie kym sa uvolni tlacidlo Start
- delay(10);
- while (!digitalRead(btnSTART)) {}
- Serial.println();
- Serial.println("Prepare yourself");
- Serial.println();
- delay(3000); // pocka 3 sekundy
- Serial.println("GO!");
- delay(1000); // pocka sekundu
- }
- void EndOfRound()
- {
- Serial.println();
- Serial.print("Avg = ");
- Serial.print(timeTotal / 5); // vypocitanie priemeru reakcnych casov
- Serial.println(" msec");
- Serial.println();
- }
- /**************************************
- * Hlavný program
- **************************************/
- void setup() {
- // inicializacia tlacidiel a LEDky
- pinMode(btnSTART, INPUT_PULLUP);
- pinMode(btnHIT, INPUT_PULLUP);
- pinMode(ledTrigger, OUTPUT);
- // Zasvietenie LEDky
- digitalWrite(ledTrigger, LOW);
- // inicialiazacia Serioveho monitora
- Serial.begin(9600);
- Serial.println("Arduino Reaction Timer");
- Serial.println();
- // Generator nahodnych cisiel
- randomSeed(analogRead(0));
- }
- void loop()
- {
- ReadyForStartRound();
- Round();
- EndOfRound();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement