LEZIONE 10. Scrivere, in ambiente mbed, il codice di una applicazione che: • Effettui una conversione A/D ad un rate di 200 Hz; • Alla pressione di un tasto calcoli il valore min e max degli ultimi 100 campioni e li invii sul monitor seriale; • Ogni 2 sec. invii tramite monitor seriale la temperatura interna del micro.
Revision 0:a835fa07c700, committed 2022-01-18
- Comitter:
- domemort
- Date:
- Tue Jan 18 17:17:22 2022 +0000
- Commit message:
- .
Changed in this revision
diff -r 000000000000 -r a835fa07c700 .gitignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.gitignore Tue Jan 18 17:17:22 2022 +0000 @@ -0,0 +1,4 @@ +.build +.mbed +projectfiles +*.py*
diff -r 000000000000 -r a835fa07c700 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Jan 18 17:17:22 2022 +0000 @@ -0,0 +1,91 @@ +#include "mbed.h" +#include "platform/mbed_thread.h" +#include "platform/CircularBuffer.h" + +AnalogIn ain(A0); +BufferedSerial pc(USBTX, USBRX, 115200); +Ticker conv; +Thread t(osPriorityBelowNormal, 16 * 1024); +EventQueue coda; +CircularBuffer<uint16_t, 100> buffer; +uint16_t ADC_data; +uint16_t frame_start=0xBBAA; +uint16_t* ptr1; +bool flag; + +InterruptIn bottone(PC_13); +Mutex serial; + +Ticker temp; +AnalogIn adc_temp(ADC_TEMP); + + +void read_A0 (void); +void fun (void); +void ISR (void); +void read_temp (void); +void fun2 (void); + +int main() +{ + printf("Mbed OS version %d.%d.%d.\r\n", MBED_MAJOR_VERSION, MBED_MINOR_VERSION, MBED_PATCH_VERSION); + ptr1 = &frame_start; + t.start(callback(&coda, &EventQueue::dispatch_forever)); + conv.attach(&read_A0, 5ms); + bottone.rise(&ISR); + temp.attach(&read_temp, 2s); + while(1) { + if(flag) { + ADC_data = ain.read_u16()>>4; + buffer.push(ADC_data); + flag = false; + ThisThread::sleep_for(4ms); + } + } +} + +void read_A0 (void) +{ + flag = true; +} + +void ISR (void) +{ + coda.call(&fun); +} + +void read_temp (void) +{ + coda.call(&fun2); +} + +void fun (void) +{ + uint16_t vettore[100]; + uint16_t massimo; + uint16_t minimo; + + buffer.pop(vettore); + for (int i=0; i<99; i++) { + massimo = vettore[0]; + if (vettore[i]>massimo) { + massimo = vettore[i]; + } + minimo = vettore[0]; + if (vettore[i]<minimo) { + minimo = vettore[i]; + } + } + float massimo2 = massimo*3.3/4096; + float minimo2 = minimo*3.3/4096; + serial.lock(); + printf("massimo = %1.3f,\t minimo = %1.3f\n\r" , massimo2, minimo2); + serial.unlock(); +} + +void fun2(void){ + float tempp = adc_temp.read()*100; + serial.lock(); + printf("Il valore di temperatura e': %1.3f\n\r" , tempp); + serial.unlock(); +} \ No newline at end of file
diff -r 000000000000 -r a835fa07c700 mbed-os.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-os.lib Tue Jan 18 17:17:22 2022 +0000 @@ -0,0 +1,1 @@ +https://github.com/ARMmbed/mbed-os/#4cfbea43cabe86bc3ed7a5287cd464be7a218938
diff -r 000000000000 -r a835fa07c700 mbed_app.json --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed_app.json Tue Jan 18 17:17:22 2022 +0000 @@ -0,0 +1,8 @@ +{ + "target_overrides": { + "*": { + "target.printf_lib": "std" + } + + } +}