
TR
main.cpp@0:cf466bde5334, 2016-05-19 (annotated)
- Committer:
- ThomasMargottin
- Date:
- Thu May 19 12:30:54 2016 +0000
- Revision:
- 0:cf466bde5334
MARGOTTIN;
Who changed what in which revision?
User | Revision | Line number | New 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 | } |