Testprogramm fuer den SMD IoTKit Shield.

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

Committer:
marcel1691
Date:
Mon Mar 23 08:58:42 2015 +0000
Revision:
0:1b22732d0d8d
Child:
1:be86d02cd130
Testprogramm fuer den SMD IoTKit Shield.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
marcel1691 0:1b22732d0d8d 1 /** Testprogramm fuer den SMD IoTKit Shield.
marcel1691 0:1b22732d0d8d 2 */
marcel1691 0:1b22732d0d8d 3 #include "mbed.h"
marcel1691 0:1b22732d0d8d 4 #include "rtos.h"
marcel1691 0:1b22732d0d8d 5 #include "ReceiverIR.h"
marcel1691 0:1b22732d0d8d 6 #include "Servo.h"
marcel1691 0:1b22732d0d8d 7 #include "Motor.h"
marcel1691 0:1b22732d0d8d 8 #include "StepperMotorUni.h"
marcel1691 0:1b22732d0d8d 9 #include "MFRC522.h"
marcel1691 0:1b22732d0d8d 10 // Trace
marcel1691 0:1b22732d0d8d 11 #include "trace.h"
marcel1691 0:1b22732d0d8d 12
marcel1691 0:1b22732d0d8d 13 /** aktuell laufender Test */
marcel1691 0:1b22732d0d8d 14 int test = 0;
marcel1691 0:1b22732d0d8d 15 // Test vor- und rueckwaerts schalten
marcel1691 0:1b22732d0d8d 16 InterruptIn button1( SW2 );
marcel1691 0:1b22732d0d8d 17 InterruptIn button2( SW3 );
marcel1691 0:1b22732d0d8d 18 void next()
marcel1691 0:1b22732d0d8d 19 {
marcel1691 0:1b22732d0d8d 20 test++;
marcel1691 0:1b22732d0d8d 21 }
marcel1691 0:1b22732d0d8d 22 void previous()
marcel1691 0:1b22732d0d8d 23 {
marcel1691 0:1b22732d0d8d 24 if ( test > 0 )
marcel1691 0:1b22732d0d8d 25 test--;
marcel1691 0:1b22732d0d8d 26 }
marcel1691 0:1b22732d0d8d 27
marcel1691 0:1b22732d0d8d 28 /*------------------------------------------------------------------------
marcel1691 0:1b22732d0d8d 29 * Testfunktionen
marcel1691 0:1b22732d0d8d 30 ------------------------------------------------------------------------*/
marcel1691 0:1b22732d0d8d 31
marcel1691 0:1b22732d0d8d 32 /** Analoge Sensoren Werte ausgeben */
marcel1691 0:1b22732d0d8d 33 void doPrintAnalogeValues( )
marcel1691 0:1b22732d0d8d 34 {
marcel1691 0:1b22732d0d8d 35 INFO( "Analog Thread" );
marcel1691 0:1b22732d0d8d 36
marcel1691 0:1b22732d0d8d 37 // Analoge Sensoren
marcel1691 0:1b22732d0d8d 38 AnalogIn poti( A0 );
marcel1691 0:1b22732d0d8d 39 AnalogIn lightSensor( A1 );
marcel1691 0:1b22732d0d8d 40 AnalogIn hallSensor( A2 );
marcel1691 0:1b22732d0d8d 41
marcel1691 0:1b22732d0d8d 42 printf( "Poti %f, Light %f, Hall %f\n", poti.read(), lightSensor.read(), hallSensor.read() );
marcel1691 0:1b22732d0d8d 43 }
marcel1691 0:1b22732d0d8d 44
marcel1691 0:1b22732d0d8d 45 /** LED's fortschalten */
marcel1691 0:1b22732d0d8d 46 int led = 1;
marcel1691 0:1b22732d0d8d 47
marcel1691 0:1b22732d0d8d 48 void doLedTicker()
marcel1691 0:1b22732d0d8d 49 {
marcel1691 0:1b22732d0d8d 50 // LED's (Aktoren)
marcel1691 0:1b22732d0d8d 51 DigitalOut led1(D10);
marcel1691 0:1b22732d0d8d 52 DigitalOut led2(D11);
marcel1691 0:1b22732d0d8d 53 DigitalOut led3(D12);
marcel1691 0:1b22732d0d8d 54
marcel1691 0:1b22732d0d8d 55 TRACE1( "LED Thread %d", led );
marcel1691 0:1b22732d0d8d 56 switch ( led )
marcel1691 0:1b22732d0d8d 57 {
marcel1691 0:1b22732d0d8d 58 case 1:
marcel1691 0:1b22732d0d8d 59 led1 = 1;
marcel1691 0:1b22732d0d8d 60 break;
marcel1691 0:1b22732d0d8d 61 case 2:
marcel1691 0:1b22732d0d8d 62 led2 = 1;
marcel1691 0:1b22732d0d8d 63 break;
marcel1691 0:1b22732d0d8d 64 case 3:
marcel1691 0:1b22732d0d8d 65 led3 = 1;
marcel1691 0:1b22732d0d8d 66 break;
marcel1691 0:1b22732d0d8d 67 default:
marcel1691 0:1b22732d0d8d 68 led1 = led2 = led3 = 0;
marcel1691 0:1b22732d0d8d 69 led = 0;
marcel1691 0:1b22732d0d8d 70 break;
marcel1691 0:1b22732d0d8d 71 }
marcel1691 0:1b22732d0d8d 72 led++;
marcel1691 0:1b22732d0d8d 73 }
marcel1691 0:1b22732d0d8d 74
marcel1691 0:1b22732d0d8d 75 /** Servo Thread */
marcel1691 0:1b22732d0d8d 76 void doServoThread()
marcel1691 0:1b22732d0d8d 77 {
marcel1691 0:1b22732d0d8d 78 INFO( "Servo Thread" );
marcel1691 0:1b22732d0d8d 79 Servo bottom( A4 );
marcel1691 0:1b22732d0d8d 80 Servo arm( A5 );
marcel1691 0:1b22732d0d8d 81
marcel1691 0:1b22732d0d8d 82 printf( "Servo 0 - 180\n" );
marcel1691 0:1b22732d0d8d 83 for ( float p = 0.1f; p < 1.0f; p += 0.001f )
marcel1691 0:1b22732d0d8d 84 {
marcel1691 0:1b22732d0d8d 85 bottom = p;
marcel1691 0:1b22732d0d8d 86 arm = p / 2;
marcel1691 0:1b22732d0d8d 87 Thread::wait( 1 ); // ACHTUNG: Millisekunden!!!
marcel1691 0:1b22732d0d8d 88 }
marcel1691 0:1b22732d0d8d 89
marcel1691 0:1b22732d0d8d 90 printf( "Servo 180 - 0\n" );
marcel1691 0:1b22732d0d8d 91 for ( float p = 1.0f; p >= 0.1f; p -= 0.001f )
marcel1691 0:1b22732d0d8d 92 {
marcel1691 0:1b22732d0d8d 93 bottom = p;
marcel1691 0:1b22732d0d8d 94 arm = p / 2;
marcel1691 0:1b22732d0d8d 95 Thread::wait( 1 );
marcel1691 0:1b22732d0d8d 96 }
marcel1691 0:1b22732d0d8d 97 }
marcel1691 0:1b22732d0d8d 98 /** Motor 1 Test */
marcel1691 0:1b22732d0d8d 99 void doMotorThread()
marcel1691 0:1b22732d0d8d 100 {
marcel1691 0:1b22732d0d8d 101 INFO( "Motor Thread" );
marcel1691 0:1b22732d0d8d 102
marcel1691 0:1b22732d0d8d 103 Motor m1(D3, D2, D4); // pwm, fwd, rev
marcel1691 0:1b22732d0d8d 104 Motor m2(D6, D5, D7); // pwm, fwd, rev
marcel1691 0:1b22732d0d8d 105
marcel1691 0:1b22732d0d8d 106 printf( "Motor rueckwaerts\n" );
marcel1691 0:1b22732d0d8d 107 for (double s= 0.5; s < 1.0 ; s += 0.01)
marcel1691 0:1b22732d0d8d 108 {
marcel1691 0:1b22732d0d8d 109 m1.speed(s * -1);
marcel1691 0:1b22732d0d8d 110 m2.speed(s );
marcel1691 0:1b22732d0d8d 111 Thread::wait ( 40 );
marcel1691 0:1b22732d0d8d 112 }
marcel1691 0:1b22732d0d8d 113 Thread::wait( 100 );
marcel1691 0:1b22732d0d8d 114 m1.speed( 0 );
marcel1691 0:1b22732d0d8d 115 m2.speed( 0 );
marcel1691 0:1b22732d0d8d 116
marcel1691 0:1b22732d0d8d 117 printf( "Motor vorwaerts\n" );
marcel1691 0:1b22732d0d8d 118 for (double s= 0.5; s < 1.0 ; s += 0.01)
marcel1691 0:1b22732d0d8d 119 {
marcel1691 0:1b22732d0d8d 120 m1.speed(s);
marcel1691 0:1b22732d0d8d 121 m2.speed(s * -1);
marcel1691 0:1b22732d0d8d 122 Thread::wait( 40 );
marcel1691 0:1b22732d0d8d 123 }
marcel1691 0:1b22732d0d8d 124 Thread::wait( 100 );
marcel1691 0:1b22732d0d8d 125 m1.speed( 0 );
marcel1691 0:1b22732d0d8d 126 m2.speed( 0 );
marcel1691 0:1b22732d0d8d 127
marcel1691 0:1b22732d0d8d 128 }
marcel1691 0:1b22732d0d8d 129
marcel1691 0:1b22732d0d8d 130 /** Schrittmotor Thread */
marcel1691 0:1b22732d0d8d 131 void doStepperThread()
marcel1691 0:1b22732d0d8d 132 {
marcel1691 0:1b22732d0d8d 133 INFO( "Stepper Thread" );
marcel1691 0:1b22732d0d8d 134
marcel1691 0:1b22732d0d8d 135 StepperMotorUni motor( PTB18, PTB19, PTC1, PTC8 );
marcel1691 0:1b22732d0d8d 136
marcel1691 0:1b22732d0d8d 137 // Motordrehzahl
marcel1691 0:1b22732d0d8d 138 motor.set_pps( 300 );
marcel1691 0:1b22732d0d8d 139
marcel1691 0:1b22732d0d8d 140 printf( "Schrittmotor vorwaerts\n" );
marcel1691 0:1b22732d0d8d 141 motor.move_steps( 512 );
marcel1691 0:1b22732d0d8d 142 Thread::wait( 3000 );
marcel1691 0:1b22732d0d8d 143
marcel1691 0:1b22732d0d8d 144 printf( "Schrittmotor rueckwaerts\n" );
marcel1691 0:1b22732d0d8d 145 motor.move_steps( -512 );
marcel1691 0:1b22732d0d8d 146 Thread::wait( 3000 );
marcel1691 0:1b22732d0d8d 147 }
marcel1691 0:1b22732d0d8d 148
marcel1691 0:1b22732d0d8d 149 /** MOSFET on/off */
marcel1691 0:1b22732d0d8d 150 void doMosfet()
marcel1691 0:1b22732d0d8d 151 {
marcel1691 0:1b22732d0d8d 152 INFO( "MOSFET Thread" );
marcel1691 0:1b22732d0d8d 153
marcel1691 0:1b22732d0d8d 154 DigitalOut mosfet( D13 );
marcel1691 0:1b22732d0d8d 155
marcel1691 0:1b22732d0d8d 156 mosfet = 1;
marcel1691 0:1b22732d0d8d 157 Thread::wait( 1000 );
marcel1691 0:1b22732d0d8d 158 mosfet = 0;
marcel1691 0:1b22732d0d8d 159 }
marcel1691 0:1b22732d0d8d 160
marcel1691 0:1b22732d0d8d 161 /*------------------------------------------------------------------------
marcel1691 0:1b22732d0d8d 162 * Hauptprogramm
marcel1691 0:1b22732d0d8d 163 ------------------------------------------------------------------------*/
marcel1691 0:1b22732d0d8d 164 int main()
marcel1691 0:1b22732d0d8d 165 {
marcel1691 0:1b22732d0d8d 166 // SW2 + 3 auf K64F schalten Test vor- und zurueck.
marcel1691 0:1b22732d0d8d 167 button1.fall( &next );
marcel1691 0:1b22732d0d8d 168 button2.fall( &previous );
marcel1691 0:1b22732d0d8d 169
marcel1691 0:1b22732d0d8d 170 while ( 1 )
marcel1691 0:1b22732d0d8d 171 {
marcel1691 0:1b22732d0d8d 172 switch ( test )
marcel1691 0:1b22732d0d8d 173 {
marcel1691 0:1b22732d0d8d 174 case 0:
marcel1691 0:1b22732d0d8d 175 doPrintAnalogeValues();
marcel1691 0:1b22732d0d8d 176 break;
marcel1691 0:1b22732d0d8d 177 case 1:
marcel1691 0:1b22732d0d8d 178 doLedTicker();
marcel1691 0:1b22732d0d8d 179 break;
marcel1691 0:1b22732d0d8d 180 case 2:
marcel1691 0:1b22732d0d8d 181 doServoThread();
marcel1691 0:1b22732d0d8d 182 break;
marcel1691 0:1b22732d0d8d 183 case 3:
marcel1691 0:1b22732d0d8d 184 doMotorThread();
marcel1691 0:1b22732d0d8d 185 break;
marcel1691 0:1b22732d0d8d 186 case 4:
marcel1691 0:1b22732d0d8d 187 doStepperThread();
marcel1691 0:1b22732d0d8d 188 break;
marcel1691 0:1b22732d0d8d 189 case 5:
marcel1691 0:1b22732d0d8d 190 doMosfet();
marcel1691 0:1b22732d0d8d 191 break;
marcel1691 0:1b22732d0d8d 192
marcel1691 0:1b22732d0d8d 193 default:
marcel1691 0:1b22732d0d8d 194 break;
marcel1691 0:1b22732d0d8d 195 }
marcel1691 0:1b22732d0d8d 196 wait( 1.0 );
marcel1691 0:1b22732d0d8d 197 }
marcel1691 0:1b22732d0d8d 198 }