diff --git a/README.md b/README.md index e895b6c..c59d93d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,15 @@ +# MISE À JOUR # + +**Attention !** Lors de la dernière mise à jour le schéma de connection de l'écran a été modifié pour des soucis d'optimisations du montage. + +- **PIN\_SCLK** : D8 --> D4 +- **PIN\_LIGHT** : D11 --> Inchangée +- **PIN\_SCE** : D7 --> Inchangée +- **PIN\_RESET** : D8 --> D6 +- **PIN\_DC** : D6 --> D5 +- **PIN\_SDIN** : D5 --> D4 + + DIY Arduino variometer ================== @@ -26,7 +38,7 @@ Voici à titre indicatif le matériel utilisé et leur prix d'achat sur eBay int - DC-DC Converter Step Up 1-5V 500mA | 1,15€ - 3,7V 600mAh LiPo Battery | 3,25€ - RTC Module for Arduino | 1,55€ -- 3x 10k Ohm resistor + 1x 100k Ohm resistor + 1x 120 Ohm resistor | 0,10€ +- 3x 10k Ohm resistor + 1x 120 Ohm resistor | 0,10€ - Right Angle Mini Slide Switch | 0,10€ - Cables | 3€ - Plastic Electronics Project Box Enclosure DIY 27x60x100mm | 2,40€ diff --git a/Variometer.fzz b/Variometer.fzz index e2d171a..6d6da46 100644 Binary files a/Variometer.fzz and b/Variometer.fzz differ diff --git a/Variometer.png b/Variometer.png index 98810e3..c522973 100644 Binary files a/Variometer.png and b/Variometer.png differ diff --git a/Variometer/Variometer.ino b/Variometer/Variometer.ino index c14a9ee..f34d665 100644 --- a/Variometer/Variometer.ino +++ b/Variometer/Variometer.ino @@ -10,7 +10,6 @@ #include #include #include -#include ///////////////////////////////////////// bool initialisation = false; //If true, reset and update eeprom memory at arduino start @@ -37,7 +36,7 @@ uint8_t date_minute; #define Enter 12 #define ENCODER_STEP 4 -Encoder knob(2, 3); +Encoder knob(3, 2); long knobPosition = 0; int lastEnterState = HIGH; ///////////////////////////////////////// @@ -86,12 +85,12 @@ MenuItem m_recreset = MenuItem(NULL, MENU_RECRESET); //Reset records //////////////////ECRAN/////////////////////// #define enablePartialUpdate -#define PIN_SCLK 8 +#define PIN_SCLK 4 #define PIN_LIGHT 11 #define PIN_SCE 7 -#define PIN_RESET 6 -#define PIN_DC 5 -#define PIN_SDIN 4 +#define PIN_RESET 8 +#define PIN_DC 6 +#define PIN_SDIN 5 Adafruit_PCD8544 display = Adafruit_PCD8544(PIN_SCLK, PIN_SDIN, PIN_DC, PIN_SCE, PIN_RESET); ///////////////////////////////////////// @@ -104,13 +103,20 @@ int altitude_temp; uint8_t chrono_cpt = 0; float vario = 0; +float vario_old = 0; +float vario_diff = 0; +uint8_t vario_diff_cpt = 0; +uint8_t timeNoPauseBeep = 0; +bool noSound = false; +unsigned long get_timeBeep = millis(); +uint8_t beepLatency = 0; + bool is_vario_button_push = false; uint16_t average_vcc = 0; //variable to hold the value of Vcc from battery double average_pressure; unsigned long get_time1 = millis(); unsigned long get_time2 = millis(); -unsigned long get_timeBeep = millis(); -uint8_t beebLatency = 0; + uint8_t push_write_eeprom = 6; float my_temperature; float alt; @@ -814,15 +820,15 @@ int readVccPercent() return percent; } -uint8_t getBeepLatency() -{ - int latency = 240 - (vario * 60); - return (latency < 130)? 130: (latency > 240)? 240: latency; +uint8_t getBeepLatency(float variation) +{ + int latency = 150 - (variation * 30); + return (latency < 70)? 70: (latency > 150)? 150: latency; } -uint16_t getBeepFrequency() -{ - int frequency = 790 + (100 * vario); +uint16_t getBeepFrequency(float variation) +{ + int frequency = 690 + (150 * variation); return (frequency < 100)? 100: (frequency > 1300)? 1300 :frequency; } @@ -876,7 +882,7 @@ void loop() readButtons(); // screen brightness. AnalogWrite values from 0 to 255 analogWrite(PIN_LIGHT, conf.light_cpt * 51); - + //Serial.println(millis()); // get a new sensor event sensors_event_t event; bmp085.getEvent(&event); @@ -890,6 +896,13 @@ void loop() float tempo = millis(); // put it in filter and take average vario = vario * 0.8 + (1000 * 0.2 * ((alt - Altitude) / (tim - tempo))); + + /* TEST BLOC + vario = vario + 0.01; + if (vario > 4) + vario = 0; + */ + alt = Altitude; tim = tempo; @@ -908,19 +921,35 @@ void loop() stat.txchutemin = vario; } - // make some beep... - if (millis() >= (get_timeBeep + beebLatency)) - { + // make some beep... + if (millis() >= (get_timeBeep + beepLatency) || timeNoPauseBeep <= 30) + { get_timeBeep = millis(); - beebLatency = getBeepLatency(); - - if (vario > conf.vario_climb_rate_start && conf.vario_climb_rate_start != 0) { - //when climbing make faster and shorter beeps - toneAC(getBeepFrequency(), conf.volume, beebLatency, true); - - } else if (vario < conf.vario_sink_rate_start && conf.vario_sink_rate_start != 0) { - - toneAC(getBeepFrequency(), conf.volume, beebLatency, true); + + noSound = (timeNoPauseBeep <= 30)? false: !noSound; + + if (false == noSound){ + //beep even if vario has negative value but vario is climbing + float variation = (vario < conf.vario_climb_rate_start && vario_diff >= conf.vario_climb_rate_start && conf.vario_climb_rate_start != 0)? vario_diff: vario; + + if (timeNoPauseBeep <= 30){ + timeNoPauseBeep++; + beepLatency = 150; + } + else { + beepLatency = getBeepLatency(variation); + } + + if ((vario > conf.vario_climb_rate_start && conf.vario_climb_rate_start != 0) || (vario < conf.vario_sink_rate_start && conf.vario_sink_rate_start != 0)) { + //when climbing make faster and shorter beeps + toneAC(getBeepFrequency(variation), conf.volume, beepLatency, true); + } + else { + toneAC(0); + timeNoPauseBeep = 0; + } + } else { + beepLatency = beepLatency / 2; } } @@ -932,13 +961,20 @@ void loop() // update vario bar if (varioState == true) renderVarioBar(); + + vario_diff_cpt++; + if (vario_diff_cpt == 5){ + vario_diff_cpt = 0; + vario_diff = vario - vario_old; + vario_old = vario; + } } //every second if (millis() >= (get_time2 + 1000)) { get_time2 = millis(); - + if (stat.chrono_start != 0 && vario > 0) { stat.cumul_alt += vario; } @@ -1009,6 +1045,9 @@ void loop() altitude_temp = Altitude; } } + //correct beep latency + beepLatency = 0; + noSound = true; } }