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
LightSensor.cpp@2:2b7dc4f24d04, 2018-05-18 (annotated)
- Committer:
- pinofal
- Date:
- Fri May 18 13:34:28 2018 +0000
- Revision:
- 2:2b7dc4f24d04
Amaldi Exercise 8
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pinofal | 2:2b7dc4f24d04 | 1 | // Tested: NUCLEO-F207ZG |
pinofal | 2:2b7dc4f24d04 | 2 | #include "mbed.h" |
pinofal | 2:2b7dc4f24d04 | 3 | |
pinofal | 2:2b7dc4f24d04 | 4 | // numero di acqusizioni su cui effettuare la media della luminosità |
pinofal | 2:2b7dc4f24d04 | 5 | #define NUMSAMPLE 300 |
pinofal | 2:2b7dc4f24d04 | 6 | |
pinofal | 2:2b7dc4f24d04 | 7 | AnalogIn InWave(PF_3); |
pinofal | 2:2b7dc4f24d04 | 8 | Serial pc(USBTX, USBRX); |
pinofal | 2:2b7dc4f24d04 | 9 | |
pinofal | 2:2b7dc4f24d04 | 10 | |
pinofal | 2:2b7dc4f24d04 | 11 | // Output LED di diagnostica |
pinofal | 2:2b7dc4f24d04 | 12 | DigitalOut led1(LED1); // verde |
pinofal | 2:2b7dc4f24d04 | 13 | DigitalOut led2(LED2); // blu |
pinofal | 2:2b7dc4f24d04 | 14 | DigitalOut led3(LED3); // rosso |
pinofal | 2:2b7dc4f24d04 | 15 | |
pinofal | 2:2b7dc4f24d04 | 16 | |
pinofal | 2:2b7dc4f24d04 | 17 | // ticker per l'acquisizione dell'onda con ADC |
pinofal | 2:2b7dc4f24d04 | 18 | Ticker SamplingTicker; |
pinofal | 2:2b7dc4f24d04 | 19 | |
pinofal | 2:2b7dc4f24d04 | 20 | // carattere in arrivo dal PC ed equivalente numerico |
pinofal | 2:2b7dc4f24d04 | 21 | volatile char cReadChar; |
pinofal | 2:2b7dc4f24d04 | 22 | volatile int nReadChar; |
pinofal | 2:2b7dc4f24d04 | 23 | |
pinofal | 2:2b7dc4f24d04 | 24 | // flag che diventa true quando si vuole fermare l'acquisizione |
pinofal | 2:2b7dc4f24d04 | 25 | volatile bool bStop; |
pinofal | 2:2b7dc4f24d04 | 26 | |
pinofal | 2:2b7dc4f24d04 | 27 | // valore letto dall'ADC e corrispondente in tensione |
pinofal | 2:2b7dc4f24d04 | 28 | volatile unsigned short usReadADC; |
pinofal | 2:2b7dc4f24d04 | 29 | volatile float fReadVoltage; |
pinofal | 2:2b7dc4f24d04 | 30 | |
pinofal | 2:2b7dc4f24d04 | 31 | // valore di luminosità letto dall'ADC |
pinofal | 2:2b7dc4f24d04 | 32 | volatile float fLight; |
pinofal | 2:2b7dc4f24d04 | 33 | |
pinofal | 2:2b7dc4f24d04 | 34 | //*************************** |
pinofal | 2:2b7dc4f24d04 | 35 | // Acquisizione da ADC |
pinofal | 2:2b7dc4f24d04 | 36 | //*************************** |
pinofal | 2:2b7dc4f24d04 | 37 | void Sampling() |
pinofal | 2:2b7dc4f24d04 | 38 | { |
pinofal | 2:2b7dc4f24d04 | 39 | // indice per i cicli |
pinofal | 2:2b7dc4f24d04 | 40 | int nIndex; |
pinofal | 2:2b7dc4f24d04 | 41 | // valore medio della Luminosità su NUMACQUISISIONI acquisizioni |
pinofal | 2:2b7dc4f24d04 | 42 | float fAvgLight; |
pinofal | 2:2b7dc4f24d04 | 43 | |
pinofal | 2:2b7dc4f24d04 | 44 | // se è stato inviato il comando Stop, non fare niente fino a nuovo comando |
pinofal | 2:2b7dc4f24d04 | 45 | if(bStop) |
pinofal | 2:2b7dc4f24d04 | 46 | { |
pinofal | 2:2b7dc4f24d04 | 47 | } |
pinofal | 2:2b7dc4f24d04 | 48 | else // se non è stato inviato il comando di bStop continua |
pinofal | 2:2b7dc4f24d04 | 49 | { |
pinofal | 2:2b7dc4f24d04 | 50 | // inizializza il valore medio della Luminosità |
pinofal | 2:2b7dc4f24d04 | 51 | fAvgLight=0.0; |
pinofal | 2:2b7dc4f24d04 | 52 | for(nIndex=0; nIndex < NUMSAMPLE; nIndex++) |
pinofal | 2:2b7dc4f24d04 | 53 | { |
pinofal | 2:2b7dc4f24d04 | 54 | // acquisisce dato da ADC |
pinofal | 2:2b7dc4f24d04 | 55 | usReadADC = InWave.read_u16(); |
pinofal | 2:2b7dc4f24d04 | 56 | fReadVoltage=(usReadADC*3.3)/65535.0; // converte in Volt il valore numerico letto dall'ADC |
pinofal | 2:2b7dc4f24d04 | 57 | //fReadVoltage=InWave.read(); // acquisisce il valore dall'ADC come valore di tensione in volt |
pinofal | 2:2b7dc4f24d04 | 58 | fLight= fReadVoltage; //ATTENZIONE Visualizza il valore grezzo letto dall'ADC |
pinofal | 2:2b7dc4f24d04 | 59 | fAvgLight+=fLight; |
pinofal | 2:2b7dc4f24d04 | 60 | } |
pinofal | 2:2b7dc4f24d04 | 61 | // calcola valore medio su NUMSAMPLE acquisizioni |
pinofal | 2:2b7dc4f24d04 | 62 | fAvgLight/= NUMSAMPLE; |
pinofal | 2:2b7dc4f24d04 | 63 | |
pinofal | 2:2b7dc4f24d04 | 64 | // accendi LED in base a superamento soglie |
pinofal | 2:2b7dc4f24d04 | 65 | if (fAvgLight <= 21845.0) |
pinofal | 2:2b7dc4f24d04 | 66 | { |
pinofal | 2:2b7dc4f24d04 | 67 | // accendi LED Blu sotto 0.3*valore massimo (65535) |
pinofal | 2:2b7dc4f24d04 | 68 | led1=0; |
pinofal | 2:2b7dc4f24d04 | 69 | led2=1; |
pinofal | 2:2b7dc4f24d04 | 70 | led3=0; |
pinofal | 2:2b7dc4f24d04 | 71 | } |
pinofal | 2:2b7dc4f24d04 | 72 | else |
pinofal | 2:2b7dc4f24d04 | 73 | { |
pinofal | 2:2b7dc4f24d04 | 74 | if(fAvgLight >= .0) |
pinofal | 2:2b7dc4f24d04 | 75 | { |
pinofal | 2:2b7dc4f24d04 | 76 | // accendi LED Rosso 0.6*valore massimo |
pinofal | 2:2b7dc4f24d04 | 77 | led1=0; |
pinofal | 2:2b7dc4f24d04 | 78 | led2=0; |
pinofal | 2:2b7dc4f24d04 | 79 | led3=1; |
pinofal | 2:2b7dc4f24d04 | 80 | } |
pinofal | 2:2b7dc4f24d04 | 81 | else |
pinofal | 2:2b7dc4f24d04 | 82 | { |
pinofal | 2:2b7dc4f24d04 | 83 | // accendi LED verde (0.3 e 0.6)*valore massimo |
pinofal | 2:2b7dc4f24d04 | 84 | led1=1; |
pinofal | 2:2b7dc4f24d04 | 85 | led2=0; |
pinofal | 2:2b7dc4f24d04 | 86 | led3=0; |
pinofal | 2:2b7dc4f24d04 | 87 | } |
pinofal | 2:2b7dc4f24d04 | 88 | } |
pinofal | 2:2b7dc4f24d04 | 89 | |
pinofal | 2:2b7dc4f24d04 | 90 | |
pinofal | 2:2b7dc4f24d04 | 91 | |
pinofal | 2:2b7dc4f24d04 | 92 | |
pinofal | 2:2b7dc4f24d04 | 93 | // invia il dato al PC |
pinofal | 2:2b7dc4f24d04 | 94 | //pc.printf("\n\r--- Voltage= %.1f [Volt]; Brightness= %.1f [Celsius] ---\n\r", fReadVoltage, fLight); |
pinofal | 2:2b7dc4f24d04 | 95 | pc.printf("\n\r--- Digital= %d [Volt]; Brightness= %.2f [Celsius] ---\n\r", usReadADC, fLight); |
pinofal | 2:2b7dc4f24d04 | 96 | |
pinofal | 2:2b7dc4f24d04 | 97 | |
pinofal | 2:2b7dc4f24d04 | 98 | |
pinofal | 2:2b7dc4f24d04 | 99 | /* |
pinofal | 2:2b7dc4f24d04 | 100 | // prepara il pacchetto di dati acquisiti da restituire al PC |
pinofal | 2:2b7dc4f24d04 | 101 | caTxPacket[nSampleInCount]= (char)(usReadADC&0xFF); |
pinofal | 2:2b7dc4f24d04 | 102 | //+++caTxPacket[nSampleInCount]= 'a'; |
pinofal | 2:2b7dc4f24d04 | 103 | nSampleInCount++; |
pinofal | 2:2b7dc4f24d04 | 104 | caTxPacket[nSampleInCount] = (char)((usReadADC>>8)&0xFF); |
pinofal | 2:2b7dc4f24d04 | 105 | //++++caTxPacket[nSampleInCount]= 'b'; |
pinofal | 2:2b7dc4f24d04 | 106 | */ |
pinofal | 2:2b7dc4f24d04 | 107 | |
pinofal | 2:2b7dc4f24d04 | 108 | } |
pinofal | 2:2b7dc4f24d04 | 109 | } |
pinofal | 2:2b7dc4f24d04 | 110 | |
pinofal | 2:2b7dc4f24d04 | 111 | |
pinofal | 2:2b7dc4f24d04 | 112 | |
pinofal | 2:2b7dc4f24d04 | 113 | |
pinofal | 2:2b7dc4f24d04 | 114 | //******************* |
pinofal | 2:2b7dc4f24d04 | 115 | // Loop Principale |
pinofal | 2:2b7dc4f24d04 | 116 | //******************* |
pinofal | 2:2b7dc4f24d04 | 117 | int main() |
pinofal | 2:2b7dc4f24d04 | 118 | { |
pinofal | 2:2b7dc4f24d04 | 119 | // periodo di campionamento |
pinofal | 2:2b7dc4f24d04 | 120 | int nDeltaT; |
pinofal | 2:2b7dc4f24d04 | 121 | |
pinofal | 2:2b7dc4f24d04 | 122 | // inizializza variabili |
pinofal | 2:2b7dc4f24d04 | 123 | bStop=true; |
pinofal | 2:2b7dc4f24d04 | 124 | |
pinofal | 2:2b7dc4f24d04 | 125 | // configura velocità della comunicazione seriale su USB-VirtualCom e invia messaggio di benvenuto |
pinofal | 2:2b7dc4f24d04 | 126 | pc.baud(921600); //921600 bps |
pinofal | 2:2b7dc4f24d04 | 127 | |
pinofal | 2:2b7dc4f24d04 | 128 | // messaggio di benvenuto |
pinofal | 2:2b7dc4f24d04 | 129 | pc.printf("\r\nHallo Amaldi Students - Exercise 8 \r\n"); |
pinofal | 2:2b7dc4f24d04 | 130 | pc.printf("\r\n*** Light Acquisition ***\r\n"); |
pinofal | 2:2b7dc4f24d04 | 131 | |
pinofal | 2:2b7dc4f24d04 | 132 | // test dei LED |
pinofal | 2:2b7dc4f24d04 | 133 | led1=1; //Verde |
pinofal | 2:2b7dc4f24d04 | 134 | wait_ms(1000); |
pinofal | 2:2b7dc4f24d04 | 135 | led1=0; |
pinofal | 2:2b7dc4f24d04 | 136 | led2=1; // Blu |
pinofal | 2:2b7dc4f24d04 | 137 | wait_ms(1000); |
pinofal | 2:2b7dc4f24d04 | 138 | led2=0; |
pinofal | 2:2b7dc4f24d04 | 139 | led3=1; //Rosso |
pinofal | 2:2b7dc4f24d04 | 140 | wait_ms(1000); |
pinofal | 2:2b7dc4f24d04 | 141 | led3=0; |
pinofal | 2:2b7dc4f24d04 | 142 | |
pinofal | 2:2b7dc4f24d04 | 143 | |
pinofal | 2:2b7dc4f24d04 | 144 | |
pinofal | 2:2b7dc4f24d04 | 145 | while(true) |
pinofal | 2:2b7dc4f24d04 | 146 | { |
pinofal | 2:2b7dc4f24d04 | 147 | // verifica se è arrivato un carattere dalla seriale del PC |
pinofal | 2:2b7dc4f24d04 | 148 | if(pc.readable()) |
pinofal | 2:2b7dc4f24d04 | 149 | { |
pinofal | 2:2b7dc4f24d04 | 150 | cReadChar = pc.getc(); // Read hyperterminal |
pinofal | 2:2b7dc4f24d04 | 151 | |
pinofal | 2:2b7dc4f24d04 | 152 | if((cReadChar == 'S') || (cReadChar == 's')) // blocca acquisizione se riceve 'S' oppure 's' |
pinofal | 2:2b7dc4f24d04 | 153 | { |
pinofal | 2:2b7dc4f24d04 | 154 | bStop= true; |
pinofal | 2:2b7dc4f24d04 | 155 | pc.printf("\n\r--- Acquisition Stopped ---\n\r"); |
pinofal | 2:2b7dc4f24d04 | 156 | } |
pinofal | 2:2b7dc4f24d04 | 157 | if((cReadChar >= '0') && (cReadChar <='9')) |
pinofal | 2:2b7dc4f24d04 | 158 | { |
pinofal | 2:2b7dc4f24d04 | 159 | bStop = false; |
pinofal | 2:2b7dc4f24d04 | 160 | nReadChar = cReadChar -'0'; //converte il carattere acquisito dal PC nel corrispondente valore numerico |
pinofal | 2:2b7dc4f24d04 | 161 | nDeltaT = nReadChar; // sampling Period in sec |
pinofal | 2:2b7dc4f24d04 | 162 | pc.printf("\n\r--- Acquisition Started DeltaT = %c ---\n\r", cReadChar); |
pinofal | 2:2b7dc4f24d04 | 163 | SamplingTicker.attach(&Sampling,nDeltaT); |
pinofal | 2:2b7dc4f24d04 | 164 | } |
pinofal | 2:2b7dc4f24d04 | 165 | |
pinofal | 2:2b7dc4f24d04 | 166 | } //lettura da pc |
pinofal | 2:2b7dc4f24d04 | 167 | } // while(true) |
pinofal | 2:2b7dc4f24d04 | 168 | } |
pinofal | 2:2b7dc4f24d04 | 169 | |
pinofal | 2:2b7dc4f24d04 | 170 | |
pinofal | 2:2b7dc4f24d04 | 171 | |
pinofal | 2:2b7dc4f24d04 | 172 | |
pinofal | 2:2b7dc4f24d04 | 173 | |
pinofal | 2:2b7dc4f24d04 | 174 | |
pinofal | 2:2b7dc4f24d04 | 175 | |
pinofal | 2:2b7dc4f24d04 | 176 | |
pinofal | 2:2b7dc4f24d04 | 177 | |
pinofal | 2:2b7dc4f24d04 | 178 | |
pinofal | 2:2b7dc4f24d04 | 179 | |
pinofal | 2:2b7dc4f24d04 | 180 | |
pinofal | 2:2b7dc4f24d04 | 181 | |
pinofal | 2:2b7dc4f24d04 | 182 |