TR

Dependencies:   mbed

Committer:
ThomasMargottin
Date:
Thu May 19 12:30:54 2016 +0000
Revision:
0:cf466bde5334
MARGOTTIN;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ThomasMargottin 0:cf466bde5334 1 #include "mbed.h" //définition de la librairie Mbed
ThomasMargottin 0:cf466bde5334 2
ThomasMargottin 0:cf466bde5334 3 #define THERM 0x12 //définition de l'ID du thermomètre
ThomasMargottin 0:cf466bde5334 4 #define DIGIT 0x0F //définition de l'ID du Digits de température
ThomasMargottin 0:cf466bde5334 5 #define METER 0x10 //définition de l'ID du Meter de température
ThomasMargottin 0:cf466bde5334 6 #define ADDR 0x90 //définition de l'adresse du capteur à 90h
ThomasMargottin 0:cf466bde5334 7 #define DIGIT1 0x11 //défintiion de l'ID du Digits de tension
ThomasMargottin 0:cf466bde5334 8 #define DIGIT2 0x23 // défintion de l'ID du Digits de courant
ThomasMargottin 0:cf466bde5334 9 #define DIGITS 0x32 //définition de l'ID du Digits de puissance
ThomasMargottin 0:cf466bde5334 10
ThomasMargottin 0:cf466bde5334 11 I2C acq(p28, p27); //déclaration de l'objet acq de type I2C
ThomasMargottin 0:cf466bde5334 12 Serial pc(USBTX, USBRX); //déclaration de la liaison PC série
ThomasMargottin 0:cf466bde5334 13 Serial afficheur(p9,p10); //déclaration de la liaison afficheur série
ThomasMargottin 0:cf466bde5334 14 Serial Xbee (p13,p14); //déclaration de la liaison avec le module Xbee
ThomasMargottin 0:cf466bde5334 15
ThomasMargottin 0:cf466bde5334 16 int cpt = 0, cks, flag = 0, varID,fin_trame=0; //initialisation du compteur de trame, du checksum, du flag et de l'ID de trame en entier
ThomasMargottin 0:cf466bde5334 17 char Trame[13], carac; //initialisation du tableau de trame et des valeurs reçus en caractère
ThomasMargottin 0:cf466bde5334 18 float Ueff, Ieff, P, compteur; //initilaisation des grandeurs à mesurer en flottants
ThomasMargottin 0:cf466bde5334 19 uint16_t Temp16, Temp16b, Temp16c; //initialisation de la variable de calcul des grandeurs en entier sur 16 bits
ThomasMargottin 0:cf466bde5334 20 uint32_t Temp32, Temp32a, Temp32b, Temp32c, Temp32d; //initialisation du compteur d'énergie en entier sur 32bits
ThomasMargottin 0:cf466bde5334 21
ThomasMargottin 0:cf466bde5334 22 DigitalOut myled1(LED1); //déclaration de la LED1
ThomasMargottin 0:cf466bde5334 23 DigitalOut myled2(LED2); //déclaration de la LED2
ThomasMargottin 0:cf466bde5334 24 DigitalOut myled3(LED3); //déclaration de la LED3
ThomasMargottin 0:cf466bde5334 25 DigitalOut myled4(LED4); //déclaration de la LED4
ThomasMargottin 0:cf466bde5334 26
ThomasMargottin 0:cf466bde5334 27 void commande_thermometre(char index, char valeur); //prototype de la fonction de commande du thermomètre
ThomasMargottin 0:cf466bde5334 28 void commande_digits(char index, float valeur); //prototype de la fonction de commande du Digits de température
ThomasMargottin 0:cf466bde5334 29 void commande_digits1(char index, float valeur); //prototype de la fonction de commande du Digits de tension
ThomasMargottin 0:cf466bde5334 30 void commande_digits2(char index, float valeur); //prototype de la fonction de commande du Digits de courant
ThomasMargottin 0:cf466bde5334 31 void commande_digits3(char index, float valeur); //prototype de la fonction de commande du Digits de puissance
ThomasMargottin 0:cf466bde5334 32 void commande_meter (char index, char valeur); //prototype de la fonction de commande du Meters de température
ThomasMargottin 0:cf466bde5334 33 char conv_tempC; //conversion de la température pour afficher sur le Display
ThomasMargottin 0:cf466bde5334 34
ThomasMargottin 0:cf466bde5334 35
ThomasMargottin 0:cf466bde5334 36 void led() //fonction du chenillard de LED
ThomasMargottin 0:cf466bde5334 37 {
ThomasMargottin 0:cf466bde5334 38 myled1 = 1; //activation de la LED1
ThomasMargottin 0:cf466bde5334 39 wait(0.05); //attente de 50ms
ThomasMargottin 0:cf466bde5334 40 myled1 = 0; //désactivation de la LED1
ThomasMargottin 0:cf466bde5334 41 wait(0.05); //attente de 50ms
ThomasMargottin 0:cf466bde5334 42
ThomasMargottin 0:cf466bde5334 43 myled2 = 1; //activation de la LED2
ThomasMargottin 0:cf466bde5334 44 wait(0.05); //attente de 50ms
ThomasMargottin 0:cf466bde5334 45 myled2 = 0; //désactivation de la LED2
ThomasMargottin 0:cf466bde5334 46 wait(0.05); //attente de 50ms
ThomasMargottin 0:cf466bde5334 47
ThomasMargottin 0:cf466bde5334 48 myled3 = 1; //activation de la LED3
ThomasMargottin 0:cf466bde5334 49 wait(0.05); //attente de 50ms
ThomasMargottin 0:cf466bde5334 50 myled3 = 0; //désactivation de la LED3
ThomasMargottin 0:cf466bde5334 51 wait(0.05); //attente de 50ms
ThomasMargottin 0:cf466bde5334 52
ThomasMargottin 0:cf466bde5334 53 myled4 = 1; //activation de la LED4
ThomasMargottin 0:cf466bde5334 54 wait(0.05); //attente de 50ms
ThomasMargottin 0:cf466bde5334 55 myled4 = 0; //désactivation de la LED4
ThomasMargottin 0:cf466bde5334 56 wait(0.05); //attente de 50ms
ThomasMargottin 0:cf466bde5334 57
ThomasMargottin 0:cf466bde5334 58 myled3 = 1; //activation de la LED3
ThomasMargottin 0:cf466bde5334 59 wait(0.05); //attente de 100ms
ThomasMargottin 0:cf466bde5334 60 myled3 = 0; //désactivation de la LED3
ThomasMargottin 0:cf466bde5334 61 wait(0.05); //attente de 100ms
ThomasMargottin 0:cf466bde5334 62
ThomasMargottin 0:cf466bde5334 63 myled2 = 1; //activation de la LED2
ThomasMargottin 0:cf466bde5334 64 wait(0.05); //attente de 50ms
ThomasMargottin 0:cf466bde5334 65 myled2 = 0; //désactivation de la LED2
ThomasMargottin 0:cf466bde5334 66 wait(0.05); //attente de 50ms
ThomasMargottin 0:cf466bde5334 67
ThomasMargottin 0:cf466bde5334 68 myled1 = 1; //activation de la LED1
ThomasMargottin 0:cf466bde5334 69 wait(0.05); //attente de 50ms
ThomasMargottin 0:cf466bde5334 70 myled1 = 0; //désactivation de la LED1
ThomasMargottin 0:cf466bde5334 71 wait(0.05); //attente de 50ms
ThomasMargottin 0:cf466bde5334 72 }
ThomasMargottin 0:cf466bde5334 73
ThomasMargottin 0:cf466bde5334 74 void reception() //fonction d'interruption de la liaison série
ThomasMargottin 0:cf466bde5334 75 {
ThomasMargottin 0:cf466bde5334 76 NVIC_DisableIRQ(UART2_IRQn); //inhibition de la liaison série
ThomasMargottin 0:cf466bde5334 77 while(Xbee.readable()) //tant que le Xbee est en train de lire une valeur
ThomasMargottin 0:cf466bde5334 78 {
ThomasMargottin 0:cf466bde5334 79 carac = Xbee.getc(); //attente d'un caractère par le Xbee
ThomasMargottin 0:cf466bde5334 80 }
ThomasMargottin 0:cf466bde5334 81
ThomasMargottin 0:cf466bde5334 82 if (carac == 0x55) //si le caractère attendu vaut 55h
ThomasMargottin 0:cf466bde5334 83 {
ThomasMargottin 0:cf466bde5334 84 flag = 1; //activation du flag à 1
ThomasMargottin 0:cf466bde5334 85 }
ThomasMargottin 0:cf466bde5334 86
ThomasMargottin 0:cf466bde5334 87 if(flag == 1) //si le flag est passé à 1
ThomasMargottin 0:cf466bde5334 88 {
ThomasMargottin 0:cf466bde5334 89 Trame[cpt] = carac; //le tableau de trame prend la valeur de chaque caractère reçu
ThomasMargottin 0:cf466bde5334 90 cpt = cpt + 1 ; //incrémentation du compteur de trame
ThomasMargottin 0:cf466bde5334 91 pc.printf("cpt: %d\n\r", cpt); //affichage de la valeur du compteur sur le pc
ThomasMargottin 0:cf466bde5334 92 }
ThomasMargottin 0:cf466bde5334 93
ThomasMargottin 0:cf466bde5334 94 if (cpt > 11) //si le compteur est passé à 12
ThomasMargottin 0:cf466bde5334 95 {
ThomasMargottin 0:cf466bde5334 96 fin_trame = 1;
ThomasMargottin 0:cf466bde5334 97 cpt = 0; //remise à zéro du compteur de trame
ThomasMargottin 0:cf466bde5334 98 }
ThomasMargottin 0:cf466bde5334 99 NVIC_EnableIRQ(UART2_IRQn); //réactivation de la liaison série
ThomasMargottin 0:cf466bde5334 100 }
ThomasMargottin 0:cf466bde5334 101
ThomasMargottin 0:cf466bde5334 102 void traitement_trame(void)
ThomasMargottin 0:cf466bde5334 103 {
ThomasMargottin 0:cf466bde5334 104 pc.printf("Trame : %d\n\r", Trame[0]); //affichage du 1er caractère reçu sur le pc
ThomasMargottin 0:cf466bde5334 105 pc.printf("Trame : %d\n\r", Trame[1]); //affichage du 2ème caractère reçu sur le pc
ThomasMargottin 0:cf466bde5334 106 pc.printf("Trame : %d\n\r", Trame[2]); //affichage du 3ème caractère reçu sur le pc
ThomasMargottin 0:cf466bde5334 107 pc.printf("Trame : %d\n\r", Trame[3]); //affichage du 4ème caractère reçu sur le pc
ThomasMargottin 0:cf466bde5334 108 pc.printf("Trame : %d\n\r", Trame[4]); //affichage du 5ème caractère reçu sur le pc
ThomasMargottin 0:cf466bde5334 109 pc.printf("Trame : %d\n\r", Trame[5]); //affichage du 6ème caractère reçu sur le pc
ThomasMargottin 0:cf466bde5334 110 pc.printf("Trame : %d\n\r", Trame[6]); //affichage du 7ème caractère reçu sur le pc
ThomasMargottin 0:cf466bde5334 111 pc.printf("Trame : %d\n\r", Trame[7]); //affichage du 8ème caractère reçu sur le pc
ThomasMargottin 0:cf466bde5334 112 pc.printf("Trame : %d\n\r", Trame[8]); //affichage du 9ème caractère reçu sur le pc
ThomasMargottin 0:cf466bde5334 113 pc.printf("Trame : %d\n\r", Trame[9]); //affichage du 10ème caractère reçu sur le pc
ThomasMargottin 0:cf466bde5334 114 pc.printf("Trame : %d\n\r", Trame[10]); //affichage du 11ème caractère reçu sur le pc
ThomasMargottin 0:cf466bde5334 115 pc.printf("Trame : %d\n\r", Trame[11]); //affichage du 12ème caractère reçu sur le pc
ThomasMargottin 0:cf466bde5334 116 pc.printf("Trame : %d\n\r", Trame[12]); //affichage du 13ème caractère reçu sur le pc
ThomasMargottin 0:cf466bde5334 117
ThomasMargottin 0:cf466bde5334 118 varID = Trame[1]; //l'ID de la trame est enregistré en 2ème caractère
ThomasMargottin 0:cf466bde5334 119
ThomasMargottin 0:cf466bde5334 120 Temp16 = Trame[3]; //la valeur enregistre le 4ème caractère
ThomasMargottin 0:cf466bde5334 121 Temp16 = Temp16 << 8; //décalage de 8 vers la gauche de cette valeur
ThomasMargottin 0:cf466bde5334 122 Temp16 = Temp16 + Trame[2]; //ajout du 3ème caractère reçu à cette valeur
ThomasMargottin 0:cf466bde5334 123 Ueff = Temp16;
ThomasMargottin 0:cf466bde5334 124 Ueff = Ueff / 100; //division de cette par 100 pour récupérer la valeur réelle
ThomasMargottin 0:cf466bde5334 125 pc.printf("Ueff = %f V\n\r",Ueff); //affichage de la valeur de Ueff sur le pc
ThomasMargottin 0:cf466bde5334 126
ThomasMargottin 0:cf466bde5334 127 Temp16b = Trame[5]; //la valeur enregistre le 6ème caractère
ThomasMargottin 0:cf466bde5334 128 Temp16b = Temp16b << 8; //décalage de 8 vers la gauche de cette valeur
ThomasMargottin 0:cf466bde5334 129 Temp16b = Temp16b + Trame[4]; //ajout du 5ème caractère reçu à cette valeur
ThomasMargottin 0:cf466bde5334 130 Ieff = Temp16b;
ThomasMargottin 0:cf466bde5334 131 Ieff = Ieff / 100; //division de cette par 100 pour récupérer la valeur réelle
ThomasMargottin 0:cf466bde5334 132 pc.printf("Ieff = %f A\n\r",Ieff); //affichage de la valeur de Ieff sur le pc
ThomasMargottin 0:cf466bde5334 133
ThomasMargottin 0:cf466bde5334 134 Temp16c = Trame[7]; //la valeur enregistre le 8ème caractère
ThomasMargottin 0:cf466bde5334 135 Temp16c = Temp16c << 8; //décalage de 8 vers la gauche de cette valeur
ThomasMargottin 0:cf466bde5334 136 Temp16c = Temp16c + Trame[6]; //ajout du 7ème caractère reçu à cette valeur
ThomasMargottin 0:cf466bde5334 137 P = Temp16c;
ThomasMargottin 0:cf466bde5334 138 P = P / 100; //division de cette par 100 pour récupérer la valeur réelle
ThomasMargottin 0:cf466bde5334 139 pc.printf("P = %f W\n\r\n",P); //affichage de la valeur de P sur le pc
ThomasMargottin 0:cf466bde5334 140
ThomasMargottin 0:cf466bde5334 141 Temp32a = Trame[11]; //la valeur enregistre le 12ème caractère
ThomasMargottin 0:cf466bde5334 142 Temp32a = Temp32a << 24 ; //décalage de 24 vers la gauche de cette valeur
ThomasMargottin 0:cf466bde5334 143 Temp32b = Trame[10]; //la valeur enregistre le 11ème caractère
ThomasMargottin 0:cf466bde5334 144 Temp32b = Temp32b << 16 ; //décalage de 16 vers la gauche de cette valeur
ThomasMargottin 0:cf466bde5334 145 Temp32c = Trame[9]; //la valeur enregistre le 10ème caractère
ThomasMargottin 0:cf466bde5334 146 Temp32c = Temp32c << 8 ; //décalage de 8 vers la gauche de cette valeur
ThomasMargottin 0:cf466bde5334 147 Temp32d = Trame[8]; //la valeur enregistre le 9ème caractère
ThomasMargottin 0:cf466bde5334 148 Temp32 = Temp32a + Temp32b + Temp32c + Temp32d; //ajout de tous ces caractère à la valeur finale
ThomasMargottin 0:cf466bde5334 149 compteur = Temp32; //enregistrement de cette valeur dans le compteur d'énergie
ThomasMargottin 0:cf466bde5334 150 pc.printf("Energie = %f Wh\n\r\n",compteur); //affichage de la valeur du compteur d'énergie sur le pc
ThomasMargottin 0:cf466bde5334 151
ThomasMargottin 0:cf466bde5334 152 cks = (varID + Ueff + Ieff + P + compteur)/256; //calcul du checksum de la trame
ThomasMargottin 0:cf466bde5334 153 Trame[12] = cks; //enregistrement de ce checksum dans le dernier caractère de la trame
ThomasMargottin 0:cf466bde5334 154 }
ThomasMargottin 0:cf466bde5334 155
ThomasMargottin 0:cf466bde5334 156 int main() //fonction principale
ThomasMargottin 0:cf466bde5334 157 {
ThomasMargottin 0:cf466bde5334 158 led(); //appel de la fonction de LEDs
ThomasMargottin 0:cf466bde5334 159
ThomasMargottin 0:cf466bde5334 160 char cmd[2]; //déclaration du tableau de commande cmd de température de 2 octets
ThomasMargottin 0:cf466bde5334 161 float tempC = 0.0; //déclaration de la variable de température Celsius en flottant
ThomasMargottin 0:cf466bde5334 162 cmd[0] = 0xAC; //configuration de l'accès au registre
ThomasMargottin 0:cf466bde5334 163 cmd[1] = 0x02; //configuration de l'accès au registre
ThomasMargottin 0:cf466bde5334 164 acq.write(ADDR, cmd, 2); //écriture de la valeur reçu par le capteur dans cmd[1]
ThomasMargottin 0:cf466bde5334 165 wait(0.5); //attente (de 500ms) de sécurité pour l'écriture de la température dans le registre
ThomasMargottin 0:cf466bde5334 166
ThomasMargottin 0:cf466bde5334 167 cmd[0] = 0xEE; //initialisation de la conversion de la température
ThomasMargottin 0:cf466bde5334 168 acq.write(ADDR, cmd, 1); //écriture de la valeur converti dans cmd[0]
ThomasMargottin 0:cf466bde5334 169 wait(0.01); //attente (de 10ms) de sécurité pour l'écriture de la température dans le registre
ThomasMargottin 0:cf466bde5334 170
ThomasMargottin 0:cf466bde5334 171 Xbee.attach(&reception, RawSerial::RxIrq); //appel de l'interruption de la liaison série si le Xbee reçoit quelque chose
ThomasMargottin 0:cf466bde5334 172
ThomasMargottin 0:cf466bde5334 173 while (1) //boucle infinie
ThomasMargottin 0:cf466bde5334 174 {
ThomasMargottin 0:cf466bde5334 175 led(); //appel de la fonction des LEDs
ThomasMargottin 0:cf466bde5334 176
ThomasMargottin 0:cf466bde5334 177 cmd[0] = 0xAA; //lecture de la dernière valeur de températion converti
ThomasMargottin 0:cf466bde5334 178 acq.write(ADDR, cmd, 1); //écriture de cette valeur dans cmd[0]
ThomasMargottin 0:cf466bde5334 179 acq.read(ADDR, cmd, 2); //lecture de cmd[1] représentant l'octet de poids faible
ThomasMargottin 0:cf466bde5334 180
ThomasMargottin 0:cf466bde5334 181 tempC = cmd[0]; //la variable temp prend la valeur converti de cmd[0]
ThomasMargottin 0:cf466bde5334 182 if(cmd[1] == 128) //si le bit de poids fort de cmd[0] = 1
ThomasMargottin 0:cf466bde5334 183 {
ThomasMargottin 0:cf466bde5334 184 tempC = tempC + 0.5; //on ajoute 0.5 degré à la valeur de temp
ThomasMargottin 0:cf466bde5334 185 }
ThomasMargottin 0:cf466bde5334 186
ThomasMargottin 0:cf466bde5334 187 pc.printf("Temperature : %3.1f C\n\r",tempC); //affichage en Celsius de la température récupérée
ThomasMargottin 0:cf466bde5334 188 wait(0.5); //attente de 500ms entre chaque acquisition de température
ThomasMargottin 0:cf466bde5334 189
ThomasMargottin 0:cf466bde5334 190 if (fin_trame == 1) //si le Xbee a fini de recevoir la trame
ThomasMargottin 0:cf466bde5334 191 {
ThomasMargottin 0:cf466bde5334 192 traitement_trame(); //on entre dans la fonction de traitmeent de la trame
ThomasMargottin 0:cf466bde5334 193 fin_trame = 0; //initialisation de la variable de fin de trame
ThomasMargottin 0:cf466bde5334 194 }
ThomasMargottin 0:cf466bde5334 195
ThomasMargottin 0:cf466bde5334 196 conv_tempC = (char)(tempC); //conversion de la température en caractère pour le Display
ThomasMargottin 0:cf466bde5334 197 commande_thermometre(0x00, conv_tempC); //execution de la fonction de commande du thermomètre
ThomasMargottin 0:cf466bde5334 198 wait(0.1); //attente de 100ms
ThomasMargottin 0:cf466bde5334 199 commande_meter(0x00, conv_tempC); //execution de la fonction de commande du Meter de température
ThomasMargottin 0:cf466bde5334 200 wait(0.1); //attente de 100ms
ThomasMargottin 0:cf466bde5334 201 commande_digits(0x01,tempC); //execution de la fonction de commande du Digit de température
ThomasMargottin 0:cf466bde5334 202 wait(0.1); //attente de 100ms
ThomasMargottin 0:cf466bde5334 203 commande_digits1(0x02,Ueff); //execution de la fonction de commande du Digit de tension
ThomasMargottin 0:cf466bde5334 204 wait(0.1); //attente de 100ms
ThomasMargottin 0:cf466bde5334 205 commande_digits2(0x00,Ieff); //execution de la fonction de commande du Digit de courant
ThomasMargottin 0:cf466bde5334 206 wait(0.1); //attente de 100ms
ThomasMargottin 0:cf466bde5334 207 commande_digits3(0x04,P); //execution de la fonction de commande du Digit de puissance active
ThomasMargottin 0:cf466bde5334 208 wait(0.1); //attente de 100ms
ThomasMargottin 0:cf466bde5334 209 }
ThomasMargottin 0:cf466bde5334 210 }
ThomasMargottin 0:cf466bde5334 211
ThomasMargottin 0:cf466bde5334 212 void commande_thermometre(char index, char valeur) //fonction de la commande du thermomètre
ThomasMargottin 0:cf466bde5334 213 {
ThomasMargottin 0:cf466bde5334 214 char chk; //déclaration de la variable chk pour le calcul du Checksum
ThomasMargottin 0:cf466bde5334 215 afficheur.putc(0x01); //code de commande (WRITE_OBJ)
ThomasMargottin 0:cf466bde5334 216 afficheur.putc(THERM); //objet ID
ThomasMargottin 0:cf466bde5334 217 afficheur.putc(0x00); //objet Index
ThomasMargottin 0:cf466bde5334 218 afficheur.putc(0x00); //value(MSB)
ThomasMargottin 0:cf466bde5334 219 afficheur.putc(valeur); //value(LSB)
ThomasMargottin 0:cf466bde5334 220 chk = 0x01^THERM^0x00^0x00^valeur; //calcul du Checksum
ThomasMargottin 0:cf466bde5334 221 afficheur.putc(chk); //checksum
ThomasMargottin 0:cf466bde5334 222 }
ThomasMargottin 0:cf466bde5334 223
ThomasMargottin 0:cf466bde5334 224 void commande_digits(char index, float valeur) //fonction de la commande du Digit de température
ThomasMargottin 0:cf466bde5334 225 {
ThomasMargottin 0:cf466bde5334 226 char chk; //déclaration de la variable chk pour le calcul du Checksum
ThomasMargottin 0:cf466bde5334 227 char conv_tempC_msb; //conversion du msb de température
ThomasMargottin 0:cf466bde5334 228 uint16_t tempC_lsb; //création d'un entier pour le digit de température sur 16 bits car on dépasse les 8 bits
ThomasMargottin 0:cf466bde5334 229 tempC_lsb = (10 * valeur); //multiplication par 10 de la valeur reçu en température
ThomasMargottin 0:cf466bde5334 230 conv_tempC_msb = tempC_lsb >> 8; //la valeur du MSB correspond à la valeur de la température décalée de 8 bits
ThomasMargottin 0:cf466bde5334 231 afficheur.putc(0x01); //code commande (WRITE_OBJ)
ThomasMargottin 0:cf466bde5334 232 afficheur.putc(DIGIT); //objet ID
ThomasMargottin 0:cf466bde5334 233 afficheur.putc(index); //objet Index
ThomasMargottin 0:cf466bde5334 234 afficheur.putc(conv_tempC_msb); //value (MSB)
ThomasMargottin 0:cf466bde5334 235 afficheur.putc(tempC_lsb); //value (LSB)
ThomasMargottin 0:cf466bde5334 236 chk = 0x01^DIGIT^index^conv_tempC_msb^tempC_lsb; //calcul du Checksum
ThomasMargottin 0:cf466bde5334 237 afficheur.putc(chk); //checksum
ThomasMargottin 0:cf466bde5334 238 }
ThomasMargottin 0:cf466bde5334 239
ThomasMargottin 0:cf466bde5334 240 void commande_meter(char index, char valeur) //fonction de la commande du Meter de température
ThomasMargottin 0:cf466bde5334 241 {
ThomasMargottin 0:cf466bde5334 242 char chk; //déclaration de la variable chk pour le calcul du Checksum
ThomasMargottin 0:cf466bde5334 243 afficheur.putc(0x01); //code commande (WRITE_OBJ)
ThomasMargottin 0:cf466bde5334 244 afficheur.putc(METER); //objet ID
ThomasMargottin 0:cf466bde5334 245 afficheur.putc(index); //objet Index
ThomasMargottin 0:cf466bde5334 246 afficheur.putc(0x00); //value (MSB)
ThomasMargottin 0:cf466bde5334 247 afficheur.putc(valeur); //value (LSB)
ThomasMargottin 0:cf466bde5334 248 chk = 0x01^METER^index^0x00^valeur; //calcul du Checksum
ThomasMargottin 0:cf466bde5334 249 afficheur.putc(chk); //checksum
ThomasMargottin 0:cf466bde5334 250 }
ThomasMargottin 0:cf466bde5334 251
ThomasMargottin 0:cf466bde5334 252 void commande_digits1(char index, float valeur) //fonction de la commande du Digit de tension
ThomasMargottin 0:cf466bde5334 253 {
ThomasMargottin 0:cf466bde5334 254 char chk; //déclaration de la variable chk pour le calcul du Checksum
ThomasMargottin 0:cf466bde5334 255 char conv_Ueff_msb; //conversion du msb
ThomasMargottin 0:cf466bde5334 256 uint16_t Ueff_lsb; //création d'un entier pour le digit de tension sur 16 bits car on dépasse les 8 bits
ThomasMargottin 0:cf466bde5334 257
ThomasMargottin 0:cf466bde5334 258 Ueff_lsb = (10 * valeur); //multiplication par 10 de la valeur reçu en tension
ThomasMargottin 0:cf466bde5334 259 conv_Ueff_msb = Ueff_lsb >> 8; //la valeur du MSB correspond à la valeur de la tension décalée de 8 bits
ThomasMargottin 0:cf466bde5334 260 afficheur.putc(0x01); //code commande (WRITE_OBJ)
ThomasMargottin 0:cf466bde5334 261 afficheur.putc(DIGIT); //objet ID
ThomasMargottin 0:cf466bde5334 262 afficheur.putc(index); //objet Index
ThomasMargottin 0:cf466bde5334 263 afficheur.putc(conv_Ueff_msb); //value (MSB)
ThomasMargottin 0:cf466bde5334 264 afficheur.putc(Ueff_lsb); //value (LSB)
ThomasMargottin 0:cf466bde5334 265 chk = 0x01^DIGIT^index^conv_Ueff_msb^Ueff_lsb; //calcul du Checksum
ThomasMargottin 0:cf466bde5334 266 afficheur.putc(chk); //checksum
ThomasMargottin 0:cf466bde5334 267 }
ThomasMargottin 0:cf466bde5334 268
ThomasMargottin 0:cf466bde5334 269 void commande_digits2(char index, float valeur) //fonction de la commande du Digit de courant
ThomasMargottin 0:cf466bde5334 270 {
ThomasMargottin 0:cf466bde5334 271 char chk; //déclaration de la variable chk pour le calcul du Checksum
ThomasMargottin 0:cf466bde5334 272 char conv_Ieff_msb; //conversion du msb
ThomasMargottin 0:cf466bde5334 273 uint16_t Ieff_lsb; //création d'un entier pour le digit de courant sur 16 bits car on dépasse les 8 bits
ThomasMargottin 0:cf466bde5334 274 Ieff_lsb = (10 * valeur); //multiplication par 10 de la valeur reçu en courant
ThomasMargottin 0:cf466bde5334 275 conv_Ieff_msb = Ieff_lsb >> 8; //la valeur du MSB correspond à la valeur du courant décalée de 8 bits
ThomasMargottin 0:cf466bde5334 276 afficheur.putc(0x01); //code commande (WRITE_OBJ)
ThomasMargottin 0:cf466bde5334 277 afficheur.putc(DIGIT); //objet ID
ThomasMargottin 0:cf466bde5334 278 afficheur.putc(index); //objet Index
ThomasMargottin 0:cf466bde5334 279 afficheur.putc(conv_Ieff_msb); //value (MSB)
ThomasMargottin 0:cf466bde5334 280 afficheur.putc(Ieff_lsb); //value (LSB)
ThomasMargottin 0:cf466bde5334 281 chk = 0x01^DIGIT^index^conv_Ieff_msb^Ieff_lsb; //calcul du Checksum
ThomasMargottin 0:cf466bde5334 282 afficheur.putc(chk); //checksum
ThomasMargottin 0:cf466bde5334 283 }
ThomasMargottin 0:cf466bde5334 284
ThomasMargottin 0:cf466bde5334 285 void commande_digits3(char index, float valeur) //fonction de la commande du Digit
ThomasMargottin 0:cf466bde5334 286 {
ThomasMargottin 0:cf466bde5334 287 char chk; //déclaration de la variable chk pour le calcul du Checksum
ThomasMargottin 0:cf466bde5334 288 char conv_P_msb; //conversion du msb
ThomasMargottin 0:cf466bde5334 289 uint16_t P_lsb; //création d'un entier pour le digit de puissance active sur 16 bits car on dépasse les 8 bits
ThomasMargottin 0:cf466bde5334 290
ThomasMargottin 0:cf466bde5334 291 P_lsb = (10 * valeur); //multiplication par 10 de la valeur reçu en puissance active
ThomasMargottin 0:cf466bde5334 292 conv_P_msb = P_lsb >> 8; //la valeur du MSB correspond à la valeur de la température décalée de 8 bits
ThomasMargottin 0:cf466bde5334 293 afficheur.putc(0x01); //code commande (WRITE_OBJ)
ThomasMargottin 0:cf466bde5334 294 afficheur.putc(DIGIT); //objet ID
ThomasMargottin 0:cf466bde5334 295 afficheur.putc(index); //objet Index
ThomasMargottin 0:cf466bde5334 296 afficheur.putc(conv_P_msb); //value (MSB)
ThomasMargottin 0:cf466bde5334 297 afficheur.putc(P_lsb); //value (LSB)
ThomasMargottin 0:cf466bde5334 298 chk = 0x01^DIGIT^index^conv_P_msb^P_lsb; //calcul du Checksum
ThomasMargottin 0:cf466bde5334 299 afficheur.putc(chk); //checksum
ThomasMargottin 0:cf466bde5334 300 }