Adesso funziona...

Dependencies:   mbed

Fork of TempSensorBATTISTA by Amaldi

Committer:
pinofal
Date:
Thu Jun 21 12:11:46 2018 +0000
Revision:
4:3618e28647e5
Parent:
3:dca542c609c9
Adesso funziona...

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
pinofal 4:3618e28647e5 62 fAvgLux = fAvgLux/NUMSAMPLE;
pinofal 2:dbaf3140560a 63
MarcoBattista 3:dca542c609c9 64 if(fAvgLux < 0.9)
pinofal 2:dbaf3140560a 65 {
pinofal 4:3618e28647e5 66 // accendi il relè sotto i 0.9 lux
pinofal 4:3618e28647e5 67 myRele =0x01 ;
pinofal 2:dbaf3140560a 68 }
pinofal 2:dbaf3140560a 69 else
pinofal 2:dbaf3140560a 70 {
pinofal 4:3618e28647e5 71 // spegni il relè sopra i 0.9 lux
pinofal 4:3618e28647e5 72 myRele =0x00 ;
pinofal 2:dbaf3140560a 73 }
pinofal 4:3618e28647e5 74 // invia il dato al PC
pinofal 4:3618e28647e5 75 pc.printf("\n\r--- Digital= %d [Volt]; Luminosita'= %.2f [Lux] ---\n\r", usReadADCLux, fAvgLux);
pinofal 4:3618e28647e5 76 }
MarcoBattista 3:dca542c609c9 77
MarcoBattista 3:dca542c609c9 78 // invia il dato al PC
pinofal 4:3618e28647e5 79 }
pinofal 2:dbaf3140560a 80
pinofal 2:dbaf3140560a 81
pinofal 2:dbaf3140560a 82
pinofal 2:dbaf3140560a 83
pinofal 2:dbaf3140560a 84 //*******************
pinofal 2:dbaf3140560a 85 // Loop Principale
pinofal 2:dbaf3140560a 86 //*******************
pinofal 2:dbaf3140560a 87 int main()
pinofal 2:dbaf3140560a 88 {
pinofal 2:dbaf3140560a 89 // periodo di campionamento
pinofal 2:dbaf3140560a 90 int nDeltaT;
pinofal 2:dbaf3140560a 91
MarcoBattista 3:dca542c609c9 92
pinofal 2:dbaf3140560a 93 // configura velocità della comunicazione seriale su USB-VirtualCom e invia messaggio di benvenuto
pinofal 2:dbaf3140560a 94 pc.baud(921600); //921600 bps
pinofal 2:dbaf3140560a 95 // messaggio di benvenuto
pinofal 4:3618e28647e5 96 pc.printf("\r\nHey Bro! Say Goodbye to your Sister !\r\n");
pinofal 4:3618e28647e5 97 pc.printf("Enter Acquisition Time, DeltaT[sec]= [1 - 9]: \r\n");
MarcoBattista 3:dca542c609c9 98 // pc.printf("\r\n*** Bluetooth Temp Acquisition ***\r\n");
pinofal 2:dbaf3140560a 99
pinofal 2:dbaf3140560a 100 // inizializza variabili
pinofal 2:dbaf3140560a 101 bStop=true;
pinofal 4:3618e28647e5 102 myRele = 0x00; // spegni il relè
pinofal 2:dbaf3140560a 103
pinofal 4:3618e28647e5 104 // test dei LED
pinofal 2:dbaf3140560a 105 led1=1; //Verde
pinofal 4:3618e28647e5 106 wait_ms(500);
pinofal 2:dbaf3140560a 107 led1=0;
pinofal 2:dbaf3140560a 108 led2=1; // Blu
pinofal 4:3618e28647e5 109 wait_ms(500);
pinofal 2:dbaf3140560a 110 led2=0;
pinofal 2:dbaf3140560a 111 led3=1; //Rosso
pinofal 4:3618e28647e5 112 wait_ms(500);
pinofal 2:dbaf3140560a 113 led3=0;
pinofal 4:3618e28647e5 114
pinofal 2:dbaf3140560a 115
pinofal 2:dbaf3140560a 116 while(true)
pinofal 2:dbaf3140560a 117 {
pinofal 2:dbaf3140560a 118 // verifica se è arrivato un carattere dalla seriale del PC
pinofal 2:dbaf3140560a 119 if(pc.readable())
pinofal 2:dbaf3140560a 120 {
pinofal 4:3618e28647e5 121 // Read hyperterminal
pinofal 4:3618e28647e5 122 cReadChar = pc.getc();
pinofal 2:dbaf3140560a 123
pinofal 4:3618e28647e5 124 // blocca acquisizione se riceve 'S' oppure 's'
pinofal 4:3618e28647e5 125 if((cReadChar == 'S') || (cReadChar == 's'))
pinofal 2:dbaf3140560a 126 {
pinofal 2:dbaf3140560a 127 bStop= true;
pinofal 2:dbaf3140560a 128 pc.printf("\n\r--- Acquisition Stopped ---\n\r");
pinofal 2:dbaf3140560a 129 }
pinofal 4:3618e28647e5 130 // il tempo di acquisizione può essere tra 1 e 9 secondi
pinofal 4:3618e28647e5 131 if((cReadChar >= '1') && (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 }