diff --git a/lightmeter.ino b/lightmeter.ino index 066feca..f7e6b80 100644 --- a/lightmeter.ino +++ b/lightmeter.ino @@ -49,6 +49,7 @@ BH1750 lightMeter; #define INCIDENTDELAY 100 //minimum delay between incident sensor (BH1750) readings #define DEBOUNCETIME 20 //time to not check for inputs after key press #define BUTTONTIMEHOLD 750 //time for button hold +#define BUTTONTIMEHOLDLONG 3000 //time for button long hold #define VOLTAGE_WARN 3.4 //voltage per cell //TODO implement warning @@ -102,6 +103,10 @@ boolean button_hold_left=false; boolean button_hold_center=false; boolean button_hold_right=false; +//even longer press +boolean button_hold_long_trigger=false; +long timebuttonpressed_trigger_long=0; + float vbat=100; struct Settings { @@ -362,11 +367,16 @@ void handleInputs() button_hold_center=false; button_hold_right=false; + //even longer press + button_hold_long_trigger=false; + + if (millis()-millis_lastinput>DEBOUNCETIME) //Button debouncing { //Trigger if (timebuttonpressed_trigger == 0 && !digitalRead(PIN_TRIGGER)){ //first time pressed down. (low when pressed) timebuttonpressed_trigger=loopmillis; //set time of button press + timebuttonpressed_trigger_long=loopmillis; //set time of button press, for long hold timing }else if(timebuttonpressed_trigger != 0 && digitalRead(PIN_TRIGGER)){ //button released (was pressed) if (loopmillis-timebuttonpressed_trigger < BUTTONTIMEHOLD){ //short press button_trigger=true; @@ -376,6 +386,12 @@ void handleInputs() button_hold_trigger=true; timebuttonpressed_trigger=-1; //-1 as flag for hold triggered } + + if (timebuttonpressed_trigger_long>0 && loopmillis-timebuttonpressed_trigger_long >= BUTTONTIMEHOLDLONG && !digitalRead(PIN_TRIGGER)) { //button held down even longer, set hold long flag for as long as button is down + button_hold_long_trigger=true; + }else if(timebuttonpressed_trigger_long>0 && digitalRead(PIN_TRIGGER)){ //released + timebuttonpressed_trigger_long=0; //reset long hold timing + } //Left if (timebuttonpressed_left == 0 && !digitalRead(PIN_BTNLEFT)){ //first time pressed down. (low when pressed) @@ -645,7 +661,7 @@ void handleInputs_Lightmeter() } } - if (button_trigger) { //Trigger + if (button_trigger || button_hold_long_trigger) { //Trigger or very long hold ev_last=ev; ev=getEV(); //set ev to current measurement by selected mode if (ev-254) { //ev min set + if (ev_min>-254 && ev>=ev_min) { //ev min set display.print("-"); display.print(ev-ev_min,1); }else{ display.print("/"); } display.print(" <> "); - if (ev_max>-254){ + if (ev_max>-254 && ev<=ev_max){ display.print("+"); display.print(ev_max-ev,1); }else{