sans composants extérieurs
bien sûr, c'est intéressant uniquement pour une carte maison qui n'a pas de régulateur intégré
float mesure_vcc() {
ADMUX = 0x4E; // Sélectionne la référence interne à 1v1 comme point de mesure,
// avec comme limite haute VCC
ADCSRA |= (1 << ADEN); // Active le convertisseur analogique -> numérique
ADCSRA |= (1 << ADSC); // Lance une conversion analogique -> numérique
while (ADCSRA & (1 << ADSC)); // Attend la fin de la conversion
int valeur = ADCL | (ADCH << 8); // Récupère le résultat de la conversion
//Serial.print("valeur:");
//Serial.println(valeur);
/*
* VCC = 5v = 1023
* 1v1 interne (à VCC = 5v) = (1023 * 1.1) / 5 = 225
* En mesurant le 1v1 interne on peut donc déduire le VCC réel du circuit
* VCC = (1023 * 1.1) / 1v1_mesure
*/
float real_vcc = (1023 * 1.1) / valeur;
Serial.print("tension: ");
Serial.println(real_vcc);
return real_vcc;
tant que l'on appuie sur un bouton, un chronomètre est lancé. un second appui bref, fait clignoter la led, autant de fois que de secondes du chrono
const int bouton=3;
const int led=13;
int depart,fin,tempo;
boolean debutcycle;
void setup(){
pinMode(bouton,INPUT_PULLUP);
digitalWrite(bouton,HIGH);
pinMode(led,OUTPUT);
digitalWrite(led,LOW);
debutcycle=LOW;
Serial.begin(9600);
}
void loop(){
boolean etat=digitalRead(bouton);
if (etat==LOW){ //si pas de cycle de comptage en cours, on le démarre
debutcycle=HIGH;
tempo=0;
cycle();//lance le chrono contentu dans cycle()
}
//etat=digitalRead(bouton);
if(debutcycle==HIGH){ //si un cycle est en cours, on va flasher la led en appelant fincycle()
Serial.println(tempo);
fincycle();
}
}
void cycle(){ // démarre le chrono pendant lequel on appuie sur le bouton la 1° fois
boolean etat=digitalRead(bouton);
int depart=millis();
while (etat==LOW){
delay(10);
fin=millis();
etat=digitalRead(bouton);
}
tempo=fin-depart;
}
void fincycle(){
boolean etat=HIGH;
while (etat==HIGH){ //le second appui lance un nombre de clignotements égal à la durée en secondes
etat=digitalRead(bouton);
delay(50);
//Serial.print(etat2);
}
int eclats=tempo/1000;
Serial.println(eclats);
for( int i=0;i
delay(600);
digitalWrite(led,LOW);
delay(100);
}
debutcycle=LOW; //le cycle est terminé
}
aide mémoire
modele fonction
lit un bouton et allume une led au travers d'une fonction allumage(), qui retourne 0/1 si le bouton est appuyé
const int bouton=3;
const int led=13;
boolean truc;
void setup(){
pinMode(bouton,INPUT_PULLUP);
digitalWrite(bouton,HIGH);
pinMode(led,OUTPUT);
digitalWrite(led,LOW);
}
void loop(){
if (allumage()){ // si bouton appuyé, on allume
digitalWrite(led,HIGH);
delay (1500);//pendant 1.5s
digitalWrite(led,LOW);
}
}
boolean allumage(){ //retourne low high selon l'état du bouton
boolean etat=digitalRead(bouton);
if (etat==LOW){
truc=HIGH;
}
else {
truc=LOW;
}
return truc;
}