![](/media/cache/group/ep_LV4vK4D.webp.50x50_q85.jpg)
Testprogramm fuer den SMD IoTKit Shield.
Dependencies: MFRC522 RemoteIR Servo StepperMotorUni mbed-rtos mbed ESP8266 RCSwitch SAA1064 TMP175
Diff: main.cpp
- 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; }