Étape 3: logiciel
Ce croquis est très simple, juste une série de consécutives si instructions pour comparer la tension lire ADC3 avec certaines valeurs prédéfinies. Si vous suivez attentivement le code, vous verrez que les valeurs indiquées dans le principe de fonctionnement diaporama à l’étape 1 sont les mêmes valeurs utilisées dans les différentes instructions IF de décider quel LED doit s’allumer.
Pour créer l’effet de clignotement LEDs chaque fois que les tensions sont plus élevées que 13.1V, un compteur est augmenté par un sur chaque passage dans la partie du code. Avant que le code effectue une boucle retour à relire ADC3, l’exécution est retardée de 100 millisecondes. Si instructions allument LED chaque fois que le compteur de passage est inférieure à 6 et la tour del chaque fois que le compteur est entre 6 et 11. Une fois que le compteur indique 11, le compteur est remis à zéro à répéter le cycle.
ADC3 entrée est utilisée pour lire la tension analogique venant du diviseur de tension. Par ailleurs, ADC0 avait été le premier choix comme entrée analogique de ce projet, cependant, lorsque la tension de la batterie a été un peu plus basse que 8.7V que tous les trois LEDs sortait. Cela ne semblait pas juste comme j’avais utilisé un régulateur de tension basse-abandon. Après quelques recherches plus sur le web j’ai trouvé que chaque fois que vous avez utilisé un code pin comme intrant qui pourrait également fonctionner comme matériel Reset, cela pourrait se produire. Une fois que ADC3 a été sélectionné comme entrée analogique, tension de la batterie pourrait descendre à proximité de 6V et LED rouge serait encore sur ce qui signifie le logiciel serait toujours exécuté. C’est alors que, afin d’éviter d’autres problèmes, les broches 1 et 5 ont été repêchés jusqu'à + 5V par l’intermédiaire de résistances de 10 K.
ATtiny 13 code :
Cette esquisse surveille la tension de la batterie et s’allume une LED sur cette base.
Processeur : ATtiny 13.
Auteur : rlarios
Date : 13.04.03
//
int rLED = 4 ; Broches de la LED rouge
int yLED = 1 ; Broche de LED jaune
gLED int = 2 ; Broches de la LED verte
int val = 0 ; Cette variable tiendra la valeur de la tension d’entrée
int dlyctr = 0 ; C’est le compteur de retard.
void setup() {}
pinMode (rLED, sortie) ; Définir la sortie LED rouge
pinMode (yLED, sortie) ; Idem LED jaune
pinMode (gLED, sortie) ; Idem LED vert
}
void loop() {}
Val = analogRead(A3) ; Lire la tension par l’intermédiaire de 3 entrées analogiques
if(Val<452) {//Is tension de batterie au-dessous de 9.6V ?
digitalWrite (rLED, HIGH) ; Oui, c’est mauvais, la LED rouge s’allume
digitalWrite (yLED, basse) ; Éteindre la LED jaune
digitalWrite (gLED, faible) ; Éteindre la LED verte
}
d’autre
{
if(Val<594) {//Is tension entre 9.6V et 12,4 ?
digitalWrite (rLED, faible) ; Il s’agit d’une basse tension, éteindre la LED rouge
digitalWrite (yLED, HIGH) ; Allumer la LED jaune comme un avertissement.
digitalWrite (gLED, faible) ; Éteindre la LED verte
}
d’autre
{
if(Val<629) {//Is tension entre 12,4 et 13.1V tandis que ralenti ?
digitalWrite (rLED, faible) ; Oui, désactiver la LED rouge
digitalWrite (yLED, basse) ; Éteindre la LED jaune
digitalWrite (gLED, HIGH) ; Allumer la LED verte pour indiquer la tension de la batterie complètement chargée.
}
d’autre
{
dlyctr = dlyctr + 1 ; augmenter le compteur de retard. chaque passage environ 100ms
if(Val<751) {//Is tension de la batterie au-dessus 13.1V et au-dessous de 15.5V ?
digitalWrite (rLED, faible) ; Éteindre la LED rouge
digitalWrite (yLED, basse) ; Éteindre la LED jaune
if(dlyctr<6) {}
digitalWrite (gLED, HIGH) ; LED verte impulsion une demi-seconde
}
d’autre
{
digitalWrite (gLED, faible) ; Green Pulse LED éteinte pendant une demi-seconde montrer la batterie se recharge.
if(dlyctr>10) {}
dlyctr = 0 ; Réinitialiser le compteur de retard
}
}
}
d’autre //Battery tension est supérieure à 15,5. Danger ! Surcharge
{
digitalWrite (yLED, basse) ; Éteindre la LED jaune
digitalWrite (gLED, faible) ; Éteindre la LED verte
if(dlyctr<6) {}
digitalWrite (rLED, HIGH) ; Allumer la LED rouge pendant une demi-seconde.
}
d’autre
{
digitalWrite (rLED, faible) ; Éteindre la LED rouge pendant une demi-seconde.
if(dlyctr>10) {}
dlyctr = 0 ; Réinitialiser le compteur de retard
}
}
}
Delay(100) ; Arrêter de 100 millisecondes programme permettant pouls LED.
}
}
}
}