noop din
/
ADCandticker_sample
the code for Lab3
Fork of ADCandticker_sample by
Diff: main.cpp
- Revision:
- 2:f7c24790b1ad
- Parent:
- 1:126dd2f5fc2d
- Child:
- 3:2db0cd79282b
--- a/main.cpp Wed Jan 24 21:55:43 2018 +0000 +++ b/main.cpp Fri Feb 09 20:57:12 2018 +0000 @@ -7,10 +7,55 @@ 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); Serial pc(USBTX, USBRX); // tx, rx, for debugging +DigitalIn b1(PTE1,PullUp); +Thread pollT ; // thread to poll +volatile int pressEvent = 0 ; // Variabe set by the polling thread +volatile int maxvolt = 330; + +/// implement the botton + + +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); + } +} + // end the button + // Message type typedef struct { uint16_t analog; /* Analog input value */ @@ -54,8 +99,17 @@ // Procss messages from mailbox int main() { led1 = 1 ; // turn off + led2 = 1; + led3 = 1; + led4 = 1; + led5 = 1; int volts = 0 ; const int threshold = 100 ; + const int threshold1 = 55 ; + const int threshold2 = 110 ; + const int threshold3 = 165 ; + const int threshold4 = 220 ; + const int threshold5 = 275 ; int counter = 0 ; char vstring[] = "X.XX\r\n" ; @@ -66,7 +120,24 @@ message_t* mess = (message_t*)evt.value.p ; volts = (mess->analog * 330) / 0xffff ; mailbox.free(mess) ; // free the message space - if (volts > threshold) led1 = 0 ; else led1 = 1 ; + + //press event + + if(pressEvent) + { + pressEvent =0; + maxvolt = volts; + //threshold= maxvolt / 6; + } + + + // End of the pressEvent + + if (volts > threshold1) led1 = 1 ; else led1 = 0 ; + if (volts > threshold2) led2 = 1 ; else led2 = 0 ; + if (volts > threshold3) led3 = 1 ; else led3 = 0 ; + if (volts > threshold4) led4 = 1 ; else led4 = 0 ; + if (volts > threshold5) led5 = 1 ; else led5 = 0 ; vToString(volts, vstring) ; counter++ ; if (counter == 10) { // limit bandwidth of serial