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.
Fork of ADCandticker_sample by
main.cpp
00001 00002 // LAB 3 SAMPLE PROGRAM 1 00003 // Revised for mbed 5 00004 00005 #include "mbed.h" 00006 00007 00008 Ticker tick; // Ticker for reading analog 00009 AnalogIn ain(A0) ; // Analog input 00010 DigitalOut led1(PTA13); // Red LED 00011 DigitalOut led2(PTD3); // Red LED 00012 DigitalOut led3(PTD2); // Red LED 00013 DigitalOut led4(PTD0); // Red LED 00014 DigitalOut led5(PTD5); // Red LED 00015 00016 00017 Serial pc(USBTX, USBRX); // tx, rx, for debugging 00018 00019 // Message type 00020 typedef struct { 00021 uint16_t analog; /* Analog input value */ 00022 } message_t; 00023 00024 // Mail box 00025 Mail<message_t, 2> mailbox; 00026 00027 // Function called every 10ms to read ADC 00028 // Low pass filter 00029 // Every 10th value is sent to mailbox 00030 volatile int samples = 0 ; 00031 volatile uint16_t smoothed = 0 ; 00032 void readA0() 00033 { 00034 smoothed = (smoothed >> 1) + (ain.read_u16() >> 1) ; 00035 samples++ ; 00036 if (samples == 10) { 00037 // send to thread 00038 message_t *mess = mailbox.alloc() ; // may fail but does not block 00039 if (mess) { 00040 mess->analog = smoothed ; 00041 mailbox.put(mess); // fails but does not block if full 00042 } 00043 samples = 0; 00044 } 00045 } 00046 00047 // Write voltage digits 00048 // v Voltage as scale int, e.g. 3.30 is 330 00049 void vToString(int v, char* s) 00050 { 00051 s[3] = '0' + (v % 10) ; 00052 v = v / 10 ; 00053 s[2] = '0' + (v % 10) ; 00054 v = v / 10 ; 00055 s[0] = '0' + (v % 10) ; 00056 } 00057 00058 // Main program 00059 // Initialise variables 00060 // Attach ISR for ticker 00061 // Procss messages from mailbox 00062 int main() 00063 { 00064 led1 = 1 ; // turn off 00065 int volts = 0 ; 00066 const int threshold = 100 ; 00067 int counter = 0 ; 00068 char vstring[] = "X.XX\r\n" ; 00069 00070 tick.attach_us(callback(&readA0), 10000); // ticks every 10ms 00071 while (true) { 00072 osEvent evt = mailbox.get(); // wait for mail 00073 if (evt.status == osEventMail) { 00074 message_t* mess = (message_t*)evt.value.p ; 00075 volts = (mess->analog * 330) / 0xffff ; 00076 mailbox.free(mess) ; // free the message space 00077 if (volts > 55 && volts < 109) { 00078 led1 = 1 ; 00079 led2 = 0 ; 00080 led3 = 0 ; 00081 led4 = 0 ; 00082 led5 = 0 ; 00083 } else if (volts > 110 && volts < 164) { 00084 led1 = 1 ; 00085 led2 = 1 ; 00086 led3 = 0 ; 00087 led4 = 0 ; 00088 led5 = 0 ; 00089 } else if (volts > 165 && volts < 219) { 00090 led1 = 1 ; 00091 led2 = 1 ; 00092 led3 = 1 ; 00093 led4 = 0 ; 00094 led5 = 0 ; 00095 } else if (volts > 220 && volts < 274) { 00096 led1 = 1 ; 00097 led2 = 1 ; 00098 led3 = 1 ; 00099 led4 = 1 ; 00100 led5 = 0 ; 00101 } else if (volts > 275) { 00102 led1 = 1 ; 00103 led2 = 1 ; 00104 led3 = 1 ; 00105 led4 = 1 ; 00106 led5 = 1 ; 00107 } else { 00108 led1 = 0 ; 00109 led2 = 0 ; 00110 led3 = 0 ; 00111 led4 = 0 ; 00112 led5 = 0 ; 00113 } 00114 vToString(volts, vstring) ; 00115 counter++ ; 00116 if (counter == 10) { // limit bandwidth of serial 00117 pc.printf(vstring) ; 00118 counter = 0 ; 00119 } 00120 } 00121 00122 } 00123 }
Generated on Tue Aug 2 2022 05:56:56 by
1.7.2
