Bonjour à tous,
Les Indicateurs de tension batterie lithium sont un peu cher pour ce qui sont donc j'aimerais en fabriquer un, d'abord pour les tests avec un arduino Uno, après avec un attiny85 ou attiny2313.
J'aimerais que quand on appuie sur un bouton une des 3 leds s'allume pour 5 secondes, mais les leds doit s'allumer en fonction de la tension de la batterie c'est à dire :
led 1 : >4.05V
led 2 : <4.04V
led 3 : <3.70V
J'ai réussi le code pour allumer une led pour 5sec avec un bouton et pour mesurer la tension d'une batterie.
allumer une led pour 5sec :
Code:void setup() { pinMode(10, INPUT); // button pinMode(11, OUTPUT); // LED digitalWrite(11, LOW); } int pinState = LOW; const int x = 5000; // 500ms delay void loop() { int newState = digitalRead(5); if (pinState != newState) // button state differs from last recorded state? { pinState = newState; if (pinState == LOW) // button newly pressed? delay(x); digitalWrite(11, pinState); // set LED HIGH if button LOW and vice versa } }
Mesurer la tension d'une batterie :
Il faut fusionner ces deux codes pour obtenir ce que je veut , j'ai essayé, j'ai passé des heures mais j'arrive pas (Par exemple : Les leds restent allumé à l'infini et quand j'appuie sur le bouton la tension n'est pas mesuré si une pile est relié.)Code:int analogInput = 0; float vout = 0.0; float vin = 0.0; float R1 = 100000.0; // resistance of R1 (100K) -see text! float R2 = 10000.0; // resistance of R2 (10K) - see text! int value = 0; void setup(){ pinMode(analogInput, INPUT); Serial.begin(9600); Serial.println("INPUT V= "); digitalWrite(11, LOW); digitalWrite(10, LOW); digitalWrite(9, LOW); } void loop(){ // read the value at analog input value = analogRead(analogInput); vout = (value * 5.0) / 1024.0; // see text vin = vout / (R2/(R1+R2)); if (vin<0.09) { vin=0.0;//statement to quash undesired reading ! } Serial.println(vin); delay(1000); if (vin>4.05) { digitalWrite(11, HIGH); digitalWrite(10, LOW); digitalWrite(9, LOW); } if (vin<4.04) { digitalWrite(11, LOW); digitalWrite(10, HIGH); digitalWrite(9, LOW); } if (vin<3.70) { digitalWrite(11, LOW); digitalWrite(10, LOW); digitalWrite(9, HIGH); } }
Merci d'avance
-----