Testprogramm fuer den SMD IoTKit Shield.

Dependencies:   MFRC522 RemoteIR Servo StepperMotorUni mbed-rtos mbed ESP8266 RCSwitch SAA1064 TMP175

Revision:
2:e263949513ca
Parent:
1:be86d02cd130
Child:
3:880adec02196
diff -r be86d02cd130 -r e263949513ca main.cpp
--- a/main.cpp	Mon Mar 23 10:05:28 2015 +0000
+++ b/main.cpp	Mon Mar 23 12:43:38 2015 +0000
@@ -10,6 +10,8 @@
 #include <string>
 #include "ESP8266.h"
 #include "RCSwitch.h"
+#include "TMP175.h"
+#include "SAA1064.h"
 // Trace
 #include "trace.h"
 
@@ -18,16 +20,19 @@
 // Test vor- und rueckwaerts schalten
 InterruptIn button1( SW2 );
 InterruptIn button2( SW3 );
+
 void next()
 {
     test++;
+    if  ( test > 16 )
+        test = 0;
 }
 void previous()
 {
     if  ( test > 0 )
         test--;
     if  ( test == 0 )
-        test = 15;
+        test = 16;
 }
 
 /*------------------------------------------------------------------------
@@ -43,8 +48,9 @@
     AnalogIn poti( A0 );
     AnalogIn lightSensor( A1 );
     AnalogIn hallSensor( A2 );
+    AnalogIn audioSensor( A3 );    
     
-    printf( "Poti %f, Light %f, Hall %f\n", poti.read(), lightSensor.read(), hallSensor.read() );
+    printf( "Poti %f, Light %f, Hall %f Audio %f\n", poti.read(), lightSensor.read(), hallSensor.read(), audioSensor.read() );
 }
 
 /** LED's fortschalten */
@@ -52,12 +58,14 @@
 
 void doLedTicker()
 {
+    TRACE1( "LED Thread %d", led );
+    
     // LED's (Aktoren)
     DigitalOut led1(D10);
     DigitalOut led2(D11);
     DigitalOut led3(D12);
+    DigitalOut led4(D13);
     
-    TRACE1( "LED Thread %d", led );
     switch  ( led ) 
     {
         case 1:
@@ -69,8 +77,11 @@
         case 3:
             led3 = 1;
             break;
+        case 4:
+            led4 = 1;
+            break;
         default:
-            led1 = led2 = led3 = 0;
+            led1 = led2 = led3 = led4 = 0;
             led = 0;
             break;
     }
@@ -80,25 +91,26 @@
 /** Servo Thread */
 void doServoThread()
 {
-        INFO( "Servo Thread" );       
-        Servo bottom( A4 );
-        Servo arm( A5 ); 
-        
-        printf( "Servo 0 - 180\n" );
-        for ( float p = 0.1f; p < 1.0f; p += 0.001f ) 
-        {
-            bottom = p;
-            arm = p / 2;
-            Thread::wait( 1 ); // ACHTUNG: Millisekunden!!!
-        }
-        
-        printf( "Servo 180 - 0\n" );
-        for ( float p = 1.0f; p >= 0.1f; p -= 0.001f ) 
-        {
-            bottom = p;
-            arm = p / 2;
-            Thread::wait( 1 );
-        }
+    INFO( "Servo Thread" );
+    
+    Servo bottom( D9 );
+    Servo arm( D10 );
+
+    printf( "Servo 0 - 180\n" );
+    for ( float p = 0.1f; p < 1.0f; p += 0.001f ) 
+    {
+        bottom = p;
+        arm = p / 2;
+        Thread::wait( 1 ); // ACHTUNG: Millisekunden!!!
+    }
+
+    printf( "Servo 180 - 0\n" );
+    for ( float p = 1.0f; p >= 0.1f; p -= 0.001f ) 
+    {
+        bottom = p;
+        arm = p / 2;
+        Thread::wait( 1 );
+    }
 }
 /** Motor 1 Test */
 void doMotorThread()
@@ -137,17 +149,25 @@
 {
     INFO( "Stepper Thread" );     
     
-    StepperMotorUni motor( PTB18, PTB19, PTC1, PTC8 );
+    StepperMotorUni motor1( D2, D3, D4, D5 );
+    StepperMotorUni motor2( PTC5, PTC7, PTC0, PTC9 );
+    StepperMotorUni motor3( PTC8, PTC1, PTB19, PTB18 );
         
     // Motordrehzahl
-    motor.set_pps( 300 );
+    motor1.set_pps( 100 );
+    motor2.set_pps( 200 );
+    motor3.set_pps( 300 );
 
     printf( "Schrittmotor vorwaerts\n" );
-    motor.move_steps( 512 );
+    motor1.move_steps( 512 );
+    motor2.move_steps( 512 );
+    motor3.move_steps( 512 );
     Thread::wait( 3000 );
 
     printf( "Schrittmotor  rueckwaerts\n" );
-    motor.move_steps( -512 );
+    motor1.move_steps( -512 );
+    motor2.move_steps( -512 );
+    motor3.move_steps( -512 );
     Thread::wait( 3000 );
 }
 
@@ -303,9 +323,9 @@
 void doLEDStrip()
 {
     INFO( "LED Strip V12 Test" );
-    PwmOut green( D11 );
-    PwmOut red( D12 );
-    PwmOut blue( D13 );
+    PwmOut green( D5 );
+    PwmOut red( D6 );
+    PwmOut blue( D7 );
     
     LEDStripDim( red );
     LEDStripOff( red, green, blue );
@@ -437,10 +457,10 @@
 /** Buttons auf Shield */
 void doButtons()
 {
-    INFO ( "Buttons Test" );
-    DigitalIn button3( PTC0, PullUp );
-    DigitalIn button4( PTC7, PullUp );
-    DigitalIn button5( PTC9, PullUp );
+    INFO ( "Buttons Test -> press button" );
+    DigitalIn button3( A0, PullUp );
+    DigitalIn button4( A1, PullUp );
+    DigitalIn button5( A2, PullUp );
     
     while   ( 1 )
     {
@@ -473,9 +493,91 @@
     }
 }
 
+/** I2C Temperatorsensor */
+void doTempSensor()
+{
+    INFO( "Temperator Sensor Test" );
+    TMP175 mySensor( D14, D15 );
+    
+    float Temp;
+    mySensor.vSetConfigurationTMP175(SHUTDOWN_MODE_OFF|COMPARATOR_MODE|POLARITY_0|FAULT_QUEUE_6|RESOLUTION_12,0x48); // Address -> A0,A1,A2=0
+    mySensor.vSetTemperatureLowTMP175(25.0);
+    mySensor.vSetTemperatureHighTMP175(35.0);
+
+    for( int k = 0; k < 100; k++ ) 
+    {
+        Temp = mySensor;
+        printf( "Temperature: %f C\n",Temp);
+    }
+}
+
+/** LCD Test */
+void doLCD()
+{
+    INFO( "LCD Test" );
+    I2C i2c( D14, D15); // SDA, SCL
+    SAA1064 LED( &i2c ); // I2C bus, Default SAA1064 Slaveaddress
+
+    // Display 0, 1, 2, 3
+    LED.write(SAA1064_SEGM[0], SAA1064_SEGM[1], SAA1064_SEGM[2], SAA1064_SEGM[3]);
+    wait(1);
+
+    for  ( int count = 0; count < 150; count++ )
+        LED.writeInt(-150 + count, 3, false);  // Display value, dont suppress leading zero's
+}
+
+/** I2C Kommunikation mit Arduino */
+void doI2CArduino()
+{
+    INFO  ( "I2C Master Test\n" );
+    I2C i2c( D14, D15 );
+
+    // CMD Buffer (cmd, addr, arg)
+    char cmd[4] = { 0x00, 0x00, 0x00, 0x00 };
+    int slave = 0x10 << 1;
+    int status = 0;
+
+    // write I2C
+    for ( int i = 4; i <= 7; i++ ) 
+    {
+        cmd[0] = 'w';
+        cmd[1] = i;
+        cmd[2] = 1;
+        printf( "write to %d, %d - ", slave, (int) cmd[2] );
+        status = i2c.write( slave, cmd, 3 );
+        printf("Status %d\n", status );
+        wait( 1.0 );
+
+        cmd[0] = 'w';
+        cmd[1] = i;
+        cmd[2] = 0;
+        printf( "write to %d, %d - ", slave, (int) cmd[2] );
+        status = i2c.write( slave, cmd, 3 );
+        printf("Status %d\n", status );
+        wait( 0.5 );
+    }
+    // read I2C
+    i2c.read( slave, cmd, 2 );  // Arduino liefert einen Wert von 0 - 1024
+    printf  ( "Analog %d\n", (int) (cmd[0] * 256 + cmd[1])  );
+}
+
+/** Buzzer (Summer) */
+void doBuzzer()
+{
+    INFO( "Buzzer Test" );
+    PwmOut buzzer( D7 );
+    
+    for ( float i = 0.0f; i < 1.0f; i += 0.1f )
+    {
+        buzzer = i;
+        wait( 0.2 );
+    }
+}
+
 /*------------------------------------------------------------------------
  * Hauptprogramm
  ------------------------------------------------------------------------*/
+ 
 int main()
 {
     // SW2 + 3 auf K64F schalten Test vor- und zurueck.
@@ -502,29 +604,41 @@
                 doStepperThread();      // Schrittmotor
                 break;                                
             case 5:
+                doButtons();            // Buttons auf Shield
+                break;   
+            case 6:
                 doMosfet();             // MOSFET LED oder LED Strip V12
                 break;
-            case 6:
-                doESP8266();            // WLAN Modem
-                break;     
             case 7:
-                doRFIDReader();         // RFID Reader
-                break;                             
+                doLEDStrip();           // LED Strip 12 Volt Variante
+                break;   
             case 8:
                 doSPILedStrip();        // LED Strip am SPI Bus
                 break;   
             case 9:
-                doLEDStrip();           // LED Strip 12 Volt Variante
-                break;   
+                doRFIDReader();         // RFID Reader
+                break;                             
             case 10:
+                doTempSensor();         // Temperatur Sensor am I2C Bus 0x40
+                break;                             
+            case 11:
+                doBuzzer();             // Buzzer (Summer)
+                break;  
+            case 12:
+                doLCD();                // LCD im I2C Bus
+                break;                                              
+            case 13:
+                doI2CArduino();         // Arduino am I2C Bus
+                break;                                              
+            case 14:
                 doRC();                 // RC Switch (Funk)
                 break;   
-            case 11:
+            case 15:
                 onReceiveIR();          // IR Receiver
                 break;   
-           case 12:
-                doButtons();            // Buttons auf Shield
-                break;   
+            case 16:
+                doESP8266();            // WLAN Modem
+                break;     
             default:
                 break;
         }