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

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