![](/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:
- 0:1b22732d0d8d
- Child:
- 1:be86d02cd130
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Mar 23 08:58:42 2015 +0000 @@ -0,0 +1,198 @@ +/** Testprogramm fuer den SMD IoTKit Shield. + */ +#include "mbed.h" +#include "rtos.h" +#include "ReceiverIR.h" +#include "Servo.h" +#include "Motor.h" +#include "StepperMotorUni.h" +#include "MFRC522.h" +// Trace +#include "trace.h" + +/** aktuell laufender Test */ +int test = 0; +// Test vor- und rueckwaerts schalten +InterruptIn button1( SW2 ); +InterruptIn button2( SW3 ); +void next() +{ + test++; +} +void previous() +{ + if ( test > 0 ) + test--; +} + +/*------------------------------------------------------------------------ + * Testfunktionen + ------------------------------------------------------------------------*/ + +/** Analoge Sensoren Werte ausgeben */ +void doPrintAnalogeValues( ) +{ + INFO( "Analog Thread" ); + + // Analoge Sensoren + AnalogIn poti( A0 ); + AnalogIn lightSensor( A1 ); + AnalogIn hallSensor( A2 ); + + printf( "Poti %f, Light %f, Hall %f\n", poti.read(), lightSensor.read(), hallSensor.read() ); +} + +/** LED's fortschalten */ +int led = 1; + +void doLedTicker() +{ + // LED's (Aktoren) + DigitalOut led1(D10); + DigitalOut led2(D11); + DigitalOut led3(D12); + + TRACE1( "LED Thread %d", led ); + switch ( led ) + { + case 1: + led1 = 1; + break; + case 2: + led2 = 1; + break; + case 3: + led3 = 1; + break; + default: + led1 = led2 = led3 = 0; + led = 0; + break; + } + led++; +} + +/** 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 ); + } +} +/** Motor 1 Test */ +void doMotorThread() +{ + INFO( "Motor Thread" ); + + Motor m1(D3, D2, D4); // pwm, fwd, rev + Motor m2(D6, D5, D7); // pwm, fwd, rev + + printf( "Motor rueckwaerts\n" ); + for (double s= 0.5; s < 1.0 ; s += 0.01) + { + m1.speed(s * -1); + m2.speed(s ); + Thread::wait ( 40 ); + } + Thread::wait( 100 ); + m1.speed( 0 ); + m2.speed( 0 ); + + printf( "Motor vorwaerts\n" ); + for (double s= 0.5; s < 1.0 ; s += 0.01) + { + m1.speed(s); + m2.speed(s * -1); + Thread::wait( 40 ); + } + Thread::wait( 100 ); + m1.speed( 0 ); + m2.speed( 0 ); + +} + +/** Schrittmotor Thread */ +void doStepperThread() +{ + INFO( "Stepper Thread" ); + + StepperMotorUni motor( PTB18, PTB19, PTC1, PTC8 ); + + // Motordrehzahl + motor.set_pps( 300 ); + + printf( "Schrittmotor vorwaerts\n" ); + motor.move_steps( 512 ); + Thread::wait( 3000 ); + + printf( "Schrittmotor rueckwaerts\n" ); + motor.move_steps( -512 ); + Thread::wait( 3000 ); +} + +/** MOSFET on/off */ +void doMosfet() +{ + INFO( "MOSFET Thread" ); + + DigitalOut mosfet( D13 ); + + mosfet = 1; + Thread::wait( 1000 ); + mosfet = 0; +} + +/*------------------------------------------------------------------------ + * Hauptprogramm + ------------------------------------------------------------------------*/ +int main() +{ + // SW2 + 3 auf K64F schalten Test vor- und zurueck. + button1.fall( &next ); + button2.fall( &previous ); + + while ( 1 ) + { + switch ( test ) + { + case 0: + doPrintAnalogeValues(); + break; + case 1: + doLedTicker(); + break; + case 2: + doServoThread(); + break; + case 3: + doMotorThread(); + break; + case 4: + doStepperThread(); + break; + case 5: + doMosfet(); + break; + + default: + break; + } + wait( 1.0 ); + } +} \ No newline at end of file