Outils pour utilisateurs

Outils du site


synth_as

TP Synthèse AS SUJET A

Dans la suite vous sauvegarderez le sketch (fichier) arduino dans le sketchbook de l'utilisateur (répertoire par défaut) en utilisant votre nom de famille comme nom de fichier.

Dans un premier temps, relever les adresses des composants PCF8574 de la carte telles que configurées par les cavaliers (ne pas modifier la configuration des cavaliers).

Dans l'IDE Arduino, compléter le fichier suivant avec :

  • Les adresses relevés pour les composants PCF8574.
  • Le comportement décrit dans la fonction loop.

Faire valider en séance :

  • La réception d'une valeur hexa et son affichage sur les leds
  • L'émission de la valeur hexa codée par les interrupteurs
#include <Wire.h>
 
 
#define SLAVE_ADDR_8574_A 0x00 
#define SLAVE_ADDR_8574_B 0x00
 
//////////////////////////////////////////
char readPort8574(char addr, char * ptr_value)
{
    Wire.requestFrom((byte)addr, (byte)1);// demande la lecture d'1 octet depuis l'adresse du pérpiphérique
    if (Wire.available()==1) //si l'octet est disponible
    {
        (* ptr_value) = Wire.read(); // lire l'octet
        return 0;
    }
    else
    {
        (* ptr_value) =0; //valeur par défaut si le composant n'a pas acquité
        return -1;
    }
}
//////////////////////////////////////////
char writePort8574(char addr, char value)
{
    Wire.beginTransmission((byte)addr);//démarre la transmission avec l'adresse du pérpiphérique
    Wire.write((byte)value);     //envoie la donnée
    if (Wire.endTransmission()==0)      //stoppe la transmission
        return 0;
    else
        return -1;
}
 
 
/////////////////////////////////////////////////////////////////
//fonction de conversion qui traite le tableau pointé par ascii contenant une chaine de 2 caractères ascii correspondants à une valeur hexadécimale. La valeur convertie est rangée à l'adresse hex (paramètre en sortie). La fonction retourne 1 en cas de réussite de la conversion et 0 en cas d'échec.
char ascii_to_hex(char * ascii, char * hex){
  int i ;
  for(i = 0 ; i < 2 ; i ++){
      char one_ascii = ascii[i];
      if(one_ascii >= '0' && one_ascii <= '9' || one_ascii >= 'A' && one_ascii <= 'F'){
        (*hex) = (*hex) << 4 ;
        if(one_ascii >= '0' && one_ascii <= '9') 
             one_ascii -= '0';
        else 
             one_ascii -= ('A' - 10) ;
        (*hex) |= (one_ascii & 0x0F);
      }else{
        return -1 ;
      }
  }
  return 1 ;
}
/////////////////////////////////////////////////////////////////
//fonction de conversion qui remplie le tableau pointé par ascii avec une chaine de 2 caractères ascii correspondants à la valeur hexadécimale hex. La fonction retourne toujours 1.
char hex_to_ascii(char * ascii, char hex){
  int i ;
  for(i = 0 ; i < 2 ; i ++){
      char one_hex = ((hex >> (4 - (i*4))) & 0x0F);
      if(one_hex < 10) ascii[i] = one_hex + '0' ;
      else ascii[i] = (one_hex - 10) + 'A';
  }
  ascii[2]='\0';
  return 1 ;
 
}
///////////////////////////////////////////////////////////::
void setup() {
  Serial.begin(9600);
  Wire.begin();        // joindre le bus i2c en tant que maître
  writePort8574( SLAVE_ADDR_8574_B , 0xff); //configure le composant B en entrée
}
///////////////////////////////////////////////////////////::
char tab_reception[16];
char taille_tab_reception = 0 ;
char tab_emission[16];
char value ;
///////////////////////////////////////////////////////////::
void loop() {
  // Dans un premier temps, relever les adresses des composants PCF8574 de la carte par la lecture des cavaliers et éditer les #define SLAVE_ADDR_8574_A et SLAVE_ADDR_8574_B
 
  // Si un caractère est disponible en lecture sur l'UART
    // Ajouter le caractère au tableau tab_reception
    // Incrémenter taille_tab_reception
    // Si taille taille_tab_reception est supérieure ou égale à 2
        // Convertir le contenu de tab_réception en hexa et écrire le résultat sur le PCF8574 A
        // remettre taille_tab_reception à zéro 
 
  //Lire le PCF8574 B
  //Convertir la valeur lue en une chaine ascii contenant sa représentation hexadecimale dans le tableau tab_emission
  //Envoyer la chaine ascii sur la laison série
  //Attendre 1s
 
}
synth_as.txt · Dernière modification: 2016/05/24 09:50 par jpiat