![](/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
main.cpp@0:1b22732d0d8d, 2015-03-23 (annotated)
- 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?
User | Revision | Line number | New 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 | } |