Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
main.cpp@4:3a3ba27a08ee, 2020-02-17 (annotated)
- Committer:
- di_tanno
- Date:
- Mon Feb 17 22:07:11 2020 +0000
- Revision:
- 4:3a3ba27a08ee
- Parent:
- 3:307e8b3d4968
asdfa;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hiro99ma | 0:23f5942ba14e | 1 | #include "mbed.h" |
hiro99ma | 1:fa70127b3381 | 2 | |
pinofal | 3:307e8b3d4968 | 3 | // tempo in secondi dl Ticker |
di_tanno | 4:3a3ba27a08ee | 4 | #define SECPERTICK 1 |
di_tanno | 4:3a3ba27a08ee | 5 | |
di_tanno | 4:3a3ba27a08ee | 6 | DigitalOut MyLed(LED1); |
di_tanno | 4:3a3ba27a08ee | 7 | AnalogIn In20(PA_0); //20 Volt |
di_tanno | 4:3a3ba27a08ee | 8 | AnalogIn In5(PB_0); //5 Volt |
di_tanno | 4:3a3ba27a08ee | 9 | AnalogIn In42(PC_0); //4.2 Volt |
di_tanno | 4:3a3ba27a08ee | 10 | Serial pc(USBTX,USBRX); |
di_tanno | 4:3a3ba27a08ee | 11 | Serial MyBle(PA_9,PA_10); |
pinofal | 3:307e8b3d4968 | 12 | |
pinofal | 3:307e8b3d4968 | 13 | // numero di volte che il programma entra nella funzione Ticker |
pinofal | 3:307e8b3d4968 | 14 | int nCountTick; |
pinofal | 3:307e8b3d4968 | 15 | int nOldCountTick; |
di_tanno | 4:3a3ba27a08ee | 16 | volatile bool bSwitch; |
di_tanno | 4:3a3ba27a08ee | 17 | volatile float fSommaMisureVPiezo = 0.0; |
di_tanno | 4:3a3ba27a08ee | 18 | volatile float fSommaMisureVOut = 0.0; |
di_tanno | 4:3a3ba27a08ee | 19 | volatile float fSommaMisureVBatt = 0.0; |
di_tanno | 4:3a3ba27a08ee | 20 | volatile int nContaMisure= 0; |
di_tanno | 4:3a3ba27a08ee | 21 | volatile float fAverageVBatt =0.0; |
di_tanno | 4:3a3ba27a08ee | 22 | volatile float fAverageVOut =0.0; |
di_tanno | 4:3a3ba27a08ee | 23 | volatile float fAverageVPiezo =0.0; |
pinofal | 3:307e8b3d4968 | 24 | |
pinofal | 3:307e8b3d4968 | 25 | // variabili contenenti le tensioni lette con gli ADC |
pinofal | 3:307e8b3d4968 | 26 | float fOut; |
pinofal | 3:307e8b3d4968 | 27 | float fPiezo; |
pinofal | 3:307e8b3d4968 | 28 | float fBatt; |
di_tanno | 4:3a3ba27a08ee | 29 | float temp; |
di_tanno | 4:3a3ba27a08ee | 30 | char stringa[128]; |
di_tanno | 4:3a3ba27a08ee | 31 | char stringapc[128]; |
di_tanno | 4:3a3ba27a08ee | 32 | const float R1 = 562000.0; |
di_tanno | 4:3a3ba27a08ee | 33 | const float R2 = 100000.0; |
di_tanno | 4:3a3ba27a08ee | 34 | const float R3 = 274000.0; |
di_tanno | 4:3a3ba27a08ee | 35 | const float R4 = 562000.0; |
di_tanno | 4:3a3ba27a08ee | 36 | const float R5 = 100000.0; |
di_tanno | 4:3a3ba27a08ee | 37 | const float R6 = 332000.0; |
di_tanno | 4:3a3ba27a08ee | 38 | int contStr = 0; |
di_tanno | 4:3a3ba27a08ee | 39 | int contStrPc = 0; |
pinofal | 3:307e8b3d4968 | 40 | |
pinofal | 3:307e8b3d4968 | 41 | // indice per i cicli |
pinofal | 3:307e8b3d4968 | 42 | int nIndex; |
pinofal | 3:307e8b3d4968 | 43 | |
pinofal | 3:307e8b3d4968 | 44 | |
pinofal | 3:307e8b3d4968 | 45 | |
pinofal | 3:307e8b3d4968 | 46 | Ticker TimeTick; |
pinofal | 3:307e8b3d4968 | 47 | |
di_tanno | 4:3a3ba27a08ee | 48 | void TimeTickFunction() |
di_tanno | 4:3a3ba27a08ee | 49 | { |
di_tanno | 4:3a3ba27a08ee | 50 | if(bSwitch == true) //Variabile accensione o spegnimento trasmissione dati(cambia attraverso uno switch sull'app) |
hiro99ma | 1:fa70127b3381 | 51 | { |
di_tanno | 4:3a3ba27a08ee | 52 | // Calcolo valore medio di: VPiezo,VOut,VBatt |
di_tanno | 4:3a3ba27a08ee | 53 | fAverageVBatt = fSommaMisureVBatt/nContaMisure; |
di_tanno | 4:3a3ba27a08ee | 54 | fAverageVPiezo = fSommaMisureVPiezo/nContaMisure; |
di_tanno | 4:3a3ba27a08ee | 55 | fAverageVOut = fSommaMisureVOut/nContaMisure; |
di_tanno | 4:3a3ba27a08ee | 56 | // Reinizzializzo le variabili necessarie alla somma |
di_tanno | 4:3a3ba27a08ee | 57 | fSommaMisureVBatt =0.0; |
di_tanno | 4:3a3ba27a08ee | 58 | fSommaMisureVOut = 0.0; |
di_tanno | 4:3a3ba27a08ee | 59 | fSommaMisureVPiezo = 0.0; |
di_tanno | 4:3a3ba27a08ee | 60 | /* Mando Valori medi all'applicazione tramite Bluetooth utilizzando il seguente protocollo: |
di_tanno | 4:3a3ba27a08ee | 61 | *P Piezo |
di_tanno | 4:3a3ba27a08ee | 62 | *O VOut |
di_tanno | 4:3a3ba27a08ee | 63 | *B VBatt |
di_tanno | 4:3a3ba27a08ee | 64 | */ |
di_tanno | 4:3a3ba27a08ee | 65 | MyBle.printf("*P%.2f",fAverageVPiezo); |
di_tanno | 4:3a3ba27a08ee | 66 | pc.printf("PC>: P %.2f\n\r",fAverageVPiezo); |
di_tanno | 4:3a3ba27a08ee | 67 | MyBle.printf("*O%.2f",fAverageVOut); |
di_tanno | 4:3a3ba27a08ee | 68 | pc.printf("PC>: O %.2f\n\r",fAverageVOut); |
di_tanno | 4:3a3ba27a08ee | 69 | MyBle.printf("*B%.2f",fAverageVBatt); |
di_tanno | 4:3a3ba27a08ee | 70 | pc.printf("PC>: B %.2f\n\r",fAverageVBatt); |
di_tanno | 4:3a3ba27a08ee | 71 | |
di_tanno | 4:3a3ba27a08ee | 72 | // indice di tick |
di_tanno | 4:3a3ba27a08ee | 73 | nCountTick++; |
di_tanno | 4:3a3ba27a08ee | 74 | // reinizializzo contatore di misure |
di_tanno | 4:3a3ba27a08ee | 75 | nContaMisure =0; |
di_tanno | 4:3a3ba27a08ee | 76 | //Mando valori medi in seriale al pc per questioni di diagnostica |
di_tanno | 4:3a3ba27a08ee | 77 | pc.printf("Secondi= %d; fPiezo = %.3f; fOut = %.3f; fBatt = %.3f\n\r", (nCountTick*SECPERTICK), fAverageVPiezo, fAverageVOut, fAverageVBatt); |
hiro99ma | 1:fa70127b3381 | 78 | } |
di_tanno | 4:3a3ba27a08ee | 79 | |
di_tanno | 4:3a3ba27a08ee | 80 | |
hiro99ma | 0:23f5942ba14e | 81 | |
di_tanno | 4:3a3ba27a08ee | 82 | |
hiro99ma | 0:23f5942ba14e | 83 | } |
hiro99ma | 0:23f5942ba14e | 84 | int main() |
hiro99ma | 0:23f5942ba14e | 85 | { |
di_tanno | 4:3a3ba27a08ee | 86 | //Inizializzazione del contatore delle misure |
di_tanno | 4:3a3ba27a08ee | 87 | nContaMisure =0; |
pinofal | 3:307e8b3d4968 | 88 | TimeTick.attach(&TimeTickFunction,SECPERTICK); |
di_tanno | 4:3a3ba27a08ee | 89 | char cRxChar; |
di_tanno | 4:3a3ba27a08ee | 90 | char pcRxChar; |
pinofal | 3:307e8b3d4968 | 91 | while(true) |
di_tanno | 4:3a3ba27a08ee | 92 | { |
di_tanno | 4:3a3ba27a08ee | 93 | fPiezo=In20.read(); //Acquisice la tensione in dal piezo |
di_tanno | 4:3a3ba27a08ee | 94 | fPiezo=fPiezo*3.3; //Converte la tensione del piezo in un range da 0 a 3.3 Volt |
di_tanno | 4:3a3ba27a08ee | 95 | fPiezo= (fPiezo/(R2/(R1+R2))); //Riporta il valore di tensione a prima del cambiamento causato dai partitori di tensione |
di_tanno | 4:3a3ba27a08ee | 96 | fSommaMisureVPiezo += fPiezo; |
di_tanno | 4:3a3ba27a08ee | 97 | fOut=In5.read(); //Acquisice la tensione in uscita dall'alimentatore |
di_tanno | 4:3a3ba27a08ee | 98 | fOut=fOut*3.3; //Converte la tensione del tensione in uscita in un range da 0 a 3.3 Volt |
di_tanno | 4:3a3ba27a08ee | 99 | fOut= (fOut/(R4/(R3+R4))); //Riporta il valore di tensione a prima del cambiamento causato dai partitori di tensione |
di_tanno | 4:3a3ba27a08ee | 100 | fSommaMisureVOut += fOut; |
di_tanno | 4:3a3ba27a08ee | 101 | fBatt=In42.read(); //Acquisice la tensione della batteria |
di_tanno | 4:3a3ba27a08ee | 102 | fBatt=fBatt*3.3; //Converte la tensione della batteria in un range da 0 a 3.3 Volt |
di_tanno | 4:3a3ba27a08ee | 103 | fBatt= (fBatt/(R6/(R5+R6))); //Riporta il valore di tensione a prima del cambiamento causato dai partitori di tensione |
di_tanno | 4:3a3ba27a08ee | 104 | fSommaMisureVBatt +=fBatt; |
di_tanno | 4:3a3ba27a08ee | 105 | nContaMisure++; |
di_tanno | 4:3a3ba27a08ee | 106 | |
di_tanno | 4:3a3ba27a08ee | 107 | |
di_tanno | 4:3a3ba27a08ee | 108 | |
di_tanno | 4:3a3ba27a08ee | 109 | |
pinofal | 3:307e8b3d4968 | 110 | |
pinofal | 3:307e8b3d4968 | 111 | |
di_tanno | 4:3a3ba27a08ee | 112 | //Non ci possono essere trasmissioni contemporanee da Bluetooth e da Usb |
di_tanno | 4:3a3ba27a08ee | 113 | |
di_tanno | 4:3a3ba27a08ee | 114 | //Protocollo comunicazione, invio messaggi da PC a Bluetooth |
di_tanno | 4:3a3ba27a08ee | 115 | while(MyBle.readable()) |
di_tanno | 4:3a3ba27a08ee | 116 | { |
di_tanno | 4:3a3ba27a08ee | 117 | cRxChar = MyBle.getc(); |
di_tanno | 4:3a3ba27a08ee | 118 | //Protocollo di accensione e spegnimento della visualizzazione delle tensioni sull'APP |
di_tanno | 4:3a3ba27a08ee | 119 | if(cRxChar == 'S') |
di_tanno | 4:3a3ba27a08ee | 120 | { pc.printf("PC<: Communication switched on\n\r"); |
di_tanno | 4:3a3ba27a08ee | 121 | MyBle.printf("*#Communication switched on\n\r*"); |
di_tanno | 4:3a3ba27a08ee | 122 | bSwitch = true; |
di_tanno | 4:3a3ba27a08ee | 123 | |
di_tanno | 4:3a3ba27a08ee | 124 | } |
di_tanno | 4:3a3ba27a08ee | 125 | |
di_tanno | 4:3a3ba27a08ee | 126 | if(cRxChar == 'E') |
di_tanno | 4:3a3ba27a08ee | 127 | { |
di_tanno | 4:3a3ba27a08ee | 128 | pc.printf("PC<: Communication switched off\n\r"); |
di_tanno | 4:3a3ba27a08ee | 129 | MyBle.printf("*#Communication switched off\n\r*"); |
di_tanno | 4:3a3ba27a08ee | 130 | bSwitch = false; |
di_tanno | 4:3a3ba27a08ee | 131 | } |
di_tanno | 4:3a3ba27a08ee | 132 | |
di_tanno | 4:3a3ba27a08ee | 133 | //Protocollo comunicazione, invio messaggi da Bluetooh a PC |
di_tanno | 4:3a3ba27a08ee | 134 | if(cRxChar == '#') |
di_tanno | 4:3a3ba27a08ee | 135 | { |
di_tanno | 4:3a3ba27a08ee | 136 | stringa[0] = '#'; |
di_tanno | 4:3a3ba27a08ee | 137 | for(int i = 1;i<=128;i++) |
di_tanno | 4:3a3ba27a08ee | 138 | { |
di_tanno | 4:3a3ba27a08ee | 139 | stringa[i] = MyBle.getc(); //Acquisisce caratteri dallo smartphone e li inserisco in un'array |
di_tanno | 4:3a3ba27a08ee | 140 | contStr = i; |
di_tanno | 4:3a3ba27a08ee | 141 | if(stringa[i] == '#') //Termina il caricamento dell'array quando riceve il '#' |
di_tanno | 4:3a3ba27a08ee | 142 | { |
di_tanno | 4:3a3ba27a08ee | 143 | break; |
di_tanno | 4:3a3ba27a08ee | 144 | } |
di_tanno | 4:3a3ba27a08ee | 145 | |
di_tanno | 4:3a3ba27a08ee | 146 | } |
di_tanno | 4:3a3ba27a08ee | 147 | pc.printf("\rPC<: "); |
di_tanno | 4:3a3ba27a08ee | 148 | |
di_tanno | 4:3a3ba27a08ee | 149 | for(int i = 1;i<contStr;i++) |
di_tanno | 4:3a3ba27a08ee | 150 | //Stampa sulla seriale del PC l'array caricato precedentemente |
di_tanno | 4:3a3ba27a08ee | 151 | { pc.printf("%c", stringa[i]); |
di_tanno | 4:3a3ba27a08ee | 152 | |
di_tanno | 4:3a3ba27a08ee | 153 | } |
di_tanno | 4:3a3ba27a08ee | 154 | pc.printf("\n\r"); |
di_tanno | 4:3a3ba27a08ee | 155 | } |
di_tanno | 4:3a3ba27a08ee | 156 | |
di_tanno | 4:3a3ba27a08ee | 157 | }//if(MyBle.readable()) |
di_tanno | 4:3a3ba27a08ee | 158 | // SISTEMA DI COMUNICAZIONE FUNZIONANTE |
di_tanno | 4:3a3ba27a08ee | 159 | while(pc.readable()) |
di_tanno | 4:3a3ba27a08ee | 160 | { |
di_tanno | 4:3a3ba27a08ee | 161 | pcRxChar = pc.getc(); |
di_tanno | 4:3a3ba27a08ee | 162 | switch(pcRxChar) |
di_tanno | 4:3a3ba27a08ee | 163 | { |
di_tanno | 4:3a3ba27a08ee | 164 | case '#': |
di_tanno | 4:3a3ba27a08ee | 165 | if(stringapc[0] == '#') |
di_tanno | 4:3a3ba27a08ee | 166 | { |
di_tanno | 4:3a3ba27a08ee | 167 | pc.printf("\rPC>: "); |
di_tanno | 4:3a3ba27a08ee | 168 | MyBle.putc('*'); |
di_tanno | 4:3a3ba27a08ee | 169 | |
di_tanno | 4:3a3ba27a08ee | 170 | for(int i = 0;i<contStrPc;i++) |
di_tanno | 4:3a3ba27a08ee | 171 | { |
di_tanno | 4:3a3ba27a08ee | 172 | MyBle.printf("%c" , stringapc[i]); |
di_tanno | 4:3a3ba27a08ee | 173 | pc.printf("%c", stringapc[i]); |
di_tanno | 4:3a3ba27a08ee | 174 | } |
di_tanno | 4:3a3ba27a08ee | 175 | pc.printf("\n\r"); |
di_tanno | 4:3a3ba27a08ee | 176 | MyBle.printf("\n\r*"); |
di_tanno | 4:3a3ba27a08ee | 177 | for(int i = 0;i<contStrPc;i++) |
di_tanno | 4:3a3ba27a08ee | 178 | { |
di_tanno | 4:3a3ba27a08ee | 179 | stringapc[i] = ' '; |
di_tanno | 4:3a3ba27a08ee | 180 | } |
di_tanno | 4:3a3ba27a08ee | 181 | contStrPc = 0; |
di_tanno | 4:3a3ba27a08ee | 182 | |
di_tanno | 4:3a3ba27a08ee | 183 | |
di_tanno | 4:3a3ba27a08ee | 184 | } |
di_tanno | 4:3a3ba27a08ee | 185 | else |
di_tanno | 4:3a3ba27a08ee | 186 | { |
di_tanno | 4:3a3ba27a08ee | 187 | stringapc[0] = '#'; |
di_tanno | 4:3a3ba27a08ee | 188 | contStrPc++; |
di_tanno | 4:3a3ba27a08ee | 189 | } |
di_tanno | 4:3a3ba27a08ee | 190 | break; |
di_tanno | 4:3a3ba27a08ee | 191 | default: |
di_tanno | 4:3a3ba27a08ee | 192 | if(stringapc[0] == '#') |
di_tanno | 4:3a3ba27a08ee | 193 | { |
di_tanno | 4:3a3ba27a08ee | 194 | stringapc[contStrPc] = pcRxChar; |
di_tanno | 4:3a3ba27a08ee | 195 | contStrPc++; |
di_tanno | 4:3a3ba27a08ee | 196 | } |
di_tanno | 4:3a3ba27a08ee | 197 | break; |
di_tanno | 4:3a3ba27a08ee | 198 | |
di_tanno | 4:3a3ba27a08ee | 199 | }//switch(pcRxChar) |
di_tanno | 4:3a3ba27a08ee | 200 | }//while(MyBle.readable()) |
di_tanno | 4:3a3ba27a08ee | 201 | |
di_tanno | 4:3a3ba27a08ee | 202 | } //while (true) |
di_tanno | 4:3a3ba27a08ee | 203 | |
hiro99ma | 0:23f5942ba14e | 204 | } |
di_tanno | 4:3a3ba27a08ee | 205 | |
di_tanno | 4:3a3ba27a08ee | 206 | |
di_tanno | 4:3a3ba27a08ee | 207 |