Arduino + LCD = Afficheur de tension en % (help)

Bonjour,
j'ai pour projet, de faire un chargeur usb portable... Jusque la rien de compliqué, sans programmation, soit, la base. Mais j'ai voulu compliquer mon projet, pour épater le jury, avoir un écran LCD, avec arduino pour afficher les % de ma batterie.

Ne m'y connaissant très peu en programmation arduino (qui ressemble très fort au C++)
j'ai trouvé un début de script sur le SDZ :

#include "LiquidCrystal.h" //ajout de la librairie

//Vérifier les broches !
LiquidCrystal lcd(11,10,9,8,7,6,5,4,3,2); //liaison 8 bits de données
LiquidCrystal lcd(11,10,5,4,3,2); //liaison 4 bits de données

void setup()
{
    lcd.begin(16,2); //utilisation d'un écran 16 colonnes et 2 lignes
    lcd.write("Welcome Anthony"); //petit test pour vérifier que tout marche
}

void loop() {
}

J'ai bien sur un écran 16*2, mais voilà ... Il y a autre chose, dans mon idée, je devais faire apparaitre : welcome anthony, et le faire disparaitre après 3secondes, pour après montrer ma batterie. Je possède une batterie de 5V. J'aimerais faire changer mon texte en fonction de la tension. 5V = Très bonne tension, 4V = Sa diminue! , 3V= Attention..., 2V = penses a recharger! et si on charge, on affichera : En charge ....

Je suis pas la pour avoir la réponse toute faite, mais avoir des explications aussi, du comment et du pourquoi, merci pour votre attention et votre aide!

Anthony

Bonjour
Un petit tour chez Skywodd pourrait apporter des idées et des explications : :

Bonjour,
merci pour ta réponse assez rapide! Je vais aller faire un petit tour, merci.

Anthony

Bonsoir,
je reviens vers vous, je ne trouve pas mon erreur... :cry:
je devrais allumer la LED1 si 0v est connecté sur la pine A0 et la LED2 sur 5V sur la pine A0

const int l1 = 2; // Led1
const int l2 = 3; // Led2
const int input = A0;

void setup() 
{
  pinMode(l1, OUTPUT);
  pinMode(l2, OUTPUT);
  pinMode(input, INPUT);
}
  
void loop()
{
  int etat = analogRead(input); // lecture analogique
  
  switch (etat){
  
  case 0:
    digitalWrite(l1, LOW); 
  break;  
  
  case 1023:
    digitalWrite(l2, LOW);
  break;
  }
  delay(1000);
}

Une erreur dans mon code, ou ... ?

Merci,
Anthony :~

je reviens vers vous, je ne trouve pas mon erreur... :cry:

En vrac:

  • mais où sont les
digitalWrite(l1, HIGH);
digitalWrite(l2, HIGH);
  • peut être que etat n'a jamais la valeur 0 ou 1023.
    Il faudrait peut être faire des tests moins stricts. Voir faire un petit Serial.print(etat) pour voir les valeurs prises par la variable.

  • prévoir un default après les 2 case pour éteindre les LED lorsqu'on ne tombe ni dans un cas ni dans l'autre.

Bonjour,

fdufnews:

  • peut être que etat n'a jamais la valeur 0 ou 1023.
    Il faudrait peut être faire des tests moins stricts. Voir faire un petit Serial.print(etat) pour voir les valeurs prises par la variable.

Avec des signaux de pile poil GND et VCC la sortie prend bien les valeurs 0 ou 1023 (TTL).
Par contre dans un "vrai" montage analogique il y a peu de chance que cela soit le cas.

De plus dans ton cas si l'entrée analogique est câblé à la batterie de l'arduino le case 0 ne sera jamais atteint (l'arduino aura arrêté de fonctionner bien avant).

Remarque si tu veut faire des fourchettes de valeurs, avec un switch et gcc (c'est pas dans la norme C/C++) c'est possible.