Hola, estoy trabajando en una replica de la librería NeoPixel, ya hago la traducción de valores decimales a binarios en 8 bits, y ya puedo crear la trama para la tira de led WS2812b. El detalle es que en el momento de enviar los datos por PWM, no los reconoce la tira de leds WS2812b, creo que tiene algo que ver con la frecuencia de Arduino. Alguien tiene alguna idea de por que? Adjunto mi código:
/*/
Traduccion de funcines WS2812
*/
int TramaFinal[240];
int posicion = 0;
int arrayR[10];
int arrayG[10];
int arrayB[10];
String arrayTrama[10];
float numeroDecimal;
String valorBinario = "";
String valorBinarioR = "";
String valorBinarioG = "";
String valorBinarioB = "";
String trama;
int pin = 2;
void setup() {
Serial.begin(9600);
pinMode(pin, OUTPUT);
}
void loop() {
RellenoArrayRGB();
Trama();
leds();
//reset();
}
void RellenoArrayRGB() {
Serial.println("Valores RGB:");
for (int a = 0; a <= 9; a++) {
arrayR[a] = random(0, 255);
arrayG[a] = random(0, 255);
arrayB[a] = random(0, 255);
Serial.print(arrayR[a]);
Serial.print(" , ");
Serial.print(arrayG[a]);
Serial.print(" , ");
Serial.print(arrayB[a]);
Serial.println();
}
}
void Trama() {
for (int b = 0; b <= 9; b++) {
numeroDecimal = arrayR[b];
ConversionDecimalBinario();
valorBinarioR = valorBinario;
numeroDecimal = arrayG[b];
ConversionDecimalBinario();
valorBinarioG = valorBinario;
numeroDecimal = arrayB[b];
ConversionDecimalBinario();
valorBinarioB = valorBinario;
trama = valorBinarioR + valorBinarioG + valorBinarioB;
arrayTrama[b] = trama;
Serial.print("\nTrama del led ");
Serial.print(b);
Serial.print(" Valores Binarios ");
Serial.print(trama);
}
}
void ConversionDecimalBinario() {
float numeroBinario;
String cadena = "";
if (numeroDecimal > 255) {
Serial.println("Valor no valido");
} else {
for (int i = 7; i >= 0; i--) {
numeroBinario = pow(2, i);
if (numeroDecimal >= numeroBinario) {
numeroDecimal = numeroDecimal - numeroBinario;
cadena = cadena + "1";
TramaFinal[posicion] = '1';
posicion++;
//Serial.println(TramaFinal[posicion]);
} else {
cadena = cadena + "0";
TramaFinal[posicion] = '0';
posicion++;
//Serial.println(TramaFinal[posicion]);
}
}
valorBinario = cadena;
cadena = "";
}
}
void Imprimir() {
int cont = 0;
for (int i = 0; i <= 9; i++) {
Serial.println();
Serial.print("Bits: ");
for (int b = 1; b <= 24; b++) {
Serial.print(TramaFinal[cont]);
cont = cont + 1;
}
}
}
void leds() {
//pinMode(pin,OUTPUT);
for (int b = 0; b <= 239; b++) {
if (TramaFinal[b] = 1) {
analogWrite(pin, 255);
delayMicroseconds(0.4);
analogWrite(pin, 0);
delayMicroseconds(0.85);
} else {
analogWrite(pin, 255);
delayMicroseconds(0.8);
analogWrite(pin, 0);
delayMicroseconds(0.45);
}
}
//pinMode(pin,INPUT);
//delay(5000);
}
void reset() {
pinMode(pin, OUTPUT);
digitalWrite(pin, LOW);
delayMicroseconds(500);
//pinMode(pin,INPUT);
}