Interfaçage NeoPixel Ring 12, LPRO MECSE, Arnaud A.
Diff: neoPixelRing12.cpp
- Revision:
- 0:754bf033bd47
- Child:
- 1:76fb4b762ab1
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/neoPixelRing12.cpp Wed Jun 17 16:33:48 2020 +0000 @@ -0,0 +1,186 @@ +#include "neoPixelRing12.h" +#include "mbed.h" +#include "string.h" + +NeoPixelRing12::NeoPixelRing12(DigitalOut _digitalOutPin):digitalOutPin(_digitalOutPin) +{ +} + +bool NeoPixelRing12::rst( ) +{ + digitalOutPin=0; + wait_us(RST_TIME_IN_US); + return true; +} + +bool NeoPixelRing12::rgbToDataStructure(char* rgbCode){ + uint8_t i = 0; + uint8_t offset = 0; + + //Red + for (i=0; i<6; i++) { + if(i==0) + offset=11; + if(i==1) + offset=15; + if(i==2) + offset=3; + if(i==3) + offset=7; + if(i==4) + offset=19; + if(i==5) + offset=23; + switch (rgbCode[i]) { + case '0': + //////////cout << "0000"; + rgbDataStructure[offset]=false; + rgbDataStructure[offset-1]=false; + rgbDataStructure[offset-2]=false; + rgbDataStructure[offset-3]=false; + break; + case '1': + ////////////////////cout << "0001"; + rgbDataStructure[offset]=true; + rgbDataStructure[offset-1]=false; + rgbDataStructure[offset-2]=false; + rgbDataStructure[offset-3]=false; + break; + case '2': + ////////cout << "0010"; + rgbDataStructure[offset]=false; + rgbDataStructure[offset-1]=true; + rgbDataStructure[offset-2]=false; + rgbDataStructure[offset-3]=false; + break; + case '3': + ////////cout << "0011"; + rgbDataStructure[offset]=true; + rgbDataStructure[offset-1]=true; + rgbDataStructure[offset-2]=false; + rgbDataStructure[offset-3]=false; + break; + case '4': + ////////cout << "0100"; + rgbDataStructure[offset]=false; + rgbDataStructure[offset-1]=false; + rgbDataStructure[offset-2]=true; + rgbDataStructure[offset-3]=false; + break; + case '5': + ////////cout << "0101"; + rgbDataStructure[offset]=true; + rgbDataStructure[offset-1]=false; + rgbDataStructure[offset-2]=true; + rgbDataStructure[offset-3]=false; + break; + case '6': + ////////cout << "0110"; + rgbDataStructure[offset]=false; + rgbDataStructure[offset-1]=true; + rgbDataStructure[offset-2]=true; + rgbDataStructure[offset-3]=false; + break; + case '7': + ////////cout << "0111"; + rgbDataStructure[offset]=true; + rgbDataStructure[offset-1]=true; + rgbDataStructure[offset-2]=true; + rgbDataStructure[offset-3]=false; + break; + case '8': + ////////cout << "1000"; + rgbDataStructure[offset]=false; + rgbDataStructure[offset-1]=false; + rgbDataStructure[offset-2]=false; + rgbDataStructure[offset-3]=true; + break; + case '9': + ////////cout << "1001"; + rgbDataStructure[offset]=true; + rgbDataStructure[offset-1]=false; + rgbDataStructure[offset-2]=false; + rgbDataStructure[offset-3]=true; + break; + case 'A': + case 'a': + ////////cout << "1010"; + rgbDataStructure[offset]=false; + rgbDataStructure[offset-1]=true; + rgbDataStructure[offset-2]=false; + rgbDataStructure[offset-3]=true; + break; + case 'B': + case 'b': + ////////cout << "1011"; + rgbDataStructure[offset]=true; + rgbDataStructure[offset-1]=true; + rgbDataStructure[offset-2]=false; + rgbDataStructure[offset-3]=true; + break; + case 'C': + case 'c': + ////////cout << "1100"; + rgbDataStructure[offset]=false; + rgbDataStructure[offset-1]=false; + rgbDataStructure[offset-2]=true; + rgbDataStructure[offset-3]=true; + break; + case 'D': + case 'd': + ////////cout << "1101"; + rgbDataStructure[offset]=true; + rgbDataStructure[offset-1]=false; + rgbDataStructure[offset-2]=true; + rgbDataStructure[offset-3]=true; + break; + case 'E': + case 'e': + ////////cout << "1110"; + rgbDataStructure[offset]=false; + rgbDataStructure[offset-1]=true; + rgbDataStructure[offset-2]=true; + rgbDataStructure[offset-3]=true; + break; + case 'F': + case 'f': + ////////cout << "1111"; + rgbDataStructure[offset]=true; + rgbDataStructure[offset-1]=true; + rgbDataStructure[offset-2]=true; + rgbDataStructure[offset-3]=true; + break; + default: + return false; + } + } + return true; +} + +bool NeoPixelRing12::bit(bool value){ + if(!value){ + digitalOutPin = 1; + wait_ns(190); + digitalOutPin = 0; + wait_ns(740); + } + else{ + digitalOutPin = 1; + wait_ns(600); + digitalOutPin = 0; + wait_ns(600); + } + return true; +} + +bool NeoPixelRing12::setLights(int nbOfLeds, char* rgbCode){ + rgbToDataStructure(rgbCode); + for(int i=0; i<nbOfLeds; i++){ + for(int y=0; y<24; y++){ + bit(rgbDataStructure[y]); + } + } + return true; +} + +