Last version of the Balloons Lamp Module

Dependencies:   NeoStrip mbed nRF24L01P

Fork of NeoPixels by Allen Wild

Committer:
yanndouze
Date:
Thu Nov 19 12:26:19 2015 +0000
Revision:
1:5ec5616d984e
Parent:
0:f38492690f0e
Last version of the Balloons Lamp Module

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aswild 0:f38492690f0e 1 /*
yanndouze 1:5ec5616d984e 2 * Balloons module Lampe
yanndouze 1:5ec5616d984e 3 * Autheur : Yann DOUZE douze.yann@gmail.com
yanndouze 1:5ec5616d984e 4 * Date : 2015/06/24
yanndouze 1:5ec5616d984e 5 * Version 0.9
aswild 0:f38492690f0e 6 */
aswild 0:f38492690f0e 7
aswild 0:f38492690f0e 8 #include "mbed.h"
aswild 0:f38492690f0e 9 #include "NeoStrip.h"
yanndouze 1:5ec5616d984e 10 #include "nRF24L01P.h"
yanndouze 1:5ec5616d984e 11 #define N 12
yanndouze 1:5ec5616d984e 12 #define PATTERNS 4
yanndouze 1:5ec5616d984e 13 #define TRANSFER_SIZE 4
yanndouze 1:5ec5616d984e 14
yanndouze 1:5ec5616d984e 15
yanndouze 1:5ec5616d984e 16 Serial pc(USBTX, USBRX); // tx, rx
aswild 0:f38492690f0e 17
yanndouze 1:5ec5616d984e 18 nRF24L01P my_nrf24l01p(p5, p6, p7, p8, p9, p10); // mosi, miso, sck, csn, ce, irq
aswild 0:f38492690f0e 19
yanndouze 1:5ec5616d984e 20 DigitalOut myled1(LED1);
yanndouze 1:5ec5616d984e 21 DigitalOut myled2(LED2);
yanndouze 1:5ec5616d984e 22 DigitalOut myled3(LED3);
yanndouze 1:5ec5616d984e 23 DigitalOut myled4(LED4);
yanndouze 1:5ec5616d984e 24
aswild 0:f38492690f0e 25 void pattern0();
aswild 0:f38492690f0e 26 void pattern1();
aswild 0:f38492690f0e 27 void pattern2();
yanndouze 1:5ec5616d984e 28 void pattern3();
yanndouze 1:5ec5616d984e 29 void heartbeat();
yanndouze 1:5ec5616d984e 30 void circle_light();
yanndouze 1:5ec5616d984e 31
yanndouze 1:5ec5616d984e 32 unsigned char R=255;
yanndouze 1:5ec5616d984e 33 unsigned char G=255;
yanndouze 1:5ec5616d984e 34 unsigned char B=100;
yanndouze 1:5ec5616d984e 35
yanndouze 1:5ec5616d984e 36 /*
yanndouze 1:5ec5616d984e 37 unsigned char R=249;
yanndouze 1:5ec5616d984e 38 unsigned char G=66;
yanndouze 1:5ec5616d984e 39 unsigned char B=58;
yanndouze 1:5ec5616d984e 40 */
yanndouze 1:5ec5616d984e 41 //void pattern4();
yanndouze 1:5ec5616d984e 42
aswild 0:f38492690f0e 43
aswild 0:f38492690f0e 44 // array of function pointers to the various patterns
yanndouze 1:5ec5616d984e 45 void (*patterns[])(void) = {&pattern0, &pattern1, &pattern2, &pattern3};
aswild 0:f38492690f0e 46
yanndouze 1:5ec5616d984e 47 NeoStrip strip(p20, N);
yanndouze 1:5ec5616d984e 48 DigitalIn b1(p22); // brightness up
yanndouze 1:5ec5616d984e 49 DigitalIn b2(p21); // brightness down
yanndouze 1:5ec5616d984e 50 DigitalIn b3(p19); // bouton mamie
aswild 0:f38492690f0e 51
aswild 0:f38492690f0e 52 // timer used for debugging
aswild 0:f38492690f0e 53 Timer timer;
yanndouze 1:5ec5616d984e 54 float bright = 0.95; // 20% is plenty for indoor use
yanndouze 1:5ec5616d984e 55 unsigned int sens=0;
yanndouze 1:5ec5616d984e 56 float bri =0.01;
yanndouze 1:5ec5616d984e 57
yanndouze 1:5ec5616d984e 58 void circle_light()
yanndouze 1:5ec5616d984e 59 {
yanndouze 1:5ec5616d984e 60 for (int i = 0; i < N; i++)
yanndouze 1:5ec5616d984e 61 {
yanndouze 1:5ec5616d984e 62 strip.setPixel(i, 0, 0, 0); //Black
yanndouze 1:5ec5616d984e 63 }
yanndouze 1:5ec5616d984e 64 strip.write();//eteint toute les leds
yanndouze 1:5ec5616d984e 65 for (int i = 0; i < N; i++) //allume les leds une à une
yanndouze 1:5ec5616d984e 66 {
yanndouze 1:5ec5616d984e 67 strip.setPixel(i, R, G, B); //Yellow
yanndouze 1:5ec5616d984e 68 strip.write();
yanndouze 1:5ec5616d984e 69 wait_ms(100);
yanndouze 1:5ec5616d984e 70 }
yanndouze 1:5ec5616d984e 71 }
aswild 0:f38492690f0e 72
aswild 0:f38492690f0e 73 int main()
aswild 0:f38492690f0e 74 {
aswild 0:f38492690f0e 75 b1.mode(PullDown);
aswild 0:f38492690f0e 76 b2.mode(PullDown);
aswild 0:f38492690f0e 77 b3.mode(PullDown);
yanndouze 1:5ec5616d984e 78 char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE];
yanndouze 1:5ec5616d984e 79 txData[0]='M'; //M comme Mami
yanndouze 1:5ec5616d984e 80 txData[1]='B'; //B comme Bouton
yanndouze 1:5ec5616d984e 81 txData[3]=0x31; //comme 1 en ASCII
yanndouze 1:5ec5616d984e 82 int txDataCnt = 4;
yanndouze 1:5ec5616d984e 83 int rxDataCnt = 0;
yanndouze 1:5ec5616d984e 84 int SendCounter=0;
aswild 0:f38492690f0e 85 int pattern = 0;
yanndouze 1:5ec5616d984e 86 float bright = 0.5; // 20% is plenty for indoor use
aswild 0:f38492690f0e 87 bool b3o = b3; // old copy of button 3 to poll for changes
aswild 0:f38492690f0e 88
aswild 0:f38492690f0e 89 strip.setBrightness(bright); // set default brightness
aswild 0:f38492690f0e 90
yanndouze 1:5ec5616d984e 91 my_nrf24l01p.powerUp();
yanndouze 1:5ec5616d984e 92
yanndouze 1:5ec5616d984e 93 // Display the (default) setup of the nRF24L01+ chip
yanndouze 1:5ec5616d984e 94 pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() );
yanndouze 1:5ec5616d984e 95 pc.printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() );
yanndouze 1:5ec5616d984e 96 pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() );
yanndouze 1:5ec5616d984e 97 pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() );
yanndouze 1:5ec5616d984e 98 pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() );
yanndouze 1:5ec5616d984e 99
yanndouze 1:5ec5616d984e 100 pc.printf( "Type keys to test transfers:\r\n (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE );
yanndouze 1:5ec5616d984e 101
yanndouze 1:5ec5616d984e 102 my_nrf24l01p.setTransferSize( TRANSFER_SIZE );
yanndouze 1:5ec5616d984e 103
yanndouze 1:5ec5616d984e 104 my_nrf24l01p.setReceiveMode();
yanndouze 1:5ec5616d984e 105 my_nrf24l01p.enable();
yanndouze 1:5ec5616d984e 106
yanndouze 1:5ec5616d984e 107 circle_light();
yanndouze 1:5ec5616d984e 108
aswild 0:f38492690f0e 109 while (true)
aswild 0:f38492690f0e 110 {
aswild 0:f38492690f0e 111 timer.reset(); // use a timer to measure loop execution time for debugging purposes
aswild 0:f38492690f0e 112 timer.start(); // for this application, the main loop takes approximately 3ms to run
aswild 0:f38492690f0e 113
aswild 0:f38492690f0e 114 // button 1 increases brightness
aswild 0:f38492690f0e 115 if (b1 && bright < 1)
aswild 0:f38492690f0e 116 {
aswild 0:f38492690f0e 117 bright += 0.01;
aswild 0:f38492690f0e 118 if (bright > 1)
aswild 0:f38492690f0e 119 bright = 1;
aswild 0:f38492690f0e 120 strip.setBrightness(bright);
aswild 0:f38492690f0e 121 }
aswild 0:f38492690f0e 122
aswild 0:f38492690f0e 123 // button 2 decreases brightness
aswild 0:f38492690f0e 124 if (b2 && bright > 0)
aswild 0:f38492690f0e 125 {
aswild 0:f38492690f0e 126 bright -= 0.01;
aswild 0:f38492690f0e 127 if (bright < 0)
aswild 0:f38492690f0e 128 bright = 0;
aswild 0:f38492690f0e 129 strip.setBrightness(bright);
aswild 0:f38492690f0e 130 }
aswild 0:f38492690f0e 131
aswild 0:f38492690f0e 132 if (b3 != b3o)
aswild 0:f38492690f0e 133 {
yanndouze 1:5ec5616d984e 134 b3o = b3;
yanndouze 1:5ec5616d984e 135 myled1 = !myled1;
yanndouze 1:5ec5616d984e 136 if (b3)
yanndouze 1:5ec5616d984e 137 {
aswild 0:f38492690f0e 138 pattern = 0;
yanndouze 1:5ec5616d984e 139 pc.printf("Mamie a appuye sur le bouton ! \r\n");
yanndouze 1:5ec5616d984e 140 txData[2]=SendCounter++;
yanndouze 1:5ec5616d984e 141 if(SendCounter==255) SendCounter=0;
yanndouze 1:5ec5616d984e 142 my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, txDataCnt );
yanndouze 1:5ec5616d984e 143 circle_light();
yanndouze 1:5ec5616d984e 144 }
aswild 0:f38492690f0e 145 }
aswild 0:f38492690f0e 146
yanndouze 1:5ec5616d984e 147 if ( my_nrf24l01p.readable() ) {
yanndouze 1:5ec5616d984e 148
yanndouze 1:5ec5616d984e 149 // ...read the data into the receive buffer
yanndouze 1:5ec5616d984e 150 rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) );
yanndouze 1:5ec5616d984e 151
yanndouze 1:5ec5616d984e 152 // Display the receive buffer contents via the host serial link
yanndouze 1:5ec5616d984e 153 //for ( int i = 0; rxDataCnt > 0; rxDataCnt--, i++ ) {
yanndouze 1:5ec5616d984e 154 if(rxData[3]==12){
yanndouze 1:5ec5616d984e 155 pc.putc( rxData[0] );
yanndouze 1:5ec5616d984e 156 pc.putc( rxData[1] );
yanndouze 1:5ec5616d984e 157 pc.printf(" Message %d \r\n",rxData[2]);
yanndouze 1:5ec5616d984e 158 pattern=1;
yanndouze 1:5ec5616d984e 159
yanndouze 1:5ec5616d984e 160 }
yanndouze 1:5ec5616d984e 161 if(rxData[3]==13){
yanndouze 1:5ec5616d984e 162 pc.putc( rxData[0] );
yanndouze 1:5ec5616d984e 163 pc.putc( rxData[1] );
yanndouze 1:5ec5616d984e 164 pc.printf(" Message %d \r\n",rxData[2]);
yanndouze 1:5ec5616d984e 165 pattern=2;
yanndouze 1:5ec5616d984e 166
yanndouze 1:5ec5616d984e 167 }
yanndouze 1:5ec5616d984e 168 if(rxData[3]==14){
yanndouze 1:5ec5616d984e 169 pc.putc( rxData[0] );
yanndouze 1:5ec5616d984e 170 pc.putc( rxData[1] );
yanndouze 1:5ec5616d984e 171 pc.printf(" Message %d \r\n",rxData[2]);
yanndouze 1:5ec5616d984e 172 pattern=3;
yanndouze 1:5ec5616d984e 173
yanndouze 1:5ec5616d984e 174 }
yanndouze 1:5ec5616d984e 175
yanndouze 1:5ec5616d984e 176 // Toggle LED2 (to help debug nRF24L01+ -> Host communication)
yanndouze 1:5ec5616d984e 177 myled2 = !myled2;
yanndouze 1:5ec5616d984e 178 sens=0;
yanndouze 1:5ec5616d984e 179 bri =0.01;
yanndouze 1:5ec5616d984e 180 }
yanndouze 1:5ec5616d984e 181
aswild 0:f38492690f0e 182 // run the pattern update function which sets the strip's pixels
aswild 0:f38492690f0e 183 patterns[pattern]();
aswild 0:f38492690f0e 184 strip.write();
aswild 0:f38492690f0e 185
aswild 0:f38492690f0e 186 timer.stop();
aswild 0:f38492690f0e 187 // print loop time if b3 is pressed
aswild 0:f38492690f0e 188 if (b3)
aswild 0:f38492690f0e 189 printf("Loop Time: %dus\n", timer.read_us());
aswild 0:f38492690f0e 190
aswild 0:f38492690f0e 191 wait_ms(10);
aswild 0:f38492690f0e 192 }
aswild 0:f38492690f0e 193 }
aswild 0:f38492690f0e 194
aswild 0:f38492690f0e 195 // pattern0 displays a static image
aswild 0:f38492690f0e 196 void pattern0()
yanndouze 1:5ec5616d984e 197 {
aswild 0:f38492690f0e 198 for (int i = 0; i < N; i++)
aswild 0:f38492690f0e 199 {
yanndouze 1:5ec5616d984e 200 strip.setPixel(i, R, G, B); //Yellow
yanndouze 1:5ec5616d984e 201 }
yanndouze 1:5ec5616d984e 202 strip.setBrightness(bright);
yanndouze 1:5ec5616d984e 203
yanndouze 1:5ec5616d984e 204 }
aswild 0:f38492690f0e 205
yanndouze 1:5ec5616d984e 206 void heartbeat()
yanndouze 1:5ec5616d984e 207 {
yanndouze 1:5ec5616d984e 208 if (bri>0.95f) sens =1;
yanndouze 1:5ec5616d984e 209 if (bri<0.25f) sens=0;
yanndouze 1:5ec5616d984e 210
yanndouze 1:5ec5616d984e 211 if (sens==1)
yanndouze 1:5ec5616d984e 212 {
yanndouze 1:5ec5616d984e 213 bri -= 0.007;
aswild 0:f38492690f0e 214 }
aswild 0:f38492690f0e 215
yanndouze 1:5ec5616d984e 216 if (sens==0)
yanndouze 1:5ec5616d984e 217 {
yanndouze 1:5ec5616d984e 218 bri += 0.007;
yanndouze 1:5ec5616d984e 219 }
yanndouze 1:5ec5616d984e 220 strip.setBrightness(bri);
aswild 0:f38492690f0e 221 }
aswild 0:f38492690f0e 222
yanndouze 1:5ec5616d984e 223 void pattern1()
aswild 0:f38492690f0e 224 {
yanndouze 1:5ec5616d984e 225 for (int i = 0; i < N; i++)
aswild 0:f38492690f0e 226 {
yanndouze 1:5ec5616d984e 227 strip.setPixel(i, 0, 191, 255); //DeepSkyBlue
aswild 0:f38492690f0e 228 }
yanndouze 1:5ec5616d984e 229 heartbeat();
aswild 0:f38492690f0e 230 }
aswild 0:f38492690f0e 231
yanndouze 1:5ec5616d984e 232 void pattern2()
yanndouze 1:5ec5616d984e 233 {
yanndouze 1:5ec5616d984e 234 for (int i = 0; i < N; i++)
yanndouze 1:5ec5616d984e 235 {
yanndouze 1:5ec5616d984e 236 strip.setPixel(i, 255, 0, 255); //magenta
yanndouze 1:5ec5616d984e 237 }
yanndouze 1:5ec5616d984e 238 heartbeat();
yanndouze 1:5ec5616d984e 239 }
yanndouze 1:5ec5616d984e 240
yanndouze 1:5ec5616d984e 241 void pattern3()
yanndouze 1:5ec5616d984e 242 {
yanndouze 1:5ec5616d984e 243 for (int i = 0; i < N; i++)
yanndouze 1:5ec5616d984e 244 {
yanndouze 1:5ec5616d984e 245 strip.setPixel(i, 255, 127, 0); //DarkOrange
yanndouze 1:5ec5616d984e 246 }
yanndouze 1:5ec5616d984e 247 heartbeat();
yanndouze 1:5ec5616d984e 248 }
yanndouze 1:5ec5616d984e 249