Interfaçage NeoPixel Ring 12, LPRO MECSE, Arnaud A.

neoPixelRing12.cpp

Committer:
Rhamao
Date:
2020-06-17
Revision:
0:754bf033bd47
Child:
1:76fb4b762ab1

File content as of revision 0:754bf033bd47:

#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;
}