/*****************************************************************************test versie: Speedometer tbv Peter*****************************************************************************/// libraries#include <Wire.h> #include "Adafruit_LEDBackpack.h"#include "Adafruit_GFX.h"Adafruit_7segment display = Adafruit_7segment();const int LDRleft = A0; // LDR leftconst int LDRright = A1; // LDR right const int Overflow = 10000;unsigned long curTime = 0;unsigned long preTime = 0;unsigned long runTime = 0;// speedometerbool timerRuns = false;bool fromLeft = false;bool fromRight = false;bool calcReady = false;int valLeft = 0; int valRight = 0; int refLight = 511; // 0 is uit, 1023 is aanfloat distance = 98; // afstand tussen meetpunten in mm.float scaleSpeed = 0; // in schaal km/h.// display schaalsnelheidunsigned long showTime = 5000; // tijd snelheid zichtbaar in msunsigned long showStart = 0;/****************************************************************************/void setup() { // set display display.begin(0x70); display.setBrightness(7); // 0..15 display.writeDisplay(); Serial.begin(9600); Serial.println("Check inputs"); showStart = millis(); display.println(Overflow); // display "----" } // end setup/****************************************************************************/void loop() { speedometer(); displaySpeed(); } // end loop/****************************************************************************/void speedometer() { if (calcReady) return; // als berekening klaar is rest overslaan. valLeft = analogRead(LDRleft); valRight = analogRead(LDRright); if (!timerRuns) { // nog geen meting if (valLeft > refLight || valRight > refLight) { // links of rechts bezet? timerRuns = true; // meting loopt preTime = millis(); runTime = 0; if (valLeft > refLight) fromLeft = true; if (valRight > refLight) fromRight = true; Serial.print("start left = "); Serial.println(valLeft); Serial.print("start right = "); Serial.println(valRight); } } else { // als de meting loopt... curTime = millis(); runTime = curTime - preTime; if (fromLeft && (valRight > refLight) || fromRight && (valLeft > refLight)) { // meting ten einde // bereken schaal snelheid scaleSpeed = ((distance * 3600) / runTime / 1000) * 87; calcReady = true; timerRuns = false; fromLeft = false; fromRight = false; showStart = millis(); Serial.print("finish left = "); Serial.println(valLeft); Serial.print("finish right = "); Serial.println(valRight); Serial.print("scale speed = "); Serial.println(scaleSpeed, 1); } }}/****************************************************************************/void displaySpeed() { unsigned long timeNow = millis(); if (timerRuns) { // als snelheidsmeting gaande is... if ((runTime / 100) % 2) { // knipperen display display.println(Overflow); // display "----" } else display.clear(); // display " " } else { if (calcReady) { // als snelheidsmeting klaar is... if ((timeNow - showTime) < showStart) { display.print(scaleSpeed, 1); // display gemeten snelheid in km/h } else { calcReady = false; showStart = timeNow; display.println(Overflow); // display "----" } } } display.writeDisplay();}/****************************************************************************/