Vincent Belanger
/
Receiver
Receiver code
Embed:
(wiki syntax)
Show/hide line numbers
Receiver.cpp
00001 #include "mbed.h" 00002 #include "Sensors.h" 00003 #include "Receiver.h" 00004 #include "Xbee.h" 00005 00006 // FileSystem (pour lire fichier de config) 00007 LocalFileSystem local("local"); 00008 00009 // Entrées-sorties 00010 DigitalOut reset(p8); 00011 Serial xbee(p13, p14); 00012 Serial pc(USBTX, USBRX); 00013 00014 // Paramètres du fichier de config 00015 const int paramCount = 2; 00016 Parameter params[paramCount]; 00017 00018 // Tableau de fonctions pour la lecture des capteurs 00019 const int sensorsCount = 2; 00020 void (*readSensorsTable[sensorsCount]) (char*) = {&readButton, &readAccelero}; 00021 00022 // Fonction de lecture du fichier de config 00023 void readConfig() 00024 { 00025 FILE *file = fopen("/local/receiver.cfg", "r"); 00026 char* token; 00027 char* delimiter = "="; 00028 00029 params[PAN_ID] = (Parameter) {.name = "PAN_ID", .base = 16}; 00030 params[PERIOD] = (Parameter) {.name = "Period", .base = 10}; 00031 00032 if (file != NULL) 00033 { 00034 char line[128]; 00035 00036 // Lire ligne par ligne 00037 while (fgets(line, sizeof(line), file) != NULL) 00038 { 00039 // token = nom du paramètre 00040 token = strtok(line, delimiter); 00041 for (int i = 0; i < paramCount; i++) 00042 { 00043 if (strcmp(token, params[i].name) == 0) 00044 { 00045 // configValue = valeur du paramètre 00046 char* configValue = strtok(NULL, delimiter); 00047 // conversion en entier 64 bit 00048 params[i].value = strtoll(configValue, NULL, params[i].base); 00049 } 00050 } 00051 } 00052 00053 fclose(file); 00054 } 00055 } 00056 00057 // Fonction de lecture des capteurs 00058 void readSensors(char sensorInfo[]) 00059 { 00060 char sensorId = sensorInfo[0]; 00061 readSensorsTable[sensorId] (sensorInfo); 00062 } 00063 00064 // Fonction pour combiner deux buffers en un 00065 int mergeBuffers(char* buffer1, int size1, char* buffer2, int size2, char* result) 00066 { 00067 memcpy(result, buffer1, size1); 00068 memcpy(result + size1, buffer2, size2); 00069 00070 return size1 + size2; 00071 } 00072 00073 // Fonction principale 00074 int main() 00075 { 00076 // Réinitialisation du Xbee 00077 reset = 0; 00078 wait(0.4); 00079 reset = 1; 00080 wait(1); 00081 00082 // Vidage du buffer de lecture du Xbee 00083 while (xbee.readable()) 00084 { 00085 char dump = xbee.getc(); 00086 } 00087 00088 // Lire la config et assigner le PAN ID 00089 readConfig(); 00090 setPanId(&xbee, params[PAN_ID].value); 00091 00092 // Buffers pour les données des capteurs 00093 char buttonBuffer[2]; 00094 char acceleroBuffer[3]; 00095 buttonBuffer[0] = 0; // Numéro du capteur 00096 acceleroBuffer[0] = 1; // Numéro du capteur 00097 00098 while (true) 00099 { 00100 // Lire les capteurs 00101 readSensors(buttonBuffer); 00102 readSensors(acceleroBuffer); 00103 00104 // Envoi des données au coordinateur 00105 char transmitBuffer[3]; // Taille du buffer est 2 + 1 00106 int size = mergeBuffers(buttonBuffer + 1, 1, acceleroBuffer + 1, 2, transmitBuffer); 00107 transmitRequest(&xbee, transmitBuffer, size); 00108 00109 // Attente configurable 00110 wait_ms(params[PERIOD].value); 00111 } 00112 }
Generated on Sun Jul 17 2022 17:20:59 by 1.7.2