1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
|
#include <Arduino.h>
#include <U8g2lib.h>
#include <U8x8lib.h>
#define I2C_ADDRESS 0x3C
U8X8_SH1106_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);
U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
#define ENTREE_ANALOGIQUE 6
int tensionLue = 0;
int valeurLue = 0;
#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rowPins[ROWS] = {2, 3, 4, 5};
byte colPins[COLS] = {8, 9, 10};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
String action;
long timein[6], countdown_time = 0, initialsecond = 0;
int i = 0;
const byte mosfet = 15;
const byte led = 13;
void setup() {
analogReference (INTERNAL);
pinMode (mosfet, OUTPUT);
pinMode (led, OUTPUT);
digitalWrite(mosfet, LOW);
digitalWrite(led, LOW);
u8g2.begin();
u8x8.begin();
for (int i = 0; i < 3; i++) {
u8x8.setFont(u8x8_font_8x13B_1x2_r);
u8x8.setCursor (1, 0);
u8x8.print("Saisir mn/sec");
delay(250);
u8x8.clear();
delay (250);
}
u8x8.setFont(u8x8_font_profont29_2x3_n);
u8x8.setCursor (3, 4);//colonne/rangée
u8x8.print("00:00");
u8x8.setFont(u8x8_font_8x13B_1x2_r);
u8x8.setCursor (1, 2);
u8x8.print("------**------");
u8x8.setCursor (1, 0);
u8x8.print("Saisir mn/sec");
}
void loop() {
int valeurLue = analogRead (ENTREE_ANALOGIQUE);
float tensionLue = (valeurLue * 12.25 / 1024.0);
if (tensionLue < 10.5) {
u8x8.setFont(u8x8_font_8x13B_1x2_r);
u8x8.clear();
u8x8.setCursor (3, 1);
u8x8.print ("Battterie");
u8x8.setCursor (5, 4);
u8x8.print ("faible");
delay(2000);
digitalWrite (mosfet , HIGH);
}
char key = keypad.getKey();
if (key) {
switch (key) {
case '*' :
u8x8.setCursor (3, 4);
action = "set_time";
i = 2;
break;
case '#' :
action = "start_countdown";
u8x8.clear();
break;
default :
u8x8.setFont(u8x8_font_profont29_2x3_n);
if (action == "set_time") {
i++;
int c = i - 1;
timein[c] = key - 48;
initialsecond = 0;
long hour = (timein[0] * 10) + timein[1];
long minute = (timein[2] * 10) + timein[3];
long second = (timein[4] * 10) + timein[5]; //second
countdown_time = (hour * 3600) + (minute * 60) + second;
u8x8.print(key);
if (i % 2 == 0 && i < 6) {
u8x8.print(":");
}
break;
}
}
}
if (action == "start_countdown") {
if (initialsecond == 0) {
initialsecond = millis() / 1000;
}
long countdowntime_seconds = countdown_time - (millis() / 1000) + initialsecond;
if (countdowntime_seconds >= 0) {
long countdown_hour = countdowntime_seconds / 3600;
long countdown_minute = ((countdowntime_seconds / 60) % 60);
long counddown_sec = countdowntime_seconds % 60;
u8x8.setFont(u8x8_font_profont29_2x3_n);
u8x8.setCursor (0, 4);
if (countdown_hour < 10) {
u8x8.print("0");
}
u8x8.print(countdown_hour);
u8x8.print(":");
if (countdown_minute < 10) {
u8x8.print("0");
}
u8x8.print(countdown_minute);
u8x8.print(":");
if (counddown_sec < 10) {
u8x8.print("0");
}
u8x8.setFont(u8x8_font_profont29_2x3_n);
u8x8.print(counddown_sec);
int valeurLue = analogRead (ENTREE_ANALOGIQUE);
float tensionLue = (valeurLue * 12.25 / 1024.0);
u8x8.setFont(u8x8_font_8x13B_1x2_r);
u8x8.setCursor (37, 0);
u8x8.print (tensionLue);
u8x8.setCursor (0, 0);
u8x8.print ("Bat:");
u8x8.setCursor (43, 0);
u8x8.print ("Volts");
if ( counddown_sec < 1 && countdown_minute == 0 && countdown_hour == 0) {
digitalWrite (mosfet , HIGH);
digitalWrite (led , HIGH);
u8x8.setFont(u8x8_font_8x13B_1x2_r);
}
}
}
} |
Partager