Habe es nochmal leicht geändert, jedoch Zählt das Display jetzt direkt von 99 runter auf 0 und die BlitzLed ist dauerhaft an, die Sensoren L+R machen gar nichts mehr.
Hier der ganze Sketch:
#include <SevSeg.h>
SevSeg sevseg; //Ein sieben Segment Objekt initialisieren
// Digital sensor input Left and Right
const byte SENSOR_L = 4;
const byte SENSOR_R = 5;
const byte blitzLed = A1;
//Distance from sensor Left to sensor Right - your distance (mm)
const double distance = 150.0;
//Your model scale 1/xx
const unsigned int scale = 87;
//Waiting time for train, to move out of measurement array (ms)
const unsigned int waitingtime = 12000;
//Name of variables for time and speed measuring
unsigned long int deltatime, starttime;
void setup()
{
byte numDigits = 2; //Hier wird die Anzahl der Ziffern angegeben
byte digitPins[] = {2, 3}; //Die Pins zu den Ziffern werden festgelegt
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12}; //Die Pins zu den //Segmenten werden festgelegt
sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins);
//Sensor Input
pinMode(SENSOR_L, INPUT_PULLUP);
pinMode(SENSOR_R, INPUT_PULLUP);
pinMode(A1,OUTPUT);
//Interface baud rate
Serial.begin(9600);
}
void loop() {
if (digitalRead(SENSOR_R)== LOW);{
starttime = millis();
starttime = true;
}
//waiting for signal sensor Left
if (starttime = true && digitalRead(SENSOR_L)== HIGH);{
deltatime = (millis() - starttime);
sevseg.setNumber(scale*distance/deltatime*3.6, 0);
deltatime = true;
}
sevseg.refreshDisplay();
sevseg.setBrightness(90);
{
if (scale*distance/deltatime*3.6<50){
digitalWrite(blitzLed, HIGH);
delay(29);
digitalWrite(blitzLed, LOW);
}
else {
digitalWrite(blitzLed,LOW);
}
}
} //End of loop
Der Ablauf sollte ja eigentlich wie folgt sein:
Sensor R wartet auf Signal
if (digitalRead(SENSOR_R)== LOW);{
Dann wird die Startzeit angestoßen.
starttime = millis();
Anschließend wartet Sensor L auf das Signal
if (starttime = true && digitalRead(SENSOR_L)== HIGH);{
Danach wird die deltazeit genommen .
deltatime = (millis() - starttime);
Diese wird dann berechnetet:
sevseg.setNumber(scaledistance/deltatime3.6, 0);
und auf dem Display ausgegeben.
Diese Rechnung wird dann ergänzt ob der Wert größer 50 ist.
if (scaledistance/deltatime3.6<50){
Wenn ja, dann soll die Blitzled kurz angehen.
digitalWrite(blitzLed, HIGH);
delay(29);
digitalWrite(blitzLed, LOW);
Wenn nein, dann ausbleiben
else {
digitalWrite(blitzLed,LOW);
}