the code for Lab3

Fork of ADCandticker_sample by William Marsh

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