exercice 1:
Durant 5 secondes, mesurer la valeur
d’une photorésistance (indiquer cette valeur toutes les 500 ms sur le moniteur
série).
Câbler la photorésistance pour que la valeur
augmente lorsque la luminosité augmente.
Indiquer ensuite les valeurs min, max
et moyenne (précision 2 chiffres après la virgule) des 10 mesures obtenues.
Choisir la résistance pour obtenir une
bonne variation de la tension analogique.
solution :
int valeurmax=0; int valeurmin=1023; long somme=0; int valeur=0; float moyenne=0; char nombremesure=0; void setup() { Serial.begin(9600); while(millis()<5000) { valeur=analogRead(lumiere); Serial.print("la
valeur photoresistence: \t"); Serial.println(valeur); delay(500); valeurmax=max(valeur,valeurmax); valeurmin=min(valeur,valeurmin); somme=+valeur; nombremesure++; } moyenne=somme/nombremesure; Serial.print("la valeur moyenne:"); Serial.println(moyenne); Serial.print("la valeur max:"); Serial.println(valeurmax); Serial.print("la valeur min:"); Serial.println(valeurmin); } void loop() {} |
exercice 2:
1.
Faire varier l’intensité d’une LED en
fonction de la valeur d’un potentiomètre. Indiquer sur le moniteur série la
valeur utilisée pour commander la LED. Utiliser la fonction map() pour
commander la LED.
solution
int pot = A2; int
valeurLed; int valeurpot; void setup() {Serial.begin(9600); pinMode(Led,
OUTPUT); pinMode(pot,
INPUT); } void loop() {
valeurpot = analogRead(pot);
valeurLed = map(valeurpot,0,1023,0,255); analogWrite(Led,
valeurLed); Serial.print("valeurPOt:\t"); Serial.println(valeurpot); delay(500); } |
1.
Remplacer le potentiomètre par un
joystick (VMA315). La luminosité de la LED variera en fonction du déplacement selon
l’axe des X si BP = 1 et en fonction de l’axe des Y si BP = 0.
const int led
= 5; const int
joystickx = A0; const int
joysticky = A1; int x; int y; int vled; void setup(){ Serial.begin(9600); pinMode(led, OUTPUT); pinMode(joystickx, INPUT_PULLUP); pinMode(joysticky, INPUT_PULLUP); pinMode(joysticksw, INPUT_PULLUP); } void loop(){ x = analogRead(joystickx); vled = map(x, 0, 1023, 0, 255); analogWrite(led, vled); y = analogRead(joysticky); vled = map(y, 0, 1023, 0, 255); analogWrite(led, vled); Serial.print("___Valeur
led:____"); Serial.println(vled); } |
Modification :
Utiliser une LED RGB. La LED s’illuminera dans 4 couleurs différentes en
fonction du déplacement du joystick (exemple : X positif :
rouge ; Y négatif : jaune, … ) .
#define rouge 11 #define vert 10 #define bleu 9 #define Joy_X A0 #define Joy_Y A1 #define BP 13 const char led_1 = 8; long previousMillis = 0; long currentMillis = 0; //current signifie courant bool etatLed = 0; void setup() { pinMode (rouge, OUTPUT); pinMode (vert, OUTPUT); pinMode (bleu, OUTPUT); pinMode (Joy_X,INPUT); pinMode (Joy_Y,INPUT); pinMode (BP, INPUT_PULLUP); Serial.begin(9600); pinMode(led_1, OUTPUT); digitalWrite(led_1, HIGH); delay(500); } void loop (){ currentMillis = millis(); if((currentMillis -
previousMillis)> 1000) { previousMillis =
currentMillis; if (etatLed == LOW) { etatLed = HIGH; } else etatLed = LOW; digitalWrite(led_1,
etatLed); } int BP_on = digitalRead(BP); float valeurX =
analogRead(Joy_X); float valeurY = analogRead(Joy_Y); float output_valeurX = map (valeurX,
0,1023,-255,255); float output_valeurY = map (valeurY,
0,1023,-255,255); if (BP_on == LOW) { if(output_valeurX>0) {
analogWrite(rouge,output_valeurX); } else { analogWrite(vert,output_valeurX); }
Serial.println(output_valeurX); delay(50); } else { if (output_valeurY>0) {
analogWrite(bleu,output_valeurY); } else {
analogWrite(vert,output_valeurY); analogWrite(rouge,output_valeurY); }
Serial.println(output_valeurY); delay(50); } }
|
3. Remplacer
le potentiomètre par la mesure de l’intensité lumineuse via une photodiode
(réaliser une phase de calibration durant 5 secondes pour déterminer la plage
de variation de l’entrée analogique). Pour vérifier l’intervalle de variation
de la photodiode, indiquer la valeur de sortie de l’ampli op sur le moniteur
série durant la phase de calibration.
const char led=3; int valeurled; int valeurphoto=LOW; void setup() {
Serial.begin(9600);
pinMode(led,OUTPUT);
pinMode(photo,INPUT); } void loop() {
valeurphoto=analogRead(photo);
valeurled=map(valeurphoto,0,1023,0,255);
analogWrite(led,valeurled);
Serial.write("valeur photodiode");
Serial.println(valeurphoto);
Serial.write("valeur led");
Serial.println(valeurled); delay(500); }
|
Exercice 6
Utilisation de la fonction millis().
Faire clignoter une LED à la fréquence de 1 Hz sans utiliser la fonction delay(), c’est-à-dire sans bloquer le programme dans une boucle !
int led=2; int ledState=LOW; long preMillis=0; void setup() { pinMode(led,OUTPUT); } void loop() { if(millis()-preMillis>1000){ preMillis=millis(); if(ledState==LOW) { ledState=HIGH;} else { ledState=LOW;} digitalWrite(led,ledState); }} |
int
led1=2; int
valeurpot=0; int
valeurled=0; int
led_pin=LOW; int
led0=4; long
preMillis=0; void
setup() { pinMode(led0,OUTPUT); Serial.begin(9600); pinMode(pot,INPUT); pinMode(led1,OUTPUT); } void
loop() { if( millis()-preMillis>1000){ preMillis=millis(); if(led_pin==LOW) { led_pin=HIGH;} else { led_pin=LOW;} digitalWrite(led0,led_pin); } valeurpot= analogRead(pot); valeurled=map(valeurpot,0,1023,0,255); analogWrite(led1,valeurled); Serial.print("la
valeur de potentiometre :"); Serial.println(valeurpot); Serial.print("la
valeur de Led1 :"); Serial.println(valeurled); delay(50); } |
Commentaires
Enregistrer un commentaire
Nous pouvons toujours vous aider et résoudre les exercices pour vous, il suffit de demander.