Een nieuwe meting kan pas plaats vinden als het tweede blok ook verlaten is. Denk ik...
(aan de overkant is een begraafplaats...)
Hoewel het in praktijk ook voorkomt dat twee blokken achter elkaar bezet zijn... Wat dan?
Misschien toch handiger om te meten met IR of LDR en over een kortere afstand?
Of wordt dit nu een uitdaging die we toch gaan oplossen?
Maar je gaat toch geen snelheid meten als het volgende blok bezet is...
/*****************************************************************************test versie: Speedometer tbv Peter*****************************************************************************/// libraries#include <Wire.h> #include "Adafruit_LEDBackpack.h"#include "Adafruit_GFX.h"Adafruit_7segment display = Adafruit_7segment();const int section1 = A0; // first sectionconst int section2 = A1; // second section const int Overflow = 10000;unsigned long curTime = 0;unsigned long preTime = 0;unsigned long runTime = 0;// speedometerbool sect1occup = false;bool sect2occup = false;bool timerRuns = false;bool calcReady = false;int valSect1 = 0; int valSect2 = 0; int threshold = 511; // 0 is uit, 1023 is aanfloat distance = 3450; // afstand tussen meetpunten in mm.float scaleSpeed = 0; // in schaal km/h./****************************************************************************/void setup() { // set display display.begin(0x70); display.setBrightness(7); // 0..15 display.writeDisplay(); Serial.begin(9600); Serial.println("Check inputs"); display.println(Overflow); // display "----" } // end setup/****************************************************************************/void loop() { speedometer(); displaySpeed(); } // end loop/****************************************************************************/void speedometer() { valSect1 = analogRead(section1); valSect2 = analogRead(section2); if (valSect1 > threshold) sect1occup = true; else sect1occup = false; if (valSect2 > threshold) sect2occup = true; else sect2occup = false; if (!timerRuns) { // nog geen meting if (sect1occup && !sect2occup) { // meting begint timerRuns = true; preTime = millis(); runTime = 0; Serial.print("sector 1 = "); Serial.println(valSect1); } } else { // als de meting loopt... curTime = millis(); runTime = curTime - preTime; if (sect2occup) { // meting ten einde // bereken schaal snelheid scaleSpeed = ((distance * 3600) / runTime / 1000) * 87; calcReady = true; timerRuns = false; Serial.print("sector 2 = "); Serial.println(valSect2); Serial.print(" speed = "); Serial.println(scaleSpeed, 1); } }}/****************************************************************************/void displaySpeed() { 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... display.print(scaleSpeed, 1); // display gemeten snelheid in km/h if (!sect1occup && !sect2occup) calcReady = false; } else { display.println(Overflow); // display "----" } } display.writeDisplay();}/****************************************************************************/
#define TEST 1#if (TEST == 1) byte varname = 1; //const byte bla = 2;#endif#if (TEST == 2) const byte bla = 2;#endifvoid setup() { // put your setup code here, to run once:}void loop() { // put your main code here, to run repeatedly:}