Testprogramm fuer den SMD IoTKit Shield.

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

Committer:
marcel1691
Date:
Mon Apr 20 07:43:54 2015 +0000
Revision:
4:0710c12a0067
Parent:
3:880adec02196
SAA1064 Library eingebunden

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