TEMPSENSOR

Dependencies:   mbed

Fork of Amaldi_7_Exercise_TempSensor by Amaldi

Committer:
MarcoBattista
Date:
Mon Jun 18 12:30:29 2018 +0000
Revision:
3:dca542c609c9
Parent:
2:dbaf3140560a
SENSORE TEMP

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pinofal 2:dbaf3140560a 1 // Tested: NUCLEO-F207ZG
pinofal 2:dbaf3140560a 2 #include "mbed.h"
pinofal 2:dbaf3140560a 3
pinofal 2:dbaf3140560a 4 // numero di acqusizioni su cui effettuare la media della temperatura
pinofal 2:dbaf3140560a 5 #define NUMSAMPLE 300
pinofal 2:dbaf3140560a 6
MarcoBattista 3:dca542c609c9 7 AnalogIn InWave(PA_0);
pinofal 2:dbaf3140560a 8 Serial pc(USBTX, USBRX);
MarcoBattista 3:dca542c609c9 9 DigitalOut myRele(PC_3);
pinofal 2:dbaf3140560a 10
pinofal 2:dbaf3140560a 11 // Output LED di diagnostica
pinofal 2:dbaf3140560a 12 DigitalOut led1(LED1); // verde
pinofal 2:dbaf3140560a 13 DigitalOut led2(LED2); // blu
pinofal 2:dbaf3140560a 14 DigitalOut led3(LED3); // rosso
pinofal 2:dbaf3140560a 15
pinofal 2:dbaf3140560a 16
pinofal 2:dbaf3140560a 17 // ticker per l'acquisizione dell'onda con ADC
pinofal 2:dbaf3140560a 18 Ticker SamplingTicker;
pinofal 2:dbaf3140560a 19
pinofal 2:dbaf3140560a 20 // carattere in arrivo dal PC ed equivalente numerico
pinofal 2:dbaf3140560a 21 volatile char cReadChar;
pinofal 2:dbaf3140560a 22 volatile int nReadChar;
pinofal 2:dbaf3140560a 23
pinofal 2:dbaf3140560a 24 // flag che diventa true quando si vuole fermare l'acquisizione
pinofal 2:dbaf3140560a 25 volatile bool bStop;
pinofal 2:dbaf3140560a 26
pinofal 2:dbaf3140560a 27 // valore letto dall'ADC e corrispondente in tensione
MarcoBattista 3:dca542c609c9 28 volatile unsigned short usReadADCLux;
pinofal 2:dbaf3140560a 29 volatile float fReadVoltage;
pinofal 2:dbaf3140560a 30
pinofal 2:dbaf3140560a 31 // valore di temperatura letto dall'ADC
MarcoBattista 3:dca542c609c9 32 volatile float fLux;
pinofal 2:dbaf3140560a 33
pinofal 2:dbaf3140560a 34 //***************************
pinofal 2:dbaf3140560a 35 // Acquisizione da ADC
pinofal 2:dbaf3140560a 36 //***************************
pinofal 2:dbaf3140560a 37 void Sampling()
pinofal 2:dbaf3140560a 38 {
pinofal 2:dbaf3140560a 39 // indice per i cicli
pinofal 2:dbaf3140560a 40 int nIndex;
pinofal 2:dbaf3140560a 41 // valore medio della temperatura su NUMACQUISISIONI acquisizioni
MarcoBattista 3:dca542c609c9 42 float fAvgLux;
pinofal 2:dbaf3140560a 43
pinofal 2:dbaf3140560a 44 // se è stato inviato il comando Stop, non fare niente fino a nuovo comando
pinofal 2:dbaf3140560a 45 if(bStop)
pinofal 2:dbaf3140560a 46 {
pinofal 2:dbaf3140560a 47 }
pinofal 2:dbaf3140560a 48 else // se non è stato inviato il comando di bStop continua
pinofal 2:dbaf3140560a 49 {
pinofal 2:dbaf3140560a 50 // inizializza il valore medio della temperatura
MarcoBattista 3:dca542c609c9 51 fAvgLux=0.0;
pinofal 2:dbaf3140560a 52 for(nIndex=0; nIndex < NUMSAMPLE; nIndex++)
pinofal 2:dbaf3140560a 53 {
pinofal 2:dbaf3140560a 54 // acquisisce dato da ADC
MarcoBattista 3:dca542c609c9 55 usReadADCLux = InWave.read_u16();
MarcoBattista 3:dca542c609c9 56 fReadVoltage=(usReadADCLux*32767)/1.75; // converte in Volt il valore numerico letto dall'ADC
pinofal 2:dbaf3140560a 57 //fReadVoltage=InWave.read(); // acquisisce il valore dall'ADC come valore di tensione in volt
MarcoBattista 3:dca542c609c9 58 fLux=fReadVoltage;
MarcoBattista 3:dca542c609c9 59 fAvgLux+=fLux;
pinofal 2:dbaf3140560a 60 }
pinofal 2:dbaf3140560a 61 // calcola valore medio su NUMSAMPLE acquisizioni
MarcoBattista 3:dca542c609c9 62 fAvgLux/= NUMSAMPLE;
pinofal 2:dbaf3140560a 63
MarcoBattista 3:dca542c609c9 64 if(fAvgLux < 0.9)
pinofal 2:dbaf3140560a 65 {
MarcoBattista 3:dca542c609c9 66 // accendi il relè sotto i 0.9 lux
MarcoBattista 3:dca542c609c9 67 myRele =0x01 ;
pinofal 2:dbaf3140560a 68 }
pinofal 2:dbaf3140560a 69 else
pinofal 2:dbaf3140560a 70 {
MarcoBattista 3:dca542c609c9 71 myRele =0x00 ;
pinofal 2:dbaf3140560a 72 }
MarcoBattista 3:dca542c609c9 73 }
MarcoBattista 3:dca542c609c9 74
MarcoBattista 3:dca542c609c9 75 pc.printf("\n\r--- Digital= %d [Volt]; Luminosita'= %.2f [Lux] ---\n\r", usReadADCLux, fLux);
MarcoBattista 3:dca542c609c9 76
MarcoBattista 3:dca542c609c9 77
MarcoBattista 3:dca542c609c9 78
MarcoBattista 3:dca542c609c9 79
MarcoBattista 3:dca542c609c9 80 // invia il dato al PC
pinofal 2:dbaf3140560a 81 }
pinofal 2:dbaf3140560a 82
pinofal 2:dbaf3140560a 83
pinofal 2:dbaf3140560a 84
pinofal 2:dbaf3140560a 85
pinofal 2:dbaf3140560a 86 //*******************
pinofal 2:dbaf3140560a 87 // Loop Principale
pinofal 2:dbaf3140560a 88 //*******************
pinofal 2:dbaf3140560a 89 int main()
pinofal 2:dbaf3140560a 90 {
pinofal 2:dbaf3140560a 91 // periodo di campionamento
pinofal 2:dbaf3140560a 92 int nDeltaT;
pinofal 2:dbaf3140560a 93
MarcoBattista 3:dca542c609c9 94
pinofal 2:dbaf3140560a 95 // configura velocità della comunicazione seriale su USB-VirtualCom e invia messaggio di benvenuto
pinofal 2:dbaf3140560a 96 pc.baud(921600); //921600 bps
pinofal 2:dbaf3140560a 97 // messaggio di benvenuto
MarcoBattista 3:dca542c609c9 98 pc.printf("\r\nHey Bro! \r\n");
MarcoBattista 3:dca542c609c9 99 // pc.printf("\r\n*** Bluetooth Temp Acquisition ***\r\n");
pinofal 2:dbaf3140560a 100
pinofal 2:dbaf3140560a 101 // inizializza variabili
pinofal 2:dbaf3140560a 102 bStop=true;
pinofal 2:dbaf3140560a 103
MarcoBattista 3:dca542c609c9 104 /* test dei LED
pinofal 2:dbaf3140560a 105 led1=1; //Verde
pinofal 2:dbaf3140560a 106 wait_ms(1000);
pinofal 2:dbaf3140560a 107 led1=0;
pinofal 2:dbaf3140560a 108 led2=1; // Blu
pinofal 2:dbaf3140560a 109 wait_ms(1000);
pinofal 2:dbaf3140560a 110 led2=0;
pinofal 2:dbaf3140560a 111 led3=1; //Rosso
pinofal 2:dbaf3140560a 112 wait_ms(1000);
pinofal 2:dbaf3140560a 113 led3=0;
MarcoBattista 3:dca542c609c9 114 */
pinofal 2:dbaf3140560a 115
pinofal 2:dbaf3140560a 116
pinofal 2:dbaf3140560a 117 while(true)
pinofal 2:dbaf3140560a 118 {
MarcoBattista 3:dca542c609c9 119
MarcoBattista 3:dca542c609c9 120
pinofal 2:dbaf3140560a 121 // verifica se è arrivato un carattere dalla seriale del PC
pinofal 2:dbaf3140560a 122 if(pc.readable())
pinofal 2:dbaf3140560a 123 {
pinofal 2:dbaf3140560a 124 cReadChar = pc.getc(); // Read hyperterminal
pinofal 2:dbaf3140560a 125
pinofal 2:dbaf3140560a 126 if((cReadChar == 'S') || (cReadChar == 's')) // blocca acquisizione se riceve 'S' oppure 's'
pinofal 2:dbaf3140560a 127 {
pinofal 2:dbaf3140560a 128 bStop= true;
pinofal 2:dbaf3140560a 129 pc.printf("\n\r--- Acquisition Stopped ---\n\r");
pinofal 2:dbaf3140560a 130 }
pinofal 2:dbaf3140560a 131 if((cReadChar >= '0') && (cReadChar <='9'))
pinofal 2:dbaf3140560a 132 {
pinofal 2:dbaf3140560a 133 bStop = false;
pinofal 2:dbaf3140560a 134 nReadChar = cReadChar -'0'; //converte il carattere acquisito dal PC nel corrispondente valore numerico
pinofal 2:dbaf3140560a 135 nDeltaT = nReadChar; // sampling Period in sec
pinofal 2:dbaf3140560a 136 pc.printf("\n\r--- Acquisition Started DeltaT = %c ---\n\r", cReadChar);
pinofal 2:dbaf3140560a 137 SamplingTicker.attach(&Sampling,nDeltaT);
MarcoBattista 3:dca542c609c9 138 }
pinofal 2:dbaf3140560a 139 } //lettura da pc
pinofal 2:dbaf3140560a 140 } // while(true)
MarcoBattista 3:dca542c609c9 141 }