/***************************************************************************************************************** * Juergen Walter * 17.07.2017 * * * ESP32_OLED_Zeit_2_3Runden * 1 Fliegende Runde 2 gemessene Runden Anzeige in Serieller Schnittstelle * * WAS Zeitmessung: Mit einer fliegenden Runde und Messung von zwei Runden = RESULTAT * Gestartet Messung Nr: ##### * Zeit: #####.###s * * * Aufbau: * Messung mit Schalter oder Boot-Schalter auf ESP32 * Anzeige: Arduino serieller Port oder anderes Programm z.B. Putty. * Mit Putty kann eine Anzeige mit großer Schrift auf dem PC - Monitor erzeugt werden. * * Anzeige auf OLED-Display * ******************************************************************************************************************/ #include // I2C #include // OLED #include // Graphic #define OLED_RESET 4 // not used nicht genutzt bei diesem Display #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 //Adafruit_SSD1306 display(OLED_RESET); Treiber vor Version1.2 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); /*******************************************************************************************************************/ void setup() { Serial.begin(115200); // Initilize hardware serial: // initialize with the I2C addr 0x3C // mit I2C-Adresse 0x3c initialisieren display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.display(); delay(2000); display.clearDisplay(); display.setTextSize(2); display.setTextColor(INVERSE); } //Variable unsigned MessungNr=1; /*******************************************************************************************************************/ void loop() { unsigned long Zeit=0; unsigned long Start=0; unsigned long Ende=0; float s=0; unsigned RundenZahl=1; unsigned long RundenZeit[3]={0}; //Zeit der jeweiligen Runde float RundenZeitf1=0; float RundenZeitf2=0; float RundenZeitf3=0; float RESULTAT=0; Serial.println(); Serial.println("Start-frei "); // M-Nr: ### send to display // Messung Nr. und Freigabe auf OLED-Anzeige senden display.clearDisplay(); display.setCursor(0,0); display.print("M-Nr:"); display.print(MessungNr); display.setCursor(0,32); display.print("Start-frei"); display.display(); /******************************************************************************************************************* * Warten auf Messung Start *******************************************************************************************************************/ while (digitalRead(0) == HIGH) { yield(); //warten } Start = millis(); Serial.print("Gestartet Messung: "); Serial.print(MessungNr); Serial.print("; "); // M-Nr: ### send to display // Messung Nr. und Freigabe auf OLED-Anzeige senden display.clearDisplay(); display.setCursor(0,0); display.print("M-Nr:"); display.print(MessungNr); display.setCursor(0,32); display.print("laeuft"); display.setCursor(104,32); display.print("R1"); display.display(); // Das zweite Rad nicht zaehlen delay(2000); /******************************************************************************************************************* * Runde 1 Round 1 *******************************************************************************************************************/ while (digitalRead(0) == HIGH) { // Result send to display // Messung Nr. und Zeit auf Display senden display.clearDisplay(); display.setCursor(0,0); display.print("M-Nr:"); display.print(MessungNr); display.setCursor(0,16); display.print(s,2); display.print("s"); display.setCursor(0,32); display.print("laeuft"); display.setCursor(116,32); display.print("1"); display.display(); Ende = millis(); Zeit = (Ende - Start); s=Zeit; RundenZeit[0]=Zeit; s=s/1000; RundenZeitf1=s; } // Zeit Runde 1 anzeigen // Result send to display // Messung Nr., Zeit und Rundenergebnis 1 auf Display senden display.clearDisplay(); display.setCursor(0,0); display.print("M-Nr:"); display.print(MessungNr); display.setCursor(0,16); display.print(s,2); display.print("s"); display.setCursor(0,32); display.print(RundenZeitf1,3); display.print("s"); display.setCursor(116,32); display.print("1"); display.setCursor(0,48); display.print("laeuft"); display.setCursor(104,48); display.print("R2"); display.display(); // Das zweite Rad nicht zaehlen delay(2000); /******************************************************************************************************************* * Runde 2 Round 2 *******************************************************************************************************************/ while (digitalRead(0) == HIGH) { // Result send to display // Messung Nr., Runde Nr. und Zeit auf Anzeige senden display.clearDisplay(); display.setCursor(0,0); display.print("M-Nr:"); display.print(MessungNr); display.setCursor(0,16); display.print(s,2); display.print("s"); display.setCursor(0,32); display.print(RundenZeitf1,3); display.print("s"); display.setCursor(116,32); display.print("1"); display.setCursor(0,48); display.print("laeuft"); display.setCursor(104,48); display.print("R2"); display.display(); Ende = millis(); Zeit = (Ende - Start); s=Zeit; s=s/1000; } // Ergebnis Runde 2 anzeigen // Result send to display // Messung Nr., Zeit und Rundenergebnis 2 auf Display senden RundenZeit[1]=(Zeit-RundenZeit[0]); RundenZeitf2=(RundenZeit[1]); RundenZeitf2=RundenZeitf2/1000; display.clearDisplay(); display.setCursor(0,0); display.print("M-Nr:"); display.print(MessungNr); display.setCursor(0,16); display.print(s,2); display.print("s"); display.setCursor(0,32); display.print(RundenZeitf2,3); display.print("s"); display.setCursor(116,32); display.print("2"); display.setCursor(0,48); display.print("laeuft"); display.setCursor(104,48); display.print("R3"); display.display(); // Das zweite Rad nicht zaehlen delay(2000); /******************************************************************************************************************* * Runde 3 Round 3 *******************************************************************************************************************/ while (digitalRead(0) == HIGH) { // Result send to display // Messung Nr. ,Runde Nr. und Zeit auf Anzeige senden display.clearDisplay(); display.setCursor(0,0); display.print("M-Nr:"); display.print(MessungNr); display.setCursor(0,16); display.print(s,2); display.print("s"); display.setCursor(0,32); display.print(RundenZeitf2,3); display.print("s"); display.setCursor(116,32); display.print("2"); display.setCursor(0,48); display.print("laeuft"); display.setCursor(104,48); display.print("R3"); display.display(); Ende = millis(); Zeit = (Ende - Start); s=Zeit; s=s/1000; RundenZeit[2]=Zeit-(RundenZeit[0]+RundenZeit[1]); } // Ergebnis aus Runde 2 und 3 RESULTAT=RundenZeit[1]+RundenZeit[2]; //Umrechnung fuer Anzeige s=RESULTAT; s=s/1000; Serial.print(s,3); Serial.println("s"); Serial.println(); RundenZeitf3=RundenZeit[2]; RundenZeitf3=RundenZeitf3/1000; display.clearDisplay(); display.setCursor(0,0); display.print("E-Nr:"); display.print(MessungNr); display.setCursor(0,16); display.print(s,3); display.print("s"); display.setCursor(0,32); display.print(RundenZeitf2,3); display.print("s"); display.setCursor(116,32); display.print("2"); display.setCursor(0,48); display.print(RundenZeitf3,3); display.print("s"); display.setCursor(116,48); display.print("3"); display.display(); //2s warten bis zur Bestaetigung der Uebernahme delay(2000); // Bestaetigung der Uebernahme while (digitalRead(0) == HIGH) { } display.clearDisplay(); display.setCursor(0,0); display.print("M-Nr:"); MessungNr++; display.print(MessungNr); display.setCursor(0,32); display.print("Warten"); display.display(); delay(2000); }