Projet de mesure Avec enregistrement sur une carte SD et envoie sur BLUETOOTH ble (bluenrg)

Dependencies:   SDFileSystem mbed-rtos mbed-src

Committer:
mullercamille
Date:
Tue Apr 21 18:10:51 2015 +0000
Revision:
0:db6d3d47e902
FirstCOmmit;

Who changed what in which revision?

UserRevisionLine numberNew 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