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
- Committer:
- di_tanno
- Date:
- 2020-02-17
- Revision:
- 4:3a3ba27a08ee
- Parent:
- 3:307e8b3d4968
File content as of revision 4:3a3ba27a08ee:
#include "mbed.h"
// tempo in secondi dl Ticker
#define SECPERTICK 1
DigitalOut MyLed(LED1);
AnalogIn In20(PA_0); //20 Volt
AnalogIn In5(PB_0); //5 Volt
AnalogIn In42(PC_0); //4.2 Volt
Serial pc(USBTX,USBRX);
Serial MyBle(PA_9,PA_10);
// numero di volte che il programma entra nella funzione Ticker
int nCountTick;
int nOldCountTick;
volatile bool bSwitch;
volatile float fSommaMisureVPiezo = 0.0;
volatile float fSommaMisureVOut = 0.0;
volatile float fSommaMisureVBatt = 0.0;
volatile int nContaMisure= 0;
volatile float fAverageVBatt =0.0;
volatile float fAverageVOut =0.0;
volatile float fAverageVPiezo =0.0;
// variabili contenenti le tensioni lette con gli ADC
float fOut;
float fPiezo;
float fBatt;
float temp;
char stringa[128];
char stringapc[128];
const float R1 = 562000.0;
const float R2 = 100000.0;
const float R3 = 274000.0;
const float R4 = 562000.0;
const float R5 = 100000.0;
const float R6 = 332000.0;
int contStr = 0;
int contStrPc = 0;
// indice per i cicli
int nIndex;
Ticker TimeTick;
void TimeTickFunction()
{
if(bSwitch == true) //Variabile accensione o spegnimento trasmissione dati(cambia attraverso uno switch sull'app)
{
// Calcolo valore medio di: VPiezo,VOut,VBatt
fAverageVBatt = fSommaMisureVBatt/nContaMisure;
fAverageVPiezo = fSommaMisureVPiezo/nContaMisure;
fAverageVOut = fSommaMisureVOut/nContaMisure;
// Reinizzializzo le variabili necessarie alla somma
fSommaMisureVBatt =0.0;
fSommaMisureVOut = 0.0;
fSommaMisureVPiezo = 0.0;
/* Mando Valori medi all'applicazione tramite Bluetooth utilizzando il seguente protocollo:
*P Piezo
*O VOut
*B VBatt
*/
MyBle.printf("*P%.2f",fAverageVPiezo);
pc.printf("PC>: P %.2f\n\r",fAverageVPiezo);
MyBle.printf("*O%.2f",fAverageVOut);
pc.printf("PC>: O %.2f\n\r",fAverageVOut);
MyBle.printf("*B%.2f",fAverageVBatt);
pc.printf("PC>: B %.2f\n\r",fAverageVBatt);
// indice di tick
nCountTick++;
// reinizializzo contatore di misure
nContaMisure =0;
//Mando valori medi in seriale al pc per questioni di diagnostica
pc.printf("Secondi= %d; fPiezo = %.3f; fOut = %.3f; fBatt = %.3f\n\r", (nCountTick*SECPERTICK), fAverageVPiezo, fAverageVOut, fAverageVBatt);
}
}
int main()
{
//Inizializzazione del contatore delle misure
nContaMisure =0;
TimeTick.attach(&TimeTickFunction,SECPERTICK);
char cRxChar;
char pcRxChar;
while(true)
{
fPiezo=In20.read(); //Acquisice la tensione in dal piezo
fPiezo=fPiezo*3.3; //Converte la tensione del piezo in un range da 0 a 3.3 Volt
fPiezo= (fPiezo/(R2/(R1+R2))); //Riporta il valore di tensione a prima del cambiamento causato dai partitori di tensione
fSommaMisureVPiezo += fPiezo;
fOut=In5.read(); //Acquisice la tensione in uscita dall'alimentatore
fOut=fOut*3.3; //Converte la tensione del tensione in uscita in un range da 0 a 3.3 Volt
fOut= (fOut/(R4/(R3+R4))); //Riporta il valore di tensione a prima del cambiamento causato dai partitori di tensione
fSommaMisureVOut += fOut;
fBatt=In42.read(); //Acquisice la tensione della batteria
fBatt=fBatt*3.3; //Converte la tensione della batteria in un range da 0 a 3.3 Volt
fBatt= (fBatt/(R6/(R5+R6))); //Riporta il valore di tensione a prima del cambiamento causato dai partitori di tensione
fSommaMisureVBatt +=fBatt;
nContaMisure++;
//Non ci possono essere trasmissioni contemporanee da Bluetooth e da Usb
//Protocollo comunicazione, invio messaggi da PC a Bluetooth
while(MyBle.readable())
{
cRxChar = MyBle.getc();
//Protocollo di accensione e spegnimento della visualizzazione delle tensioni sull'APP
if(cRxChar == 'S')
{ pc.printf("PC<: Communication switched on\n\r");
MyBle.printf("*#Communication switched on\n\r*");
bSwitch = true;
}
if(cRxChar == 'E')
{
pc.printf("PC<: Communication switched off\n\r");
MyBle.printf("*#Communication switched off\n\r*");
bSwitch = false;
}
//Protocollo comunicazione, invio messaggi da Bluetooh a PC
if(cRxChar == '#')
{
stringa[0] = '#';
for(int i = 1;i<=128;i++)
{
stringa[i] = MyBle.getc(); //Acquisisce caratteri dallo smartphone e li inserisco in un'array
contStr = i;
if(stringa[i] == '#') //Termina il caricamento dell'array quando riceve il '#'
{
break;
}
}
pc.printf("\rPC<: ");
for(int i = 1;i<contStr;i++)
//Stampa sulla seriale del PC l'array caricato precedentemente
{ pc.printf("%c", stringa[i]);
}
pc.printf("\n\r");
}
}//if(MyBle.readable())
// SISTEMA DI COMUNICAZIONE FUNZIONANTE
while(pc.readable())
{
pcRxChar = pc.getc();
switch(pcRxChar)
{
case '#':
if(stringapc[0] == '#')
{
pc.printf("\rPC>: ");
MyBle.putc('*');
for(int i = 0;i<contStrPc;i++)
{
MyBle.printf("%c" , stringapc[i]);
pc.printf("%c", stringapc[i]);
}
pc.printf("\n\r");
MyBle.printf("\n\r*");
for(int i = 0;i<contStrPc;i++)
{
stringapc[i] = ' ';
}
contStrPc = 0;
}
else
{
stringapc[0] = '#';
contStrPc++;
}
break;
default:
if(stringapc[0] == '#')
{
stringapc[contStrPc] = pcRxChar;
contStrPc++;
}
break;
}//switch(pcRxChar)
}//while(MyBle.readable())
} //while (true)
}