From 1f0d2d4fead1f75a0dd960fac897debd6bed8a73 Mon Sep 17 00:00:00 2001 From: Fisch Date: Tue, 17 Apr 2018 11:36:19 +0200 Subject: [PATCH] add manual ev moveamount to settings, add zonesystem scale to minmax-bar --- lightmeter.ino | 56 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 43 insertions(+), 13 deletions(-) diff --git a/lightmeter.ino b/lightmeter.ino index 59ea258..eb379a8 100644 --- a/lightmeter.ino +++ b/lightmeter.ino @@ -109,7 +109,9 @@ struct Settings { uint8_t aperatureSelectionMode; //1=Full, 2=Half, 3=Third uint8_t shutterSelectionMode; //index for which shuttertimes table to use uint8_t ISOSelectionMode; //1=Full, 2=Thirds + uint8_t manualev_moveamount_frac; // 1=1ev, 2=1/2ev, 3=1/3 ev }; +#define MAXIMUM_MANUAL_EV_MOVEAMOUNT_FRAC 3 bool settingsStructEqual(Settings a, Settings b){ if (a.minimumAperatureIndex!=b.minimumAperatureIndex || a.aperatureSelectionMode!=b.aperatureSelectionMode || a.shutterSelectionMode!=b.shutterSelectionMode || a.ISOSelectionMode!=b.ISOSelectionMode){ @@ -118,7 +120,7 @@ bool settingsStructEqual(Settings a, Settings b){ return true; } -Settings userSettings= {1,1, 1,2}; +Settings userSettings= {1,1, 1,2,1}; Settings eeprom_userSettings; //to store current eeprom status @@ -163,8 +165,8 @@ enum displaymode { }; displaymode displaymode=lightmeter; uint8_t settings_selectedItem=0; //in settings display -String settingStrings[]={"ISO:","F-Stops:","Timetable:","Turn Off"}; -#define SETTINGS_SELECTEDITEM_MAX 3 //inclusive. 2 means 3 items available +String settingStrings[]={"ISO:","F-Stops:","Timetable:","EV Step:","Turn Off"}; +#define SETTINGS_SELECTEDITEM_MAX 4 //inclusive. 2 means 3 items available boolean settings_itemActive=false; //item in settings selected to change value #define DISPLAY_UPDATEDELAY 200 long last_displayupdate=0; @@ -591,10 +593,10 @@ void handleInputs_Lightmeter() if (manualev_mode){ //Manual Ev //Value Change if ( button_left ) { - ev-=1.0/3; + ev-=1.0/userSettings.manualev_moveamount_frac; } if ( button_right ) { - ev+=1.0/3; + ev+=1.0/userSettings.manualev_moveamount_frac; } //Change Mode if ( button_hold_left ){ // Manual Ev -> Av @@ -648,7 +650,8 @@ void handleInputs_Lightmeter() ev=getEV(); //set ev to current measurement by selected mode if (evev_max){ //new ev is greater + } + if(ev>ev_max){ //new ev is greater ev_max=ev; } debug_analog_high=analog_high; @@ -656,7 +659,10 @@ void handleInputs_Lightmeter() //LED Brightness on trigger uint8_t triggerblinkbrightness=255; if (ev<4){ //dim led when dark - triggerblinkbrightness=map(ev,4,0,255,50); + triggerblinkbrightness=map(ev,4,2,255,10); + } + if (ev<2){ + triggerblinkbrightness=10; } blinkLED(20,triggerblinkbrightness); } @@ -740,7 +746,20 @@ void handleInputs_Settings() } break; - case 3: //Turn Off + case 3: //manual ev moveamount + if ( button_left ) { + if(userSettings.manualev_moveamount_frac>1){ + userSettings.manualev_moveamount_frac-=1; + } + } + if ( button_right ) { + if (userSettings.manualev_moveamount_frac2 && (ev_min<-254 || ev_min>2)){ //TODO make this better + if (ev>2 && (ev_min<-254 || ev_min>2)){ //TODO make ev scale start better _startev=0; } if (ev>11 || ev_max>11){ @@ -1272,6 +1291,7 @@ void updateDisplay_Lightmeter() //Lightmeter display if (manualev_mode){ //in manual ev mode display.drawXBitmap(xpos_arrow - icon_arrow_width/2.0 -1, ypos_icon_arrow, icon_arrow_bits, icon_arrow_width, icon_arrow_height, WHITE); //arrow icon //draw bold display.drawXBitmap(xpos_arrow - icon_arrow_width/2.0 +1, ypos_icon_arrow, icon_arrow_bits, icon_arrow_width, icon_arrow_height, WHITE); //arrow icon //draw bold + display.drawXBitmap(xpos_arrow - icon_arrow_width/2.0 , ypos_icon_arrow-1, icon_arrow_bits, icon_arrow_width, icon_arrow_height, WHITE); //arrow icon //draw bold } uint8_t _xpos_current_evtext_move=5; //for text centering if (_ev_decimals <= 0.1666 || _ev_decimals > 0.8333) { //without fraction displayed @@ -1318,17 +1338,22 @@ void updateDisplay_Lightmeter() //Lightmeter display if (ev_min>-254){ //ev_min is set (-255 is placeholder for "not set") display.drawLine(xpos_ev_min,2,xpos_ev_min,5,WHITE); if ((xpos_arrow-xpos_ev_min)>3 && arrow_is_between_minmax){ //arrow is not overlaying line and is in between min and max - display.drawLine(xpos_ev_min,4,xpos_arrow - 4,4,WHITE); //line from left horizontally to arrow + display.drawLine(xpos_ev_min,4,xpos_arrow ,4,WHITE); //line from left horizontally to arrow display.drawLine(xpos_ev_min,5,xpos_arrow - 4,5,WHITE); //line from left horizontally to arrow } } if (ev_max>-254){ //ev_min is set (-255 is placeholder for "not set") display.drawLine(xpos_ev_max,2,xpos_ev_max,5,WHITE); if ((xpos_ev_max-xpos_arrow)>3 && arrow_is_between_minmax){ //arrow is not overlaying line and is in between min and max - display.drawLine(xpos_ev_max,4,xpos_arrow + 3,4,WHITE); //line from right horizontally to arrow - display.drawLine(xpos_ev_max,5,xpos_arrow + 3,5,WHITE); //line from right horizontally to arrow + display.drawLine(xpos_ev_max,4,xpos_arrow ,4,WHITE); //line from right horizontally to arrow + display.drawLine(xpos_ev_max,5,xpos_arrow + 2,5,WHITE); //line from right horizontally to arrow } } + + for (int8_t i=-(xpos_arrow-xpos_ev_min)/FULLEVLINEDISTANCE;i<(xpos_ev_max-xpos_arrow)/FULLEVLINEDISTANCE;i++){ //draw black lines for every zone border + display.drawLine(xpos_arrow+i*FULLEVLINEDISTANCE+FULLEVLINEDISTANCE/2,4,xpos_arrow+i*FULLEVLINEDISTANCE+FULLEVLINEDISTANCE/2 ,5,BLACK); //erase part of horizontal line + } + @@ -1347,7 +1372,9 @@ void updateDisplay_Lightmeter() //Lightmeter display display.print(debug_analog_high);*/ display.print(ev_min,1); - display.print(":"); + display.print("<"); + display.print(ev,1); + display.print("<"); display.print(ev_max,1); } @@ -1382,6 +1409,9 @@ void updateDisplay_Settings() break; case 2: display.print(settingsnameShutterSelectionMode[userSettings.shutterSelectionMode-1]); break; + case 3: display.print("1/"); display.print(userSettings.manualev_moveamount_frac);display.print(" EV"); + break; + //case 4 is power off, no value to display here } display.setCursor(SETTINGS_XPOS_OFFSET,display.getCursorY()+SETTINGS_YPOS_INCREMENT); //move cursor to next entry