Cours:ArduinoPlaqueEssaisCorrection

De troyesGEII
Aller à : navigation, rechercher

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);
}