reading a group of switches or one only

Dependencies:   Hotboards_switches mbed

Revision:
0:03e6fa9721e8
Child:
1:5a47f2b970eb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Mar 02 20:33:31 2016 +0000
@@ -0,0 +1,70 @@
+
+/*
+ * Read the value from 4 sw's (dip switch) and also read the value from a single sw.
+ */
+ 
+#include "mbed.h"
+#include "Hotboards_switches.h"
+
+// Creates two sw objects, this interrupt will give us a LOW(0) value when close
+// because our dip switch works with pull-ups.
+Hotboards_switches dip1( PA_9 , PA_8 , PB_10 , PB_4 );
+Hotboards_switches sw1( PA_6 );
+// If your dip switch will gave you a HIGH(1) value when close, then we need to create
+// the sw object with an extra parameter: 
+// Hotboards_switches dip1( PA_9 , PA_8 , PB_10 , PB_4 , 1 );
+// Hotboards_swtiches sw1( PA_6 , 1 );
+// In any case the function will return a HIGH(1) value any time the sw is closed
+
+//For this example we will use the USB serial port, here we initialize it
+Serial pc(USBTX,USBRX);
+
+int i, j;
+uint8_t binary, decimal;
+
+int main()
+{
+    while(1)
+    {
+        //Asks for the state of the sw1
+        if( sw1.read( ) )
+        {
+            pc.printf( "sw1     = close (on)\r" );
+        }
+        else
+        {
+            pc.printf( "sw1     = open (off)\r" );
+        }
+        //Asks for the state of an specific sw from the dip switch dip1
+        if( dip1.read( 2 ) )
+        {
+            pc.printf( "dip sw2 = close (on)\r" );
+        }
+        else
+        {
+            pc.printf( "dip sw2 = open (off)\r" );
+        }
+        
+        // Reads the dip switch value and puts it in binary
+        binary = dip1.read();
+        // Inverts the read value to make it coincide with the state of each
+        // switch in binary
+        binary = ~binary;
+        // Applies a mask(00001111) to extract the value of the dip switch
+        decimal = binary&0x0F;
+        // Sends throught USB serial the value in decimal
+        pc.printf( "dec     = " );
+        pc.printf( "%d\r" , decimal );
+        // Sends through USB serial the value in binary
+        pc.printf( "bin     = " );
+        for(i=0;i<4;i++)            //Extracts and shows the binary value of each sw
+        { 
+            j = binary&0x08;        //Applies a mask(00001000) to extract the value of the bit in turn
+            j>>=3;                  //Moves this bit 3 positions to the right
+            pc.printf("%d",j);      //Sends through USB serial the value of the extracted bit
+            binary <<=1;            //Moves the position 1 bit to the left to extract the next bit
+        }
+        pc.printf( "\n\r" );
+        wait( 2 );
+    }
+}