Adesso funziona...
Dependencies: mbed
Fork of TempSensorBATTISTA by
TempSensor.cpp@4:3618e28647e5, 2018-06-21 (annotated)
- 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?
User | Revision | Line number | New 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 | } |