Étape 2: Le Code et le Attiny
#include
#ifndef cbi / / ce et sbi pour déconner avec des morceaux dans les registres.
#define DRAS (sfr, bit) (_SFR_BYTE(sfr) & = ~_BV(bit))
#endif
#ifndef sbi
#define sbi (sfr, bit) (_SFR_BYTE(sfr) | = _BV(bit))
#endif
void setup() {//everything est dans la configuration, parce que nous avons seulement besoin de lire une fois. Le processeur est réinitialisé à la place à des lectures supplémentaires
analogRead (2); //take un tas de lectures, comme parfois la première lecture d’analogRead n’est pas fiable
analogRead(2) ;
analogRead(2) ;
analogRead(2) ;
analogRead(2) ;
analogRead(2) ;
analogRead(2) ;
analogRead(2) ;
DDRB = 0x1f ; //set sur 5 sorties à la sortie. C’est l’équivalent de pinMode 5 fois
retard (1); //several attend ici juste pour s’assurer que la lecture est une bonne chose. Il n’est pas une boucle, donc quelques millisecondes de retard ici et là ne sera pas un problème
uint8_t basse, haute ; //the octets de haute et basse de l’ADC
ADMUX = 0b00001100 ; //the value de l’analogique au numérique multiplexeur (donc ADMUX). Cela lit une refernce ~1.1V générées en interne
retard (10); //wait un certain temps pour le changement au travail
SBI (ADCSRA, ADSC); //start le « analogRead() »
tandis que (bit_is_set (ADCSRA, ADSC)); //wait pour le processeur à la fin de lecture
faible = ADCL ; //read la sortie une fois que c’est fait
élevé = ADCH ;
volts int = (haute << 8) | bas ; //shift les bits de poids fort, telle qu’elle est un peu 10 lu, et c’est pourquoi vous avez besoin de deux octets
unsigned longue tension = 1125300L/v ; //convert de tension (en millivolts)
tension-= 1500 ; //this est la tension de « vide », 0 sur l’afficheur
tension / = 50; / / diviseur, trouver le haut de votre gamme, soustraire le fond et diviser par 30 pour obtenir ce numéro.
PORTB = (tension & 0b00011111); //mask la sortie à juste les cinq baissez les morceaux (ce qui n’est probablement pas nécessaire, mais ne peut pas hiurt) et éteindre aux pins
retard (3000); //give nous trois secondes pour voir la sortie
PORTB = 0; //and éteindre les LEDs.
DDRB = 0; //set à haute imedence pour économiser l’énergie
CBI(ADCSRA,Aden); / / arrête le convertisseur analogique/numérique
set_sleep_mode(SLEEP_MODE_PWR_DOWN) ; Affectez-lui la puissance vers le bas aussi complète que possible, pour la consommation d’énergie minimale
PRR = PRR | 0b00001111 ; //this ligne arrête fondamentalement tout une fois qu’il passe en mode sommeil
sleep_enable (); //allow le dispositif pour entrer dans le mode "veille",
sleep_mode (); //and Enfin, éteindre. Jamais, nous avons besoin quitter le mode "veille", comme il réinitialise automatiquement quand.
}
void loop() {}; //we ne besoin de ça pour faire n’importe quoi