Projet de mesure Avec enregistrement sur une carte SD et envoie sur BLUETOOTH ble (bluenrg)
Dependencies: SDFileSystem mbed-rtos mbed-src
main.cpp@0:db6d3d47e902, 2015-04-21 (annotated)
- Committer:
- mullercamille
- Date:
- Tue Apr 21 18:10:51 2015 +0000
- Revision:
- 0:db6d3d47e902
FirstCOmmit;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mullercamille | 0:db6d3d47e902 | 1 | /* mbed Microcontroller Library |
mullercamille | 0:db6d3d47e902 | 2 | * Copyright (c) 2006-2013 ARM Limited |
mullercamille | 0:db6d3d47e902 | 3 | * |
mullercamille | 0:db6d3d47e902 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
mullercamille | 0:db6d3d47e902 | 5 | * you may not use this file except in compliance with the License. |
mullercamille | 0:db6d3d47e902 | 6 | * You may obtain a copy of the License at |
mullercamille | 0:db6d3d47e902 | 7 | * |
mullercamille | 0:db6d3d47e902 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
mullercamille | 0:db6d3d47e902 | 9 | * |
mullercamille | 0:db6d3d47e902 | 10 | * Unless required by applicable law or agreed to in writing, software |
mullercamille | 0:db6d3d47e902 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
mullercamille | 0:db6d3d47e902 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
mullercamille | 0:db6d3d47e902 | 13 | * See the License for the specific language governing permissions and |
mullercamille | 0:db6d3d47e902 | 14 | * limitations under the License. |
mullercamille | 0:db6d3d47e902 | 15 | */ |
mullercamille | 0:db6d3d47e902 | 16 | #include "mbed.h" |
mullercamille | 0:db6d3d47e902 | 17 | //#include "BatteryService.h" |
mullercamille | 0:db6d3d47e902 | 18 | #include "mbed.h" |
mullercamille | 0:db6d3d47e902 | 19 | #include <FileBase.h> |
mullercamille | 0:db6d3d47e902 | 20 | #include "SDFileSystem.h" |
mullercamille | 0:db6d3d47e902 | 21 | #include "rtos.h" |
mullercamille | 0:db6d3d47e902 | 22 | #include <Thread.h> |
mullercamille | 0:db6d3d47e902 | 23 | #include <stdio.h> |
mullercamille | 0:db6d3d47e902 | 24 | /* C++ header files */ |
mullercamille | 0:db6d3d47e902 | 25 | #include <string> |
mullercamille | 0:db6d3d47e902 | 26 | #include <vector> |
mullercamille | 0:db6d3d47e902 | 27 | /* C header files */ |
mullercamille | 0:db6d3d47e902 | 28 | #include <cstdio> |
mullercamille | 0:db6d3d47e902 | 29 | #include <cstring> |
mullercamille | 0:db6d3d47e902 | 30 | #include <cstdlib> |
mullercamille | 0:db6d3d47e902 | 31 | //#include "ST_L152_32MHZ.h" |
mullercamille | 0:db6d3d47e902 | 32 | //L152_init32 myinit(0); // use the internal oscillator |
mullercamille | 0:db6d3d47e902 | 33 | |
mullercamille | 0:db6d3d47e902 | 34 | |
mullercamille | 0:db6d3d47e902 | 35 | using namespace std; |
mullercamille | 0:db6d3d47e902 | 36 | |
mullercamille | 0:db6d3d47e902 | 37 | // DEFINE |
mullercamille | 0:db6d3d47e902 | 38 | #define NBFICHIERPOSSIBLE 1000 |
mullercamille | 0:db6d3d47e902 | 39 | |
mullercamille | 0:db6d3d47e902 | 40 | // STRUCTURE |
mullercamille | 0:db6d3d47e902 | 41 | typedef struct { |
mullercamille | 0:db6d3d47e902 | 42 | |
mullercamille | 0:db6d3d47e902 | 43 | AnalogIn * laPin; |
mullercamille | 0:db6d3d47e902 | 44 | DigitalOut * laPinEco; |
mullercamille | 0:db6d3d47e902 | 45 | // string leTypeGPIO; // Num ou Anal |
mullercamille | 0:db6d3d47e902 | 46 | // string leTypeE; // Entrée ou Sortie |
mullercamille | 0:db6d3d47e902 | 47 | int laFrequence; |
mullercamille | 0:db6d3d47e902 | 48 | int leModeEco; // Si -1 pas de mode eco sinon numero de pin |
mullercamille | 0:db6d3d47e902 | 49 | std::string * leNom; |
mullercamille | 0:db6d3d47e902 | 50 | std::string * Path; |
mullercamille | 0:db6d3d47e902 | 51 | } laSonde; |
mullercamille | 0:db6d3d47e902 | 52 | |
mullercamille | 0:db6d3d47e902 | 53 | typedef struct { |
mullercamille | 0:db6d3d47e902 | 54 | laSonde * saSonde; |
mullercamille | 0:db6d3d47e902 | 55 | float saMesure; |
mullercamille | 0:db6d3d47e902 | 56 | int sonTemps; |
mullercamille | 0:db6d3d47e902 | 57 | } laMesure; |
mullercamille | 0:db6d3d47e902 | 58 | |
mullercamille | 0:db6d3d47e902 | 59 | // VAR GLOBAL |
mullercamille | 0:db6d3d47e902 | 60 | Mail<laMesure, 30> mail_box; |
mullercamille | 0:db6d3d47e902 | 61 | Serial pc1(USBTX, USBRX); |
mullercamille | 0:db6d3d47e902 | 62 | //SDFileSystem sd(PB_15, PB_14, PB_13, D4, "sd"); // MOSI, MISO, SCK, CS |
mullercamille | 0:db6d3d47e902 | 63 | SDFileSystem sd(D11, D12, D13, D4, "sd"); // MOSI, MISO, SCK, CS |
mullercamille | 0:db6d3d47e902 | 64 | Timer t; |
mullercamille | 0:db6d3d47e902 | 65 | volatile int a=0; |
mullercamille | 0:db6d3d47e902 | 66 | Mutex mtx; |
mullercamille | 0:db6d3d47e902 | 67 | |
mullercamille | 0:db6d3d47e902 | 68 | PinName analog[6] = { A0, A1,A2,A3,A4,A5 }; |
mullercamille | 0:db6d3d47e902 | 69 | PinName digital[16] = {D0,D1,D2,NC,NC,NC,D6,D7,D8,D9,D10,NC,NC,NC,D14,D15 }; |
mullercamille | 0:db6d3d47e902 | 70 | |
mullercamille | 0:db6d3d47e902 | 71 | /** |
mullercamille | 0:db6d3d47e902 | 72 | * Récuperation de data |
mullercamille | 0:db6d3d47e902 | 73 | */ |
mullercamille | 0:db6d3d47e902 | 74 | void getdata(void const *args) |
mullercamille | 0:db6d3d47e902 | 75 | { |
mullercamille | 0:db6d3d47e902 | 76 | laSonde * saSonde = (laSonde*) args; |
mullercamille | 0:db6d3d47e902 | 77 | while(1) { |
mullercamille | 0:db6d3d47e902 | 78 | //mtx.lock(); |
mullercamille | 0:db6d3d47e902 | 79 | if(saSonde->leModeEco != -1) |
mullercamille | 0:db6d3d47e902 | 80 | saSonde->laPinEco->write(1); |
mullercamille | 0:db6d3d47e902 | 81 | laMesure *message = mail_box.alloc(); |
mullercamille | 0:db6d3d47e902 | 82 | message->saSonde = saSonde; |
mullercamille | 0:db6d3d47e902 | 83 | message->saMesure = saSonde->laPin->read(); |
mullercamille | 0:db6d3d47e902 | 84 | message->sonTemps = t.read(); |
mullercamille | 0:db6d3d47e902 | 85 | mail_box.put(message); |
mullercamille | 0:db6d3d47e902 | 86 | if(saSonde->leModeEco != -1) |
mullercamille | 0:db6d3d47e902 | 87 | saSonde->laPinEco->write(0); |
mullercamille | 0:db6d3d47e902 | 88 | a++; |
mullercamille | 0:db6d3d47e902 | 89 | //mtx.unlock(); |
mullercamille | 0:db6d3d47e902 | 90 | Thread::wait(saSonde->laFrequence/100); |
mullercamille | 0:db6d3d47e902 | 91 | |
mullercamille | 0:db6d3d47e902 | 92 | } |
mullercamille | 0:db6d3d47e902 | 93 | } |
mullercamille | 0:db6d3d47e902 | 94 | |
mullercamille | 0:db6d3d47e902 | 95 | void configuration() |
mullercamille | 0:db6d3d47e902 | 96 | { |
mullercamille | 0:db6d3d47e902 | 97 | t.start(); |
mullercamille | 0:db6d3d47e902 | 98 | FILE *fp = fopen("/sd/config.csv", "r"); // Open "out.txt" on the local file system for writing |
mullercamille | 0:db6d3d47e902 | 99 | if(fp == NULL) { |
mullercamille | 0:db6d3d47e902 | 100 | pc1.printf("Le fichier de configuration n'existe pas"); |
mullercamille | 0:db6d3d47e902 | 101 | } else { |
mullercamille | 0:db6d3d47e902 | 102 | |
mullercamille | 0:db6d3d47e902 | 103 | char buf [128]; |
mullercamille | 0:db6d3d47e902 | 104 | // mtx.lock(); // init du mutex |
mullercamille | 0:db6d3d47e902 | 105 | while(1) { |
mullercamille | 0:db6d3d47e902 | 106 | if((fgets(buf, 64, fp)) == NULL) |
mullercamille | 0:db6d3d47e902 | 107 | break; |
mullercamille | 0:db6d3d47e902 | 108 | int a =0; |
mullercamille | 0:db6d3d47e902 | 109 | char delim[] = ","; |
mullercamille | 0:db6d3d47e902 | 110 | char* token; |
mullercamille | 0:db6d3d47e902 | 111 | laSonde * saSonde = (laSonde * ) malloc(sizeof(laSonde)); |
mullercamille | 0:db6d3d47e902 | 112 | for (token = strtok(buf, delim); token; token = strtok(NULL, delim)) { |
mullercamille | 0:db6d3d47e902 | 113 | switch(a) { |
mullercamille | 0:db6d3d47e902 | 114 | case 0 : { // Nom de la pin |
mullercamille | 0:db6d3d47e902 | 115 | printf("%s \n",token); |
mullercamille | 0:db6d3d47e902 | 116 | saSonde->leNom = new string(token); |
mullercamille | 0:db6d3d47e902 | 117 | saSonde->Path = new string(token); |
mullercamille | 0:db6d3d47e902 | 118 | saSonde->Path->insert(0,"/sd/"); |
mullercamille | 0:db6d3d47e902 | 119 | mkdir(saSonde->Path->c_str(),0777); |
mullercamille | 0:db6d3d47e902 | 120 | saSonde->Path->insert(saSonde->Path->size(),"/"); |
mullercamille | 0:db6d3d47e902 | 121 | saSonde->Path->insert(saSonde->Path->size(),token); |
mullercamille | 0:db6d3d47e902 | 122 | break; |
mullercamille | 0:db6d3d47e902 | 123 | } |
mullercamille | 0:db6d3d47e902 | 124 | case 1 : { // Numéro de Pin |
mullercamille | 0:db6d3d47e902 | 125 | saSonde->laPin = new AnalogIn(analog[atoi((const char*)token)]); |
mullercamille | 0:db6d3d47e902 | 126 | break; |
mullercamille | 0:db6d3d47e902 | 127 | } |
mullercamille | 0:db6d3d47e902 | 128 | case 2 : { // Type Analogique ou Numerique |
mullercamille | 0:db6d3d47e902 | 129 | //saSonde->leTypeGPIO = laLigne.at(2); // Num ou Anal |
mullercamille | 0:db6d3d47e902 | 130 | break; |
mullercamille | 0:db6d3d47e902 | 131 | } |
mullercamille | 0:db6d3d47e902 | 132 | case 3 : { // Entrée ou Sortie |
mullercamille | 0:db6d3d47e902 | 133 | //saSonde->leTypeE = laLigne.at(3); // Entrée ou Sortie |
mullercamille | 0:db6d3d47e902 | 134 | |
mullercamille | 0:db6d3d47e902 | 135 | break; |
mullercamille | 0:db6d3d47e902 | 136 | } |
mullercamille | 0:db6d3d47e902 | 137 | case 4 : { // Frequence pour Sortie |
mullercamille | 0:db6d3d47e902 | 138 | saSonde->laFrequence = atoi((const char*)token); |
mullercamille | 0:db6d3d47e902 | 139 | break; |
mullercamille | 0:db6d3d47e902 | 140 | } |
mullercamille | 0:db6d3d47e902 | 141 | case 5 : { // Mode éco |
mullercamille | 0:db6d3d47e902 | 142 | saSonde->leModeEco = atoi((const char*)token); // Si -1 pas de mode eco |
mullercamille | 0:db6d3d47e902 | 143 | break; |
mullercamille | 0:db6d3d47e902 | 144 | } |
mullercamille | 0:db6d3d47e902 | 145 | default : { |
mullercamille | 0:db6d3d47e902 | 146 | printf("error parsing\n)"); |
mullercamille | 0:db6d3d47e902 | 147 | } |
mullercamille | 0:db6d3d47e902 | 148 | |
mullercamille | 0:db6d3d47e902 | 149 | } |
mullercamille | 0:db6d3d47e902 | 150 | a++; |
mullercamille | 0:db6d3d47e902 | 151 | } |
mullercamille | 0:db6d3d47e902 | 152 | |
mullercamille | 0:db6d3d47e902 | 153 | if(saSonde->leModeEco != -1) |
mullercamille | 0:db6d3d47e902 | 154 | saSonde->laPinEco = new DigitalOut(digital[saSonde->leModeEco]); |
mullercamille | 0:db6d3d47e902 | 155 | printf("created thread \n"); |
mullercamille | 0:db6d3d47e902 | 156 | Thread* unThread = new Thread(getdata,saSonde); |
mullercamille | 0:db6d3d47e902 | 157 | }//mtx.unlock(); // init du mutex |
mullercamille | 0:db6d3d47e902 | 158 | } |
mullercamille | 0:db6d3d47e902 | 159 | |
mullercamille | 0:db6d3d47e902 | 160 | } |
mullercamille | 0:db6d3d47e902 | 161 | |
mullercamille | 0:db6d3d47e902 | 162 | int main(void) |
mullercamille | 0:db6d3d47e902 | 163 | { |
mullercamille | 0:db6d3d47e902 | 164 | #if 1 |
mullercamille | 0:db6d3d47e902 | 165 | FILE *fp; |
mullercamille | 0:db6d3d47e902 | 166 | char cc[200]; |
mullercamille | 0:db6d3d47e902 | 167 | configuration(); |
mullercamille | 0:db6d3d47e902 | 168 | while (true) { |
mullercamille | 0:db6d3d47e902 | 169 | osEvent evt = mail_box.get(); |
mullercamille | 0:db6d3d47e902 | 170 | if (evt.status == osEventMail) { |
mullercamille | 0:db6d3d47e902 | 171 | // mtx.lock(); |
mullercamille | 0:db6d3d47e902 | 172 | a--; |
mullercamille | 0:db6d3d47e902 | 173 | laMesure *mail = (laMesure*)evt.value.p; |
mullercamille | 0:db6d3d47e902 | 174 | fp = fopen(mail->saSonde->Path->c_str(), "a"); |
mullercamille | 0:db6d3d47e902 | 175 | if (fp == 0) { |
mullercamille | 0:db6d3d47e902 | 176 | printf("file write failed: %s\n", mail->saSonde->Path->c_str()); |
mullercamille | 0:db6d3d47e902 | 177 | } else { |
mullercamille | 0:db6d3d47e902 | 178 | sprintf(cc,"%d,%f\n",mail->sonTemps,mail->saMesure); |
mullercamille | 0:db6d3d47e902 | 179 | printf("%d,%f\n",mail->sonTemps,mail->saMesure); |
mullercamille | 0:db6d3d47e902 | 180 | fwrite (cc , sizeof(char), sizeof(cc), fp); |
mullercamille | 0:db6d3d47e902 | 181 | } |
mullercamille | 0:db6d3d47e902 | 182 | fclose(fp); |
mullercamille | 0:db6d3d47e902 | 183 | mail_box.free(mail); |
mullercamille | 0:db6d3d47e902 | 184 | // mtx.unlock(); |
mullercamille | 0:db6d3d47e902 | 185 | } |
mullercamille | 0:db6d3d47e902 | 186 | } |
mullercamille | 0:db6d3d47e902 | 187 | #else |
mullercamille | 0:db6d3d47e902 | 188 | wait(3); |
mullercamille | 0:db6d3d47e902 | 189 | AnalogIn laPin(A0); |
mullercamille | 0:db6d3d47e902 | 190 | AnalogOut aout(A2); |
mullercamille | 0:db6d3d47e902 | 191 | while (1) { |
mullercamille | 0:db6d3d47e902 | 192 | // change the voltage on the digital output pin by 0.1 * VCC |
mullercamille | 0:db6d3d47e902 | 193 | // and print what the measured voltage should be (assuming VCC = 3.3v) |
mullercamille | 0:db6d3d47e902 | 194 | for (float i = 0.0f; i < 1.0f; i += 0.1f) { |
mullercamille | 0:db6d3d47e902 | 195 | aout = i; |
mullercamille | 0:db6d3d47e902 | 196 | printf("aout = %1.2f volts", aout.read() * 3.3f); |
mullercamille | 0:db6d3d47e902 | 197 | wait(0.4); |
mullercamille | 0:db6d3d47e902 | 198 | pc1.printf("Test : %f volts \n",(laPin.read()*(3.33 )) ); |
mullercamille | 0:db6d3d47e902 | 199 | wait(5); |
mullercamille | 0:db6d3d47e902 | 200 | } |
mullercamille | 0:db6d3d47e902 | 201 | } |
mullercamille | 0:db6d3d47e902 | 202 | #endif |
mullercamille | 0:db6d3d47e902 | 203 | } |
mullercamille | 0:db6d3d47e902 | 204 |