Class available to make using NeoPixel lights very simple

Dependencies:   PixelArray

Dependents:   NeoPixelEasy

Committer:
dannellyz
Date:
Sun Feb 15 21:12:13 2015 +0000
Revision:
0:cfbe334f4b1c
round1 easyNeo class for NeoPixel leds;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dannellyz 0:cfbe334f4b1c 1 #include "mbed.h"
dannellyz 0:cfbe334f4b1c 2 #include "neopixel.h"
dannellyz 0:cfbe334f4b1c 3 #include "easyNeo.h"
dannellyz 0:cfbe334f4b1c 4 #define DATA_PIN p5
dannellyz 0:cfbe334f4b1c 5
dannellyz 0:cfbe334f4b1c 6 easyNeo::easyNeo(int leds)
dannellyz 0:cfbe334f4b1c 7 {
dannellyz 0:cfbe334f4b1c 8 numLeds = leds;
dannellyz 0:cfbe334f4b1c 9
dannellyz 0:cfbe334f4b1c 10 }
dannellyz 0:cfbe334f4b1c 11 uint8_t easyNeo::c2i(char c)
dannellyz 0:cfbe334f4b1c 12 {
dannellyz 0:cfbe334f4b1c 13 if( c >= '0' && c <= '9' ) return c-'0';
dannellyz 0:cfbe334f4b1c 14 if( c >= 'A' && c <= 'F' ) return c-'A'+10;
dannellyz 0:cfbe334f4b1c 15 if( c >= 'a' && c <= 'f' ) return c-'a'+10;
dannellyz 0:cfbe334f4b1c 16 return 0;
dannellyz 0:cfbe334f4b1c 17 }
dannellyz 0:cfbe334f4b1c 18
dannellyz 0:cfbe334f4b1c 19 void easyNeo::setPixel(neopixel::Pixel * buffer, uint32_t index, uint8_t red, uint8_t green, uint8_t blue, uint32_t length)
dannellyz 0:cfbe334f4b1c 20 {
dannellyz 0:cfbe334f4b1c 21 if (index >= length ) {
dannellyz 0:cfbe334f4b1c 22 return;
dannellyz 0:cfbe334f4b1c 23 }
dannellyz 0:cfbe334f4b1c 24 buffer[index].red = red;
dannellyz 0:cfbe334f4b1c 25 buffer[index].green = green;
dannellyz 0:cfbe334f4b1c 26 buffer[index].blue = blue;
dannellyz 0:cfbe334f4b1c 27 }
dannellyz 0:cfbe334f4b1c 28
dannellyz 0:cfbe334f4b1c 29
dannellyz 0:cfbe334f4b1c 30 void easyNeo::setByHex(char* hexString){
dannellyz 0:cfbe334f4b1c 31
dannellyz 0:cfbe334f4b1c 32 DigitalIn(DATA_PIN, PullDown);
dannellyz 0:cfbe334f4b1c 33
dannellyz 0:cfbe334f4b1c 34 // The pixel array control class.
dannellyz 0:cfbe334f4b1c 35 neopixel::PixelArray array(DATA_PIN);
dannellyz 0:cfbe334f4b1c 36
dannellyz 0:cfbe334f4b1c 37 // 8 is the number of pixels
dannellyz 0:cfbe334f4b1c 38 neopixel::Pixel buffer[numLeds];
dannellyz 0:cfbe334f4b1c 39 Serial pc(USBTX, USBRX); //Initalise PC serial comms
dannellyz 0:cfbe334f4b1c 40 int i,j,k,l;
dannellyz 0:cfbe334f4b1c 41 for(i=0, l = 0; i < (6*numLeds); i+=6,l ++){
dannellyz 0:cfbe334f4b1c 42 //pc.printf("val of i %d\n",i);
dannellyz 0:cfbe334f4b1c 43 int vals[3] = {0,0,0};
dannellyz 0:cfbe334f4b1c 44 for(k=i,j=0; k < i+6; k+=2,j++){
dannellyz 0:cfbe334f4b1c 45 //pc.printf("Index: %d %d\n",k,k+1);
dannellyz 0:cfbe334f4b1c 46 //pc.printf("Characters: %c %c\n",hexString[k],hexString[k+1]);
dannellyz 0:cfbe334f4b1c 47 //pc.printf("Value: %d\n",(c2i(hexString[k])*16+c2i(hexString[k+1])));
dannellyz 0:cfbe334f4b1c 48 vals[j] = (c2i(hexString[k])*16 + c2i(hexString[k+1]));
dannellyz 0:cfbe334f4b1c 49 }
dannellyz 0:cfbe334f4b1c 50 pc.printf("%d %d %d \n",vals[0],vals[1],vals[2]);
dannellyz 0:cfbe334f4b1c 51 easyNeo::setPixel(buffer, l, vals[0], vals[1], vals[2], numLeds);
dannellyz 0:cfbe334f4b1c 52 }
dannellyz 0:cfbe334f4b1c 53
dannellyz 0:cfbe334f4b1c 54 array.update(buffer, numLeds);
dannellyz 0:cfbe334f4b1c 55
dannellyz 0:cfbe334f4b1c 56 }
dannellyz 0:cfbe334f4b1c 57
dannellyz 0:cfbe334f4b1c 58
dannellyz 0:cfbe334f4b1c 59 void easyNeo::clear(){
dannellyz 0:cfbe334f4b1c 60
dannellyz 0:cfbe334f4b1c 61 for (int i = 0; i< numLeds; i = i++) {
dannellyz 0:cfbe334f4b1c 62 easyNeo::setByHex("000000");
dannellyz 0:cfbe334f4b1c 63 }
dannellyz 0:cfbe334f4b1c 64 }
dannellyz 0:cfbe334f4b1c 65
dannellyz 0:cfbe334f4b1c 66 void easyNeo::update(neopixel::Pixel * buffer){
dannellyz 0:cfbe334f4b1c 67
dannellyz 0:cfbe334f4b1c 68 DigitalIn(DATA_PIN, PullDown);
dannellyz 0:cfbe334f4b1c 69
dannellyz 0:cfbe334f4b1c 70 // The pixel array control class.
dannellyz 0:cfbe334f4b1c 71 neopixel::PixelArray array(DATA_PIN);
dannellyz 0:cfbe334f4b1c 72
dannellyz 0:cfbe334f4b1c 73 array.update(buffer, numLeds);
dannellyz 0:cfbe334f4b1c 74 }
dannellyz 0:cfbe334f4b1c 75
dannellyz 0:cfbe334f4b1c 76 void easyNeo::lightTest()
dannellyz 0:cfbe334f4b1c 77 {
dannellyz 0:cfbe334f4b1c 78 DigitalIn(DATA_PIN, PullDown);
dannellyz 0:cfbe334f4b1c 79
dannellyz 0:cfbe334f4b1c 80 // The pixel array control class.
dannellyz 0:cfbe334f4b1c 81 neopixel::PixelArray array(DATA_PIN);
dannellyz 0:cfbe334f4b1c 82
dannellyz 0:cfbe334f4b1c 83 // 8 is the number of pixels
dannellyz 0:cfbe334f4b1c 84 neopixel::Pixel buffer[numLeds];
dannellyz 0:cfbe334f4b1c 85
dannellyz 0:cfbe334f4b1c 86 // step through three colors with the same brigtness
dannellyz 0:cfbe334f4b1c 87 uint32_t i;
dannellyz 0:cfbe334f4b1c 88
dannellyz 0:cfbe334f4b1c 89 //Test Red
dannellyz 0:cfbe334f4b1c 90 for (i = 0x00; i<= 0xC8; i = i + 0x0A) {
dannellyz 0:cfbe334f4b1c 91 for(int k = 0; k < numLeds; k++){
dannellyz 0:cfbe334f4b1c 92 easyNeo::setPixel(buffer, k, i, 0x00, 0x00, numLeds);
dannellyz 0:cfbe334f4b1c 93 array.update(buffer, numLeds);
dannellyz 0:cfbe334f4b1c 94 wait_ms(100);
dannellyz 0:cfbe334f4b1c 95 }
dannellyz 0:cfbe334f4b1c 96 }
dannellyz 0:cfbe334f4b1c 97 //Test Blue
dannellyz 0:cfbe334f4b1c 98 for (i = 0x00; i<= 0xC8; i = i + 0x0A) {
dannellyz 0:cfbe334f4b1c 99 for(int k = 0; k < numLeds; k++){
dannellyz 0:cfbe334f4b1c 100 easyNeo::setPixel(buffer, k,0x00, i, 0x00, numLeds);
dannellyz 0:cfbe334f4b1c 101 array.update(buffer, numLeds);
dannellyz 0:cfbe334f4b1c 102 wait_ms(100);
dannellyz 0:cfbe334f4b1c 103 }
dannellyz 0:cfbe334f4b1c 104 }
dannellyz 0:cfbe334f4b1c 105 //Test Green
dannellyz 0:cfbe334f4b1c 106 for (i = 0x00; i<= 0xC8; i = i + 0x0A) {
dannellyz 0:cfbe334f4b1c 107 for(int k = 0; k < numLeds; k++){
dannellyz 0:cfbe334f4b1c 108 easyNeo::setPixel(buffer, k,0x00, 0x00, i, numLeds);
dannellyz 0:cfbe334f4b1c 109 array.update(buffer, numLeds);
dannellyz 0:cfbe334f4b1c 110 wait_ms(100);
dannellyz 0:cfbe334f4b1c 111 }
dannellyz 0:cfbe334f4b1c 112 }
dannellyz 0:cfbe334f4b1c 113 }