Cours:ArduinoPlaqueEssaisCorrection
Sommaire
Mesure d'une résistance
Valeur normalisée
Valeurs de la série E12 associée
Le programme C pur et dur :
#include <stdio.h>
int valeurs[13]={30,36,44,53,64}; // 1023.Rm/(Rm+R)
int e12[13]={10,12,15,18,22,27,33,39,47,56,68,82,100};
main() {
int i,can,distanceMINI=1024,distance,numeroCase;
for (i=0;i<13;i++) {
valeurs[i]=1023*e12[i]/(330+e12[i]);
printf("%d ",valeurs[i]);
}
printf("\n");
can = 62;
for (i=0;i<13;i++) {
distance = can - valeurs[i];
if (distance <0) distance = -distance;
if (distance < distanceMINI) {
distanceMINI = distance;
numeroCase = i;
} // if
} // for
printf("numero de case tableau : %d\n",numeroCase);
return 0;
}
m'a donné les valeurs précalculées suivantes :
30 35 44 52 63 77 93 108 127 148 174 203 237
Les arrondis sont systématiquement fait par défaut !
Affichage du code des couleurs
Programme non testé en salle mais qui se compile :
const char analogPin = A0;
int valeurs[13]={30,36,44,53,64,77,93,108,127,148,203,237}; // 1023.Rm/(Rm+R)
void setup() {
// a compléter
Serial.begin(9600);
}
void loop() {
int can,distanceMINI=1024,distance;
unsigned char i,numeroCase;
// lecture de la tension sur la patte "analogPin"
can = analogRead(analogPin);
// recherche du numero de case dans le tableau
for (i=0;i<13;i++) {
distance = can - valeurs[i];
if (distance <0) distance = -distance;
if (distance < distanceMINI) {
distanceMINI = distance;
numeroCase = i;
} // if
} // for
// sortie sur la liaison série à compléter
Serial.println(numeroCase,DEC);
// sortie de la valeur normalisée
switch(numeroCase) {
case 0 : Serial.println("Marron Noir Orange");break;
case 1 : Serial.println("Marron Rouge Orange");break;
case 2 : Serial.println("Marron Vert Orange");break;
case 3 : Serial.println("Marron Gris Orange");break;
case 4 : Serial.println("Rouge Rouge Orange");break;
case 5 : Serial.println("Rouge Violet Orange");break;
case 6 : Serial.println("Orange Orange Orange");break;
case 7 : Serial.println("Orange Blanc Orange");break;
case 8: Serial.println("Jaune Violet Orange");break;
case 9 : Serial.println("Vert Bleu Orange");break;
case 10 : Serial.println("Bleu Gris Orange");break;
case 11 : Serial.println("Gris Rouge Orange");break;
case 12 : Serial.println("Marron Noir Jaune");break;
}
// attente d'une seconde
delay(1000);
}
Affichage du code des couleurs(Version avec le shield)
On a modifier les valeurs. C'est maintenant de 1000R à 10k, à cause de la résistance R qui vaut 10k
const char analogPin = A5;
int valeurs[13]={93,109,133,156,184,217,253,287,327,367,414,460,511}; // 1023.Rm/(Rm+R)
void setup() {
// a compléter
Serial.begin(9600);
pinMode(5,OUTPUT);
delay(10);
digitalWrite(5,HIGH);
}
void loop() {
int can,distanceMINI=1024,distance;
unsigned char i,numeroCase;
// lecture de la tension sur la patte "analogPin"
can = analogRead(analogPin);
Serial.print(can);Serial.print(" - ");
// recherche du numero de case dans le tableau
for (i=0;i<13;i++) {
distance = can - valeurs[i];
if (distance <0) distance = -distance;
if (distance < distanceMINI) {
distanceMINI = distance;
numeroCase = i;
} // if
} // for
// sortie sur la liaison série à compléter
Serial.print(numeroCase,DEC);Serial.print(" : ");
// sortie de la valeur normalisée
switch(numeroCase) {
case 0 : Serial.println("Marron Noir Rouge");break;
case 1 : Serial.println("Marron Rouge Rouge");break;
case 2 : Serial.println("Marron Vert Rouge");break;
case 3 : Serial.println("Marron Gris Rouge");break;
case 4 : Serial.println("Rouge Rouge Rouge");break;
case 5 : Serial.println("Rouge Violet Rouge");break;
case 6 : Serial.println("Orange Orange Rouge");break;
case 7 : Serial.println("Orange Blanc Rouge");break;
case 8: Serial.println("Jaune Violet Rouge");break;
case 9 : Serial.println("Vert Bleu Rouge");break;
case 10 : Serial.println("Bleu Gris Rouge");break;
case 11 : Serial.println("Gris Rouge Rouge");break;
case 12 : Serial.println("Marron Noir Orange");break;
}
// attente d'une seconde
delay(1000);
}