Controlleur de batterie lipo 3.7v avec Attiny85

Je venais me répondre mais tu as donné la réponse ! En allant chercher mon fils à l'école je discutai avec un gars qui me disait que si la pin est pas alimentée alors il y aura des chiffres aléatoires entre 0 et 1023. C'est lui aussi qui m'a dit de faire un pullup ou pulldown. pour le pullup ok j'ai trouvé mais le pulldown non apparemment il ne la pas sur l'attiny et il faut le faire avec un résistance si j'ai bien compris.

Sion mon code à bien évolué en 1h mais il reste un dernier soucis, quand je connect la batterie le voyant dois devenir violet. Dans ma condition j'ai mis if (analogRead(A2) >= 1023 ) mais j'aurai préféré faire un pulldown car de temps en temps le pullup atteint le 1023 et la led clignote 1s violet.

Je vais continuer à chercher je suis sur de pouvoir trouver un truc ...
En tout cas Kamill merci beaucoup de m'aider !!! :wink:

C'est bon Kamill j'ai pu résoudre le problème avec un delais de 3s simplement. ça serai pas de bol si pendant 3 s j'ai la même valeur aléatoire hein !

Je post mon code final qui peut être évoluera mais il fonctionne bien pour le moment

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
#define LED_PIN    0
#define LED_COUNT 1
int hideled = 0;
int charbat = 0;

Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
/*  Pour info le pin est connecté à un bouton poussoir. Ce bouton poussoir sert à la base à faire le "HotKey" et est connecté au GPIO du raspberry W.
 *  Quand je click une fois dessus la led s'allume blue. Mais si je garde enfonçé le bouton 5s les condition se font sur  l'attiny.
 */
pinMode(A1,INPUT_PULLUP);
pinMode(A2,INPUT);
pinMode(A3,INPUT);

#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif
  strip.begin();           // INITIALIZE NeoPixel strip object (REQUIRED)
  strip.show();            // Turn OFF all pixels ASAP
  strip.setBrightness(10); // Set BRIGHTNESS to about 1/5 (max = 255)
}

void loop() {

    //desactivation du voyant d'état de batterie
    if (analogRead(A1) < 800) {
       //couleur bleu glacier pour indiquer qu'ib appuie sur le bouton
       strip.setPixelColor(0,0,230,200);
       strip.show();
       delay(5000);
      //Si on continue d'appuyer après les 5s alors on fait la condition  
      if (analogRead(A1) < 800) {  
            if (hideled == 0 ) {
              //couleur fushia pour dire on va éteindre le voyant
              strip.setPixelColor(0,255,0,22);
              strip.show();
              hideled = 1;        
            }else{
               hideled = 0 ;
               //couleur blanche pour dire on va allumer le voyant
               strip.setPixelColor(0,0,255,0);
               strip.show();
            }
            delay(4000);
      }
    }//fin desactivation du voyant d'état de batterie
    
    //variable pour batterie en charge 1= en charge
    if (analogRead(A2) >= 1023 ){
      //delay de confirmation que le chargeur est bien connecté
        delay(3000);    
        if (analogRead(A2) >= 1023 ){
          charbat = 1;
        }
      else{
          charbat = 0;
      }
    }
    
    if ((hideled == 0 ) && (charbat == 0)){
         //couluer Bleu = de à 3.9v à 4.2v (de 70% à 100% de capacité)
          if ((analogRead(A3) >= 800)&& (analogRead(A3) <=  1023)) {
            strip.setBrightness(10);
            strip.setPixelColor(0,0,0,230);
            strip.show();
           }   
           //couleur orange > 3.7 < 3.9v (de 20% à 69% de capacité)
           if ((analogRead(A3) >= 757)&& (analogRead(A3) <  800)) {
                strip.setBrightness(10);
                strip.setPixelColor(0,0,230,0);
                strip.show();
           } 
           //couleur rouge de 3.6v et < 3.7 (de 10% à 20% de capacité)
           if ((analogRead(A3) >= 739)&& (analogRead(A3) <  757)) {
              
              strip.setBrightness(10);
              strip.setPixelColor(0,255,30,0); 
              strip.show(); 
           }
           //couleur rouge clignotante < 3.6v (  moins de 5% + shutdown pi zero)
           if ((analogRead(A3) >= 0)&& (analogRead(A3) <  739)) {
            // shutdown pi zero
             
             strip.setBrightness(50);
             strip.setPixelColor(0,255,0,0);
             strip.show();
             delay(300);
             strip.setPixelColor(0,0,0,0);
             strip.show();
             delay(300);     
           }
    }//fin voyant batterie
    
    // extinction des voyant batterie
    if ((hideled == 1 ) && (charbat == 0)){
      strip.setPixelColor(0,0,0,0);
      strip.show();
    }
    
    //allumage en violet pour indiquer la charge
    if (charbat == 1){
        strip.setBrightness(10);
        strip.setPixelColor(0,80,30,255);
        strip.show();
    }
    delay(100); //delais d'execution de la boucle générale 
}//fin Void loop      

Petite info : Avec mon code pour allumer ou éteindre la led il faut relacher l'appuis long quand la couleur fushia ou verte est en cours :wink:
Et aussi je vais essayé d'éteindre led violette quand la charge est fini mais je pourrais le faire quand j'aurai mon chargeur lipo

Bravo si ça fonctionne. :smiley:
Par contre quand tu fais if (analogRead(A2) >= 1023 ), ça ne me parait pas très fiable car tu peux très bien avoir une incertitude de 1 ou 2 points et ton test ne fonctionnera pas.

Salut kamill,
Oui tu as raison il faudra que je test mon chargeur pour voir s'il est bien à 5 v tout le temps et au pire avec le délais je peux me permettre de descendre cette valeur un peut.

Salut Kamill,
Pour finir cette étape je voudrai également apprendre à faire un PullDown externe avec l'atttiny85.
Est-ce que je peux connecter les A1 A2 A3 à une résistance de mini 10k vers la borne négative de l'attiny85 pour obtenir un pullDown ? ou est-ce une autre manière de faire ?
Merci

Oui, c'est ça. Tu connectes la résistance entre l'entrée et gnd.
10k c'est ce qui est souvent utilisé pour ça, mais tu peux aussi augmenter la valeur (par exemple 47k) si l'entrée peut être connectée durablement au +5V.

Je peux connecter les 3 pins sur une résistance ? ou alors 1 résistance par pin ?
Merci

Une résistance pas pin, autrement les trois pins vont être en parallèle.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.