diff --git a/blitzercontroller/src/main.cpp b/blitzercontroller/src/main.cpp index 3b179ed..ce409ce 100644 --- a/blitzercontroller/src/main.cpp +++ b/blitzercontroller/src/main.cpp @@ -1,28 +1,35 @@ #include - +float flashspeed=20; //in kmh +unsigned long flashdeadtime=1000; //in ms #define PIN_SW1 D6 -#define PIN_SW2 D7 +#define PIN_SW2 D5 +#define PIN_TRIGGER D7 volatile boolean sw1_flag = false; volatile boolean sw2_flag = false; unsigned long sw1_lastTime=0; unsigned long sw2_lastTime=0; -float calib_distance=0.2; //distance of sensors in meters +float calib_distance=0.062; //distance of sensors in meters -#define SWDEBOUNCE 100 +#define SWDEBOUNCE 100000 -void interrupt_sw1(); -void interrupt_sw2(); -float getLastSpeed(); +ICACHE_RAM_ATTR void interrupt_sw1(); +ICACHE_RAM_ATTR void interrupt_sw2(); +float getLastSpeed1(); +float getLastSpeed2(); +void doTrigger1(); +void doTrigger2(); void setup() { pinMode(PIN_SW1, INPUT_PULLUP); pinMode(PIN_SW2, INPUT_PULLUP); + pinMode(PIN_TRIGGER, OUTPUT); attachInterrupt(digitalPinToInterrupt(PIN_SW1), interrupt_sw1, FALLING); attachInterrupt(digitalPinToInterrupt(PIN_SW2), interrupt_sw2, FALLING); + digitalWrite(PIN_TRIGGER, HIGH); //active low Serial.begin(115200); } @@ -31,33 +38,84 @@ void loop() { if (sw1_flag){ sw1_flag=false; - sw1_lastTime=millis(); + sw1_lastTime=micros(); Serial.println("SW1"); + doTrigger1(); } if (sw2_flag){ sw2_flag=false; - sw2_lastTime=millis(); + sw2_lastTime=micros(); Serial.println("SW2"); - - float speed=getLastSpeed(); - Serial.print("Speed="); Serial.print(speed); Serial.println(" m/s"); - Serial.print(" "); Serial.print(speed*3.6); Serial.println(" km/h"); + doTrigger2(); } } -void interrupt_sw1() { - if (sw1_lastTime+SWDEBOUNCEflashdeadtime) { //deadtime + last_flash=millis(); + + if (speed*3.6 >= flashspeed) { + Serial.print("> Speed="); Serial.print(speed*3.6); Serial.println(" km/h"); + Serial.println("Flash"); + pinMode(PIN_TRIGGER, INPUT); //high impedance + delay(100); + pinMode(PIN_TRIGGER, OUTPUT); digitalWrite(PIN_TRIGGER, LOW); + } + } +} + + +void doTrigger2() { + static unsigned long last_flash=0; + + float speed=getLastSpeed2(); + + + if (speed*3.6<0.1) { + return; + } + + if (millis()-last_flash>flashdeadtime) { //deadtime + last_flash=millis(); + + if (speed*3.6 >= flashspeed) { + Serial.print("> Speed="); Serial.print(speed*3.6); Serial.println(" km/h"); + Serial.println("Flash"); + pinMode(PIN_TRIGGER, INPUT); //high impedance + delay(100); + pinMode(PIN_TRIGGER, OUTPUT); digitalWrite(PIN_TRIGGER, LOW); + } + } +} + + + +ICACHE_RAM_ATTR void interrupt_sw1() { + if (sw1_lastTime+SWDEBOUNCE