From 0fa780b36e1f0ae5718afdb5f7ec05512e08c468 Mon Sep 17 00:00:00 2001 From: arofarn Date: Wed, 28 Jul 2021 21:47:01 +0200 Subject: [PATCH] =?UTF-8?q?Adaptation=20du=20code=20=C3=A0=20Arduino=20Uno?= =?UTF-8?q?=20+=20LED=20RGV?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A la place d'un ATtiny85 + neopixel --- code/cavapapa/cavapapa.ino | 99 +++++++++++++++++++++++++------------- 1 file changed, 66 insertions(+), 33 deletions(-) diff --git a/code/cavapapa/cavapapa.ino b/code/cavapapa/cavapapa.ino index 36dcd77..7561a6a 100644 --- a/code/cavapapa/cavapapa.ino +++ b/code/cavapapa/cavapapa.ino @@ -16,29 +16,30 @@ along with this program. If not, see */ -#include #ifdef __AVR__ #include #endif -#define LED_PIN 0 -#define RELAY_PIN 1 -#define BAT_PIN 1 // Analog Input 1 = digital PIN 2 -#define VMAX 486 // = ~13.5V avec des résistances de 47k et 10k -#define V_GREEN 431 // = ~12V tension pour vert pur -#define VMIN 395 // = ~11 V -#define V_ALERTE 413 // = ~11.5V provoque clignotement 3 fois rapide -#define V_OFF 388 // = ~10.8V provoque clignotement pendant 15s puis OFF -#define OFF_DELAY 15 // delais de clignotement (en secondes) avant extinction à l'atteinte de V_OFF +#define LED_R_PIN 11 +#define LED_V_PIN 10 +#define LED_B_PIN 9 +#define RELAY_PIN 2 +#define BAT_PIN A1 // Analog Input 0 = digital PIN 2 +#define VMAX 1250 +#define V_GREEN 1170 // tension pour vert pur +#define VMIN 950 +#define V_ALERTE 970 // provoque clignotement 3 fois rapide +#define V_OFF 920 // provoque clignotement pendant 15s puis OFF +#define OFF_DELAY 10 // delais de clignotement (en secondes) avant extinction à l'atteinte de V_OFF #define INIT_BLINK 100 -Adafruit_NeoPixel neopix = Adafruit_NeoPixel(1, LED_PIN, NEO_RGB + NEO_KHZ800); - byte timer = 100; byte low_bat_counter = 0; -int vbat = 0; +int abat = 0; +int analog = 0; int red = 0; int green = 0; +float vbat = 0; bool warned = 0; void blink(int n=3, int t=500) { @@ -51,48 +52,70 @@ void blink(int n=3, int t=500) { } void setup() { - // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket - #if defined (__AVR_ATtiny85__) - if (F_CPU == 16000000) clock_prescale_set(clock_div_1); - #endif - // End of trinket special code + + analogReference(DEFAULT); + + Serial.begin(9600); pinMode(RELAY_PIN, OUTPUT); + pinMode(LED_R_PIN, OUTPUT); + pinMode(LED_V_PIN, OUTPUT); + pinMode(LED_B_PIN, OUTPUT); + analogWrite(LED_R_PIN, 0); + analogWrite(LED_V_PIN, 0); + analogWrite(LED_B_PIN, 0); //pinMode(BAT_PIN, INPUT); - neopix.begin(); - neopix.show(); // Initialize all pixels to 'off' + Serial.print("Démarrage..."); for (int i=0; i<4;i++) { - neopix.setPixelColor(0, 0, 0, 255); - neopix.show(); + analogWrite(LED_B_PIN, 255); delay(INIT_BLINK); - neopix.setPixelColor(0, 0, 0, 0); - neopix.show(); + analogWrite(LED_B_PIN, 0); delay(INIT_BLINK); } digitalWrite(RELAY_PIN, HIGH); - + + Serial.println("OK!"); } void loop() { //Mesure de VBAT : moyenne de 10 mesures à 20ms d'intervale - vbat =0; + abat = 0; for(int i=0;i<10;i++) { - vbat += analogRead(BAT_PIN); - delay(20); + analog = analogRead(BAT_PIN); + abat += analog; + /* Serial.print(i); + Serial.print(" : "); + Serial.println(analog); + */ + delay(10); } - vbat /= 10; + abat /= 10; + vbat = (0.8+(5.7*abat*5.0/1024))*100; + + // Serial.print("Brut: "); + // Serial.println(abat); + Serial.print("Tension:"); + Serial.print(vbat/100); + Serial.println(" V"); // Calcul de la couleur et affichage sur la neopixel red = map(constrain(vbat, VMIN, V_GREEN), VMIN, V_GREEN, 255, 0); green = map(constrain(vbat, VMIN, V_GREEN), VMIN, V_GREEN, 0, 255); - neopix.setPixelColor(0, red, green, 0); - neopix.show(); + analogWrite(LED_R_PIN, red); + analogWrite(LED_V_PIN, green); + analogWrite(LED_B_PIN, 0); + Serial.print("Rouge: "); + Serial.println(red); + Serial.print("Vert: "); + Serial.println(green); + if(vbat10) { + Serial.println("Extinction : batterie trop faible"); blink(OFF_DELAY, 500); digitalWrite(RELAY_PIN, LOW); - while(1); + while(1) { + for(int i=0;i<50;i++) { + analogWrite(LED_R_PIN, i); + delay(15); + } + for(int i=50;i>0;i--) { + analogWrite(LED_R_PIN, i); + delay(15); + } + } } - delay(1000); + delay(2000); }