Testprogramm fuer den SMD IoTKit Shield.

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

Committer:
marcel1691
Date:
Wed Mar 25 13:20:47 2015 +0000
Revision:
3:880adec02196
Parent:
2:e263949513ca
Child:
4:0710c12a0067
Selbstlaufend

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