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
Revision 2:353e0bd2cb35, committed 2018-02-09
- Comitter:
- AnastasiosBarlas
- Date:
- Fri Feb 09 23:29:32 2018 +0000
- Parent:
- 1:126dd2f5fc2d
- Commit message:
- Version 1
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed Jan 24 21:55:43 2018 +0000 +++ b/main.cpp Fri Feb 09 23:29:32 2018 +0000 @@ -1,4 +1,3 @@ - // LAB 3 SAMPLE PROGRAM 1 // Revised for mbed 5 @@ -7,7 +6,48 @@ Ticker tick; // Ticker for reading analog AnalogIn ain(A0) ; // Analog input -DigitalOut led1(LED_RED); // Red LED +DigitalOut led1(D8); // Red LED +DigitalOut led2(D9); +DigitalOut led3(D10); +DigitalOut led4(D11); +DigitalOut led5(D12); + +DigitalIn b1(PTE1, PullUp); + +Thread pollT ; // thread to poll +volatile int pressEvent = 0 ; // Variabe set by the polling thread + +enum buttonPos { up, down, bounce }; // Button positions +void polling() { + buttonPos pos = up ; + int bcounter = 0 ; + while (true) { + switch (pos) { + case up : + if (!b1.read()) { // now down + pressEvent = 1 ; // transition occurred + pos = down ; + } + break ; + case down : + if (b1 == 1) { // no longer down + bcounter = 3 ; // wait four cycles + pos = bounce ; + } + break ; + case bounce : + if (b1 == 0) { // down again - button has bounced + pos = down ; // no event + } else if (bcounter == 0) { + pos = up ; // delay passed - reset to up + } else { + bcounter-- ; // continue waiting + } + break ; + } + Thread::wait(30); + } +} Serial pc(USBTX, USBRX); // tx, rx, for debugging @@ -53,9 +93,20 @@ // Attach ISR for ticker // Procss messages from mailbox int main() { - led1 = 1 ; // turn off + + + pollT.start(callback(polling)); + int firstled; + int secondled; + int thirdled; + int fourthled; + int fifthled; + volatile int max = 330; + // led1 = 1 ; // turn off int volts = 0 ; - const int threshold = 100 ; + // const int threshold = 100 ; + + int counter = 0 ; char vstring[] = "X.XX\r\n" ; @@ -65,8 +116,25 @@ if (evt.status == osEventMail) { message_t* mess = (message_t*)evt.value.p ; volts = (mess->analog * 330) / 0xffff ; + if (pressEvent) { + pressEvent = 0 ; // clear the event variable + max=volts ; + } mailbox.free(mess) ; // free the message space - if (volts > threshold) led1 = 0 ; else led1 = 1 ; + + firstled = max*2/6; +secondled = max*3/6; +thirdled = max*4/6; +fourthled = max*5/6; +fifthled = max; + if (volts >= firstled) led1 = 1 ; else led1 = 0 ; + if (volts >= secondled) led2 = 1; else led2 = 0; + if (volts >=thirdled) led3 = 1; else led3 = 0; + if (volts >= fourthled) led4 = 1; else led4 = 0; + if (volts >= fifthled) led5 = 1; else led5 = 0; + + + vToString(volts, vstring) ; counter++ ; if (counter == 10) { // limit bandwidth of serial @@ -76,4 +144,4 @@ } } -} +} \ No newline at end of file