Testprogramm fuer den SMD IoTKit Shield.

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

Committer:
marcel1691
Date:
Mon Mar 23 10:05:28 2015 +0000
Revision:
1:be86d02cd130
Parent:
0:1b22732d0d8d
Child:
2:e263949513ca
Weitere Aktoren hinzugefuegt

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 1:be86d02cd130 10 #include <string>
marcel1691 1:be86d02cd130 11 #include "ESP8266.h"
marcel1691 1:be86d02cd130 12 #include "RCSwitch.h"
marcel1691 0:1b22732d0d8d 13 // Trace
marcel1691 0:1b22732d0d8d 14 #include "trace.h"
marcel1691 0:1b22732d0d8d 15
marcel1691 0:1b22732d0d8d 16 /** aktuell laufender Test */
marcel1691 0:1b22732d0d8d 17 int test = 0;
marcel1691 0:1b22732d0d8d 18 // Test vor- und rueckwaerts schalten
marcel1691 0:1b22732d0d8d 19 InterruptIn button1( SW2 );
marcel1691 0:1b22732d0d8d 20 InterruptIn button2( SW3 );
marcel1691 0:1b22732d0d8d 21 void next()
marcel1691 0:1b22732d0d8d 22 {
marcel1691 0:1b22732d0d8d 23 test++;
marcel1691 0:1b22732d0d8d 24 }
marcel1691 0:1b22732d0d8d 25 void previous()
marcel1691 0:1b22732d0d8d 26 {
marcel1691 0:1b22732d0d8d 27 if ( test > 0 )
marcel1691 0:1b22732d0d8d 28 test--;
marcel1691 1:be86d02cd130 29 if ( test == 0 )
marcel1691 1:be86d02cd130 30 test = 15;
marcel1691 0:1b22732d0d8d 31 }
marcel1691 0:1b22732d0d8d 32
marcel1691 0:1b22732d0d8d 33 /*------------------------------------------------------------------------
marcel1691 0:1b22732d0d8d 34 * Testfunktionen
marcel1691 0:1b22732d0d8d 35 ------------------------------------------------------------------------*/
marcel1691 0:1b22732d0d8d 36
marcel1691 0:1b22732d0d8d 37 /** Analoge Sensoren Werte ausgeben */
marcel1691 0:1b22732d0d8d 38 void doPrintAnalogeValues( )
marcel1691 0:1b22732d0d8d 39 {
marcel1691 0:1b22732d0d8d 40 INFO( "Analog Thread" );
marcel1691 0:1b22732d0d8d 41
marcel1691 0:1b22732d0d8d 42 // Analoge Sensoren
marcel1691 0:1b22732d0d8d 43 AnalogIn poti( A0 );
marcel1691 0:1b22732d0d8d 44 AnalogIn lightSensor( A1 );
marcel1691 0:1b22732d0d8d 45 AnalogIn hallSensor( A2 );
marcel1691 0:1b22732d0d8d 46
marcel1691 0:1b22732d0d8d 47 printf( "Poti %f, Light %f, Hall %f\n", poti.read(), lightSensor.read(), hallSensor.read() );
marcel1691 0:1b22732d0d8d 48 }
marcel1691 0:1b22732d0d8d 49
marcel1691 0:1b22732d0d8d 50 /** LED's fortschalten */
marcel1691 0:1b22732d0d8d 51 int led = 1;
marcel1691 0:1b22732d0d8d 52
marcel1691 0:1b22732d0d8d 53 void doLedTicker()
marcel1691 0:1b22732d0d8d 54 {
marcel1691 0:1b22732d0d8d 55 // LED's (Aktoren)
marcel1691 0:1b22732d0d8d 56 DigitalOut led1(D10);
marcel1691 0:1b22732d0d8d 57 DigitalOut led2(D11);
marcel1691 0:1b22732d0d8d 58 DigitalOut led3(D12);
marcel1691 0:1b22732d0d8d 59
marcel1691 0:1b22732d0d8d 60 TRACE1( "LED Thread %d", led );
marcel1691 0:1b22732d0d8d 61 switch ( led )
marcel1691 0:1b22732d0d8d 62 {
marcel1691 0:1b22732d0d8d 63 case 1:
marcel1691 0:1b22732d0d8d 64 led1 = 1;
marcel1691 0:1b22732d0d8d 65 break;
marcel1691 0:1b22732d0d8d 66 case 2:
marcel1691 0:1b22732d0d8d 67 led2 = 1;
marcel1691 0:1b22732d0d8d 68 break;
marcel1691 0:1b22732d0d8d 69 case 3:
marcel1691 0:1b22732d0d8d 70 led3 = 1;
marcel1691 0:1b22732d0d8d 71 break;
marcel1691 0:1b22732d0d8d 72 default:
marcel1691 0:1b22732d0d8d 73 led1 = led2 = led3 = 0;
marcel1691 0:1b22732d0d8d 74 led = 0;
marcel1691 0:1b22732d0d8d 75 break;
marcel1691 0:1b22732d0d8d 76 }
marcel1691 0:1b22732d0d8d 77 led++;
marcel1691 0:1b22732d0d8d 78 }
marcel1691 0:1b22732d0d8d 79
marcel1691 0:1b22732d0d8d 80 /** Servo Thread */
marcel1691 0:1b22732d0d8d 81 void doServoThread()
marcel1691 0:1b22732d0d8d 82 {
marcel1691 0:1b22732d0d8d 83 INFO( "Servo Thread" );
marcel1691 0:1b22732d0d8d 84 Servo bottom( A4 );
marcel1691 0:1b22732d0d8d 85 Servo arm( A5 );
marcel1691 0:1b22732d0d8d 86
marcel1691 0:1b22732d0d8d 87 printf( "Servo 0 - 180\n" );
marcel1691 0:1b22732d0d8d 88 for ( float p = 0.1f; p < 1.0f; p += 0.001f )
marcel1691 0:1b22732d0d8d 89 {
marcel1691 0:1b22732d0d8d 90 bottom = p;
marcel1691 0:1b22732d0d8d 91 arm = p / 2;
marcel1691 0:1b22732d0d8d 92 Thread::wait( 1 ); // ACHTUNG: Millisekunden!!!
marcel1691 0:1b22732d0d8d 93 }
marcel1691 0:1b22732d0d8d 94
marcel1691 0:1b22732d0d8d 95 printf( "Servo 180 - 0\n" );
marcel1691 0:1b22732d0d8d 96 for ( float p = 1.0f; p >= 0.1f; p -= 0.001f )
marcel1691 0:1b22732d0d8d 97 {
marcel1691 0:1b22732d0d8d 98 bottom = p;
marcel1691 0:1b22732d0d8d 99 arm = p / 2;
marcel1691 0:1b22732d0d8d 100 Thread::wait( 1 );
marcel1691 0:1b22732d0d8d 101 }
marcel1691 0:1b22732d0d8d 102 }
marcel1691 0:1b22732d0d8d 103 /** Motor 1 Test */
marcel1691 0:1b22732d0d8d 104 void doMotorThread()
marcel1691 0:1b22732d0d8d 105 {
marcel1691 0:1b22732d0d8d 106 INFO( "Motor Thread" );
marcel1691 0:1b22732d0d8d 107
marcel1691 0:1b22732d0d8d 108 Motor m1(D3, D2, D4); // pwm, fwd, rev
marcel1691 0:1b22732d0d8d 109 Motor m2(D6, D5, D7); // pwm, fwd, rev
marcel1691 0:1b22732d0d8d 110
marcel1691 0:1b22732d0d8d 111 printf( "Motor rueckwaerts\n" );
marcel1691 0:1b22732d0d8d 112 for (double s= 0.5; s < 1.0 ; s += 0.01)
marcel1691 0:1b22732d0d8d 113 {
marcel1691 0:1b22732d0d8d 114 m1.speed(s * -1);
marcel1691 0:1b22732d0d8d 115 m2.speed(s );
marcel1691 0:1b22732d0d8d 116 Thread::wait ( 40 );
marcel1691 0:1b22732d0d8d 117 }
marcel1691 0:1b22732d0d8d 118 Thread::wait( 100 );
marcel1691 0:1b22732d0d8d 119 m1.speed( 0 );
marcel1691 0:1b22732d0d8d 120 m2.speed( 0 );
marcel1691 0:1b22732d0d8d 121
marcel1691 0:1b22732d0d8d 122 printf( "Motor vorwaerts\n" );
marcel1691 0:1b22732d0d8d 123 for (double s= 0.5; s < 1.0 ; s += 0.01)
marcel1691 0:1b22732d0d8d 124 {
marcel1691 0:1b22732d0d8d 125 m1.speed(s);
marcel1691 0:1b22732d0d8d 126 m2.speed(s * -1);
marcel1691 0:1b22732d0d8d 127 Thread::wait( 40 );
marcel1691 0:1b22732d0d8d 128 }
marcel1691 0:1b22732d0d8d 129 Thread::wait( 100 );
marcel1691 0:1b22732d0d8d 130 m1.speed( 0 );
marcel1691 0:1b22732d0d8d 131 m2.speed( 0 );
marcel1691 0:1b22732d0d8d 132
marcel1691 0:1b22732d0d8d 133 }
marcel1691 0:1b22732d0d8d 134
marcel1691 0:1b22732d0d8d 135 /** Schrittmotor Thread */
marcel1691 0:1b22732d0d8d 136 void doStepperThread()
marcel1691 0:1b22732d0d8d 137 {
marcel1691 0:1b22732d0d8d 138 INFO( "Stepper Thread" );
marcel1691 0:1b22732d0d8d 139
marcel1691 0:1b22732d0d8d 140 StepperMotorUni motor( PTB18, PTB19, PTC1, PTC8 );
marcel1691 0:1b22732d0d8d 141
marcel1691 0:1b22732d0d8d 142 // Motordrehzahl
marcel1691 0:1b22732d0d8d 143 motor.set_pps( 300 );
marcel1691 0:1b22732d0d8d 144
marcel1691 0:1b22732d0d8d 145 printf( "Schrittmotor vorwaerts\n" );
marcel1691 0:1b22732d0d8d 146 motor.move_steps( 512 );
marcel1691 0:1b22732d0d8d 147 Thread::wait( 3000 );
marcel1691 0:1b22732d0d8d 148
marcel1691 0:1b22732d0d8d 149 printf( "Schrittmotor rueckwaerts\n" );
marcel1691 0:1b22732d0d8d 150 motor.move_steps( -512 );
marcel1691 0:1b22732d0d8d 151 Thread::wait( 3000 );
marcel1691 0:1b22732d0d8d 152 }
marcel1691 0:1b22732d0d8d 153
marcel1691 0:1b22732d0d8d 154 /** MOSFET on/off */
marcel1691 0:1b22732d0d8d 155 void doMosfet()
marcel1691 0:1b22732d0d8d 156 {
marcel1691 0:1b22732d0d8d 157 INFO( "MOSFET Thread" );
marcel1691 0:1b22732d0d8d 158
marcel1691 0:1b22732d0d8d 159 DigitalOut mosfet( D13 );
marcel1691 0:1b22732d0d8d 160
marcel1691 0:1b22732d0d8d 161 mosfet = 1;
marcel1691 0:1b22732d0d8d 162 Thread::wait( 1000 );
marcel1691 0:1b22732d0d8d 163 mosfet = 0;
marcel1691 0:1b22732d0d8d 164 }
marcel1691 0:1b22732d0d8d 165
marcel1691 1:be86d02cd130 166 /** ESP8266 Modem an Serieller Schnittstelle */
marcel1691 1:be86d02cd130 167 void doESP8266()
marcel1691 1:be86d02cd130 168 {
marcel1691 1:be86d02cd130 169 INFO("ESP8266 Test");
marcel1691 1:be86d02cd130 170 ESP8266 esp( PTC15, PTC14 ); // tx, rx (Bluetooth Header)
marcel1691 1:be86d02cd130 171 char snd[255], rcv[1000]; // Strings for sending and receiving commands / data / replies
marcel1691 1:be86d02cd130 172 wait(1);
marcel1691 1:be86d02cd130 173
marcel1691 1:be86d02cd130 174 printf("Reset ESP\n");
marcel1691 1:be86d02cd130 175 esp.Reset();
marcel1691 1:be86d02cd130 176 esp.RcvReply(rcv, 400);
marcel1691 1:be86d02cd130 177 printf("%s", rcv);
marcel1691 1:be86d02cd130 178 wait(2);
marcel1691 1:be86d02cd130 179
marcel1691 1:be86d02cd130 180 printf("Sending AT\n");
marcel1691 1:be86d02cd130 181 strcpy(snd, "AT");
marcel1691 1:be86d02cd130 182 esp.SendCMD(snd);
marcel1691 1:be86d02cd130 183 esp.RcvReply(rcv, 400);
marcel1691 1:be86d02cd130 184 printf("%s", rcv);
marcel1691 1:be86d02cd130 185 wait(2);
marcel1691 1:be86d02cd130 186 printf("Set mode to Client\n");
marcel1691 1:be86d02cd130 187 esp.SetMode(1);
marcel1691 1:be86d02cd130 188 esp.RcvReply(rcv, 1000);
marcel1691 1:be86d02cd130 189 printf("%s", rcv);
marcel1691 1:be86d02cd130 190
marcel1691 1:be86d02cd130 191 printf("Receiving Wifi List\n");
marcel1691 1:be86d02cd130 192 esp.GetList(rcv);
marcel1691 1:be86d02cd130 193 printf("%s", rcv);
marcel1691 1:be86d02cd130 194
marcel1691 1:be86d02cd130 195 printf("Connecting to AP\n");
marcel1691 1:be86d02cd130 196 esp.Join("mcbmobile_1EX", "android%123" ); // Replace MyAP and MyPasswd with your SSID and password
marcel1691 1:be86d02cd130 197 esp.RcvReply(rcv, 1000);
marcel1691 1:be86d02cd130 198 printf("%s", rcv);
marcel1691 1:be86d02cd130 199 wait(8);
marcel1691 1:be86d02cd130 200 printf("Getting IP\n");
marcel1691 1:be86d02cd130 201 esp.GetIP(rcv);
marcel1691 1:be86d02cd130 202 printf("%s", rcv);
marcel1691 1:be86d02cd130 203 printf("Setting multiple connections\r\n");
marcel1691 1:be86d02cd130 204 esp.SetMultiple();
marcel1691 1:be86d02cd130 205 esp.RcvReply(rcv, 1000);
marcel1691 1:be86d02cd130 206 printf("%s", rcv);
marcel1691 1:be86d02cd130 207
marcel1691 1:be86d02cd130 208 printf("THE END\n");
marcel1691 1:be86d02cd130 209 }
marcel1691 1:be86d02cd130 210
marcel1691 1:be86d02cd130 211 /** RFID Reader MFRC522 Test */
marcel1691 1:be86d02cd130 212 void doRFIDReader()
marcel1691 1:be86d02cd130 213 {
marcel1691 1:be86d02cd130 214 INFO("RFID Reader MFRC522 Test");
marcel1691 1:be86d02cd130 215 // NFC/RFID Reader an WiFi Header von K64F
marcel1691 1:be86d02cd130 216 MFRC522 rfidReader( PTD6, PTD7, PTD5, PTD4, PTC12 );
marcel1691 1:be86d02cd130 217 rfidReader.PCD_Init();
marcel1691 1:be86d02cd130 218
marcel1691 1:be86d02cd130 219 // RFID Reader
marcel1691 1:be86d02cd130 220 if ( rfidReader.PICC_IsNewCardPresent())
marcel1691 1:be86d02cd130 221 if ( rfidReader.PICC_ReadCardSerial())
marcel1691 1:be86d02cd130 222 {
marcel1691 1:be86d02cd130 223 // Print Card UID
marcel1691 1:be86d02cd130 224 printf("Card UID: ");
marcel1691 1:be86d02cd130 225 for (uint8_t i = 0; i < rfidReader.uid.size; i++)
marcel1691 1:be86d02cd130 226 printf("%02X:", rfidReader.uid.uidByte[i]);
marcel1691 1:be86d02cd130 227 printf("\n");
marcel1691 1:be86d02cd130 228 // Print Card type
marcel1691 1:be86d02cd130 229 uint8_t piccType = rfidReader.PICC_GetType(rfidReader.uid.sak);
marcel1691 1:be86d02cd130 230 printf("PICC Type: %s \n", rfidReader.PICC_GetTypeName(piccType));
marcel1691 1:be86d02cd130 231 }
marcel1691 1:be86d02cd130 232 }
marcel1691 1:be86d02cd130 233
marcel1691 1:be86d02cd130 234 /** 3 x 3 Werte */
marcel1691 1:be86d02cd130 235 unsigned int strip[9];
marcel1691 1:be86d02cd130 236
marcel1691 1:be86d02cd130 237 void writeLED( SPI &spi )
marcel1691 1:be86d02cd130 238 {
marcel1691 1:be86d02cd130 239 for ( int p = 0; p < 9; p++ )
marcel1691 1:be86d02cd130 240 spi.write( strip[p] );
marcel1691 1:be86d02cd130 241 }
marcel1691 1:be86d02cd130 242
marcel1691 1:be86d02cd130 243 void clearLED( SPI &spi )
marcel1691 1:be86d02cd130 244 {
marcel1691 1:be86d02cd130 245 for ( int p = 0; p < 9; p++ )
marcel1691 1:be86d02cd130 246 {
marcel1691 1:be86d02cd130 247 strip[p] = 0;
marcel1691 1:be86d02cd130 248 spi.write( strip[p] );
marcel1691 1:be86d02cd130 249 }
marcel1691 1:be86d02cd130 250 }
marcel1691 1:be86d02cd130 251
marcel1691 1:be86d02cd130 252 /** LED Strip am SPI Bus */
marcel1691 1:be86d02cd130 253 void doSPILedStrip()
marcel1691 1:be86d02cd130 254 {
marcel1691 1:be86d02cd130 255 INFO( "LED Strip Test" );
marcel1691 1:be86d02cd130 256
marcel1691 1:be86d02cd130 257 SPI spi(D11, NC, D13); // mosi, miso, sclk
marcel1691 1:be86d02cd130 258 spi.format( 8,0 );
marcel1691 1:be86d02cd130 259 spi.frequency( 800000 );
marcel1691 1:be86d02cd130 260
marcel1691 1:be86d02cd130 261 // Gruen, Rot, Blau - von Dunkel bis Hell
marcel1691 1:be86d02cd130 262 for ( int i = 0; i < 128; i+=32 )
marcel1691 1:be86d02cd130 263 {
marcel1691 1:be86d02cd130 264 // LED 1
marcel1691 1:be86d02cd130 265 strip[0] = i;
marcel1691 1:be86d02cd130 266 strip[1] = 0;
marcel1691 1:be86d02cd130 267 strip[2] = 0;
marcel1691 1:be86d02cd130 268 // LED 2
marcel1691 1:be86d02cd130 269 strip[3] = 0;
marcel1691 1:be86d02cd130 270 strip[4] = i;
marcel1691 1:be86d02cd130 271 strip[5] = 0;
marcel1691 1:be86d02cd130 272 // LED 3
marcel1691 1:be86d02cd130 273 strip[6] = 0;
marcel1691 1:be86d02cd130 274 strip[7] = 0;
marcel1691 1:be86d02cd130 275 strip[8] = i;
marcel1691 1:be86d02cd130 276 writeLED( spi );
marcel1691 1:be86d02cd130 277 wait( 0.1 );
marcel1691 1:be86d02cd130 278 }
marcel1691 1:be86d02cd130 279 wait( 1.0 );
marcel1691 1:be86d02cd130 280 clearLED( spi );
marcel1691 1:be86d02cd130 281 }
marcel1691 1:be86d02cd130 282
marcel1691 1:be86d02cd130 283 void LEDStripOff( PwmOut& red, PwmOut& green, PwmOut& blue )
marcel1691 1:be86d02cd130 284 {
marcel1691 1:be86d02cd130 285 printf( "off \n" );
marcel1691 1:be86d02cd130 286 red = 0;
marcel1691 1:be86d02cd130 287 green = 0;
marcel1691 1:be86d02cd130 288 blue = 0;
marcel1691 1:be86d02cd130 289 wait ( 0.2 );
marcel1691 1:be86d02cd130 290 }
marcel1691 1:be86d02cd130 291
marcel1691 1:be86d02cd130 292 void LEDStripDim( PwmOut& pin )
marcel1691 1:be86d02cd130 293 {
marcel1691 1:be86d02cd130 294 printf( "dim\n" );
marcel1691 1:be86d02cd130 295 for ( float i = 0.0f; i < 1.0f; i += .01f )
marcel1691 1:be86d02cd130 296 {
marcel1691 1:be86d02cd130 297 pin = i;
marcel1691 1:be86d02cd130 298 wait( 0.02 );
marcel1691 1:be86d02cd130 299 }
marcel1691 1:be86d02cd130 300 }
marcel1691 1:be86d02cd130 301
marcel1691 1:be86d02cd130 302 /** LED Strip 12Volt Test */
marcel1691 1:be86d02cd130 303 void doLEDStrip()
marcel1691 1:be86d02cd130 304 {
marcel1691 1:be86d02cd130 305 INFO( "LED Strip V12 Test" );
marcel1691 1:be86d02cd130 306 PwmOut green( D11 );
marcel1691 1:be86d02cd130 307 PwmOut red( D12 );
marcel1691 1:be86d02cd130 308 PwmOut blue( D13 );
marcel1691 1:be86d02cd130 309
marcel1691 1:be86d02cd130 310 LEDStripDim( red );
marcel1691 1:be86d02cd130 311 LEDStripOff( red, green, blue );
marcel1691 1:be86d02cd130 312 LEDStripDim( green );
marcel1691 1:be86d02cd130 313 LEDStripOff( red, green, blue );
marcel1691 1:be86d02cd130 314 LEDStripDim( blue );
marcel1691 1:be86d02cd130 315 LEDStripOff( red, green, blue );
marcel1691 1:be86d02cd130 316
marcel1691 1:be86d02cd130 317 red = 1;
marcel1691 1:be86d02cd130 318 wait( 0.2 );
marcel1691 1:be86d02cd130 319 LEDStripOff( red, green, blue );
marcel1691 1:be86d02cd130 320
marcel1691 1:be86d02cd130 321 green = 1;
marcel1691 1:be86d02cd130 322 wait( 0.2 );
marcel1691 1:be86d02cd130 323 LEDStripOff( red, green, blue );
marcel1691 1:be86d02cd130 324
marcel1691 1:be86d02cd130 325 blue = 1;
marcel1691 1:be86d02cd130 326 wait( 0.2 );
marcel1691 1:be86d02cd130 327 LEDStripOff( red, green, blue );
marcel1691 1:be86d02cd130 328
marcel1691 1:be86d02cd130 329 red = 1;
marcel1691 1:be86d02cd130 330 blue = 1;
marcel1691 1:be86d02cd130 331 green = 1;
marcel1691 1:be86d02cd130 332 wait( 0.2 );
marcel1691 1:be86d02cd130 333 LEDStripOff( red, green, blue );
marcel1691 1:be86d02cd130 334 }
marcel1691 1:be86d02cd130 335
marcel1691 1:be86d02cd130 336 /** Funksteckdose ein/aus */
marcel1691 1:be86d02cd130 337 void doRC()
marcel1691 1:be86d02cd130 338 {
marcel1691 1:be86d02cd130 339 INFO( "RCSwitch Test" );
marcel1691 1:be86d02cd130 340 RCSwitch mySwitch = RCSwitch( D9, D8 ); // Sender / Empfaenger (optional)
marcel1691 1:be86d02cd130 341
marcel1691 1:be86d02cd130 342 printf( "Sende nach: Adresse 1 - 5 alle On, Geraet B aus A-D " );
marcel1691 1:be86d02cd130 343 // Adresse 1 - 5 alle On, Geraet B aus A-D
marcel1691 1:be86d02cd130 344 mySwitch.switchOff("11111", "01000");
marcel1691 1:be86d02cd130 345 wait( 0.5 );
marcel1691 1:be86d02cd130 346
marcel1691 1:be86d02cd130 347 printf( "- ON\n" );
marcel1691 1:be86d02cd130 348 mySwitch.switchOn ("11111", "01000");
marcel1691 1:be86d02cd130 349 }
marcel1691 1:be86d02cd130 350
marcel1691 1:be86d02cd130 351 /*------------------------------------------------------------------------
marcel1691 1:be86d02cd130 352 * Infrarot Funktionen
marcel1691 1:be86d02cd130 353 ------------------------------------------------------------------------*/
marcel1691 1:be86d02cd130 354
marcel1691 1:be86d02cd130 355 /** Receive.
marcel1691 1:be86d02cd130 356 * @param format Pointer to a format.
marcel1691 1:be86d02cd130 357 * @param buf Pointer to a buffer.
marcel1691 1:be86d02cd130 358 * @param bufsiz Size of the buffer.
marcel1691 1:be86d02cd130 359 * @return Bit length of the received data.
marcel1691 1:be86d02cd130 360 */
marcel1691 1:be86d02cd130 361 int receiveIR(ReceiverIR &ir_rx, RemoteIR::Format *format, uint8_t *buf, int bufsiz, int timeout = 100)
marcel1691 1:be86d02cd130 362 {
marcel1691 1:be86d02cd130 363 int cnt = 0;
marcel1691 1:be86d02cd130 364 while (ir_rx.getState() != ReceiverIR::Received)
marcel1691 1:be86d02cd130 365 {
marcel1691 1:be86d02cd130 366 cnt++;
marcel1691 1:be86d02cd130 367 if (timeout < cnt)
marcel1691 1:be86d02cd130 368 return -1;
marcel1691 1:be86d02cd130 369 }
marcel1691 1:be86d02cd130 370 return ir_rx.getData(format, buf, bufsiz * 8);
marcel1691 1:be86d02cd130 371 }
marcel1691 1:be86d02cd130 372
marcel1691 1:be86d02cd130 373 /**
marcel1691 1:be86d02cd130 374 * Display a format of a data.
marcel1691 1:be86d02cd130 375 */
marcel1691 1:be86d02cd130 376 void displayIRFormat(RemoteIR::Format format)
marcel1691 1:be86d02cd130 377 {
marcel1691 1:be86d02cd130 378 switch (format)
marcel1691 1:be86d02cd130 379 {
marcel1691 1:be86d02cd130 380 case RemoteIR::UNKNOWN:
marcel1691 1:be86d02cd130 381 printf("????????\n");
marcel1691 1:be86d02cd130 382 break;
marcel1691 1:be86d02cd130 383 case RemoteIR::NEC:
marcel1691 1:be86d02cd130 384 printf("NEC \n");
marcel1691 1:be86d02cd130 385 break;
marcel1691 1:be86d02cd130 386 case RemoteIR::NEC_REPEAT:
marcel1691 1:be86d02cd130 387 printf("NEC (R)\n");
marcel1691 1:be86d02cd130 388 break;
marcel1691 1:be86d02cd130 389 case RemoteIR::AEHA:
marcel1691 1:be86d02cd130 390 printf("AEHA \n");
marcel1691 1:be86d02cd130 391 break;
marcel1691 1:be86d02cd130 392 case RemoteIR::AEHA_REPEAT:
marcel1691 1:be86d02cd130 393 printf("AEHA (R)\n");
marcel1691 1:be86d02cd130 394 break;
marcel1691 1:be86d02cd130 395 case RemoteIR::SONY:
marcel1691 1:be86d02cd130 396 printf("SONY \n");
marcel1691 1:be86d02cd130 397 break;
marcel1691 1:be86d02cd130 398 }
marcel1691 1:be86d02cd130 399 }
marcel1691 1:be86d02cd130 400
marcel1691 1:be86d02cd130 401 /** Display a data.
marcel1691 1:be86d02cd130 402 * @param buf Pointer to a buffer.
marcel1691 1:be86d02cd130 403 * @param bitlength Bit length of a data.
marcel1691 1:be86d02cd130 404 */
marcel1691 1:be86d02cd130 405 void displayIRData(uint8_t *buf, int bitlength)
marcel1691 1:be86d02cd130 406 {
marcel1691 1:be86d02cd130 407 const int n = bitlength / 8 + (((bitlength % 8) != 0) ? 1 : 0);
marcel1691 1:be86d02cd130 408
marcel1691 1:be86d02cd130 409 for (int i = 0; i < n; i++)
marcel1691 1:be86d02cd130 410 printf("%02X", buf[i]);
marcel1691 1:be86d02cd130 411 for (int i = 0; i < 8 - n; i++)
marcel1691 1:be86d02cd130 412 printf("--");
marcel1691 1:be86d02cd130 413 }
marcel1691 1:be86d02cd130 414
marcel1691 1:be86d02cd130 415 /** IR Empfaenger abfragen */
marcel1691 1:be86d02cd130 416 void onReceiveIR()
marcel1691 1:be86d02cd130 417 {
marcel1691 1:be86d02cd130 418 INFO( "IR Receive Test" );
marcel1691 1:be86d02cd130 419 ReceiverIR ir_rx( PTB20 );
marcel1691 1:be86d02cd130 420
marcel1691 1:be86d02cd130 421 uint8_t buf1[32];
marcel1691 1:be86d02cd130 422 uint8_t buf2[32];
marcel1691 1:be86d02cd130 423 int bitlength1;
marcel1691 1:be86d02cd130 424 RemoteIR::Format format;
marcel1691 1:be86d02cd130 425
marcel1691 1:be86d02cd130 426 memset(buf1, 0x00, sizeof(buf1));
marcel1691 1:be86d02cd130 427 memset(buf2, 0x00, sizeof(buf2));
marcel1691 1:be86d02cd130 428
marcel1691 1:be86d02cd130 429 bitlength1 = receiveIR( ir_rx, &format, buf1, sizeof(buf1));
marcel1691 1:be86d02cd130 430 if (bitlength1 < 0)
marcel1691 1:be86d02cd130 431 return;
marcel1691 1:be86d02cd130 432
marcel1691 1:be86d02cd130 433 displayIRData(buf1, bitlength1);
marcel1691 1:be86d02cd130 434 displayIRFormat(format);
marcel1691 1:be86d02cd130 435 }
marcel1691 1:be86d02cd130 436
marcel1691 1:be86d02cd130 437 /** Buttons auf Shield */
marcel1691 1:be86d02cd130 438 void doButtons()
marcel1691 1:be86d02cd130 439 {
marcel1691 1:be86d02cd130 440 INFO ( "Buttons Test" );
marcel1691 1:be86d02cd130 441 DigitalIn button3( PTC0, PullUp );
marcel1691 1:be86d02cd130 442 DigitalIn button4( PTC7, PullUp );
marcel1691 1:be86d02cd130 443 DigitalIn button5( PTC9, PullUp );
marcel1691 1:be86d02cd130 444
marcel1691 1:be86d02cd130 445 while ( 1 )
marcel1691 1:be86d02cd130 446 {
marcel1691 1:be86d02cd130 447 if ( button1 == 0 )
marcel1691 1:be86d02cd130 448 {
marcel1691 1:be86d02cd130 449 printf( "button 1 pressed\n" );
marcel1691 1:be86d02cd130 450 return;
marcel1691 1:be86d02cd130 451 }
marcel1691 1:be86d02cd130 452 if ( button2 == 0 )
marcel1691 1:be86d02cd130 453 {
marcel1691 1:be86d02cd130 454 printf( "button 2 pressed\n" );
marcel1691 1:be86d02cd130 455 return;
marcel1691 1:be86d02cd130 456 }
marcel1691 1:be86d02cd130 457 if ( button3 == 0 )
marcel1691 1:be86d02cd130 458 {
marcel1691 1:be86d02cd130 459 printf( "button 3 pressed\n" );
marcel1691 1:be86d02cd130 460 return;
marcel1691 1:be86d02cd130 461 }
marcel1691 1:be86d02cd130 462 if ( button4 == 0 )
marcel1691 1:be86d02cd130 463 {
marcel1691 1:be86d02cd130 464 printf( "button 4 pressed\n" );
marcel1691 1:be86d02cd130 465 return;
marcel1691 1:be86d02cd130 466 }
marcel1691 1:be86d02cd130 467 if ( button5 == 0 )
marcel1691 1:be86d02cd130 468 {
marcel1691 1:be86d02cd130 469 printf( "button 5 pressed\n" );
marcel1691 1:be86d02cd130 470 return;
marcel1691 1:be86d02cd130 471 }
marcel1691 1:be86d02cd130 472 wait ( 0.2 );
marcel1691 1:be86d02cd130 473 }
marcel1691 1:be86d02cd130 474 }
marcel1691 1:be86d02cd130 475
marcel1691 0:1b22732d0d8d 476 /*------------------------------------------------------------------------
marcel1691 0:1b22732d0d8d 477 * Hauptprogramm
marcel1691 0:1b22732d0d8d 478 ------------------------------------------------------------------------*/
marcel1691 0:1b22732d0d8d 479 int main()
marcel1691 0:1b22732d0d8d 480 {
marcel1691 0:1b22732d0d8d 481 // SW2 + 3 auf K64F schalten Test vor- und zurueck.
marcel1691 0:1b22732d0d8d 482 button1.fall( &next );
marcel1691 0:1b22732d0d8d 483 button2.fall( &previous );
marcel1691 0:1b22732d0d8d 484
marcel1691 0:1b22732d0d8d 485 while ( 1 )
marcel1691 0:1b22732d0d8d 486 {
marcel1691 0:1b22732d0d8d 487 switch ( test )
marcel1691 0:1b22732d0d8d 488 {
marcel1691 0:1b22732d0d8d 489 case 0:
marcel1691 1:be86d02cd130 490 doPrintAnalogeValues(); // Analoge Sensoren
marcel1691 0:1b22732d0d8d 491 break;
marcel1691 0:1b22732d0d8d 492 case 1:
marcel1691 1:be86d02cd130 493 doLedTicker(); // Lauflicht
marcel1691 0:1b22732d0d8d 494 break;
marcel1691 0:1b22732d0d8d 495 case 2:
marcel1691 1:be86d02cd130 496 doServoThread(); // Kamara Plattform mit Servos
marcel1691 0:1b22732d0d8d 497 break;
marcel1691 0:1b22732d0d8d 498 case 3:
marcel1691 1:be86d02cd130 499 doMotorThread(); // 2 Motoren
marcel1691 0:1b22732d0d8d 500 break;
marcel1691 0:1b22732d0d8d 501 case 4:
marcel1691 1:be86d02cd130 502 doStepperThread(); // Schrittmotor
marcel1691 0:1b22732d0d8d 503 break;
marcel1691 0:1b22732d0d8d 504 case 5:
marcel1691 1:be86d02cd130 505 doMosfet(); // MOSFET LED oder LED Strip V12
marcel1691 0:1b22732d0d8d 506 break;
marcel1691 1:be86d02cd130 507 case 6:
marcel1691 1:be86d02cd130 508 doESP8266(); // WLAN Modem
marcel1691 1:be86d02cd130 509 break;
marcel1691 1:be86d02cd130 510 case 7:
marcel1691 1:be86d02cd130 511 doRFIDReader(); // RFID Reader
marcel1691 1:be86d02cd130 512 break;
marcel1691 1:be86d02cd130 513 case 8:
marcel1691 1:be86d02cd130 514 doSPILedStrip(); // LED Strip am SPI Bus
marcel1691 1:be86d02cd130 515 break;
marcel1691 1:be86d02cd130 516 case 9:
marcel1691 1:be86d02cd130 517 doLEDStrip(); // LED Strip 12 Volt Variante
marcel1691 1:be86d02cd130 518 break;
marcel1691 1:be86d02cd130 519 case 10:
marcel1691 1:be86d02cd130 520 doRC(); // RC Switch (Funk)
marcel1691 1:be86d02cd130 521 break;
marcel1691 1:be86d02cd130 522 case 11:
marcel1691 1:be86d02cd130 523 onReceiveIR(); // IR Receiver
marcel1691 1:be86d02cd130 524 break;
marcel1691 1:be86d02cd130 525 case 12:
marcel1691 1:be86d02cd130 526 doButtons(); // Buttons auf Shield
marcel1691 1:be86d02cd130 527 break;
marcel1691 0:1b22732d0d8d 528 default:
marcel1691 0:1b22732d0d8d 529 break;
marcel1691 0:1b22732d0d8d 530 }
marcel1691 0:1b22732d0d8d 531 wait( 1.0 );
marcel1691 0:1b22732d0d8d 532 }
marcel1691 0:1b22732d0d8d 533 }