Pixel led

Başlatan ChiliPepper, 04 Nisan 2023, 11:28:24

ChiliPepper


//1
#define WS_ONE(pinPtr) {\
   output_high(pinPtr); delay_cycles(1); delay_cycles(1); \
   delay_cycles(1); delay_cycles(1); delay_cycles(1); delay_cycles(1); \
   delay_cycles(1); delay_cycles(1); output_low(pinPtr);\
}

#define WS_ZERO(pinPtr) {\
   output_high(pinPtr); delay_cycles(1); delay_cycles(1); \
   output_low(pinPtr); delay_cycles(1); delay_cycles(1); \
   delay_cycles(1); delay_cycles(1); delay_cycles(1);\
}




/*Latches the data in to the devices after passing.  Call this
at the end of each update cycle.*/
#define WS_RESET(pinPtr) output_low(pinPtr); delay_us(1);

/*Low Level interface for sending data*/

void data_stream(unsigned int8 temp) {
//1
   if(temp & 0x80) {WS_ONE(DATA_PIN);} else {WS_ZERO(DATA_PIN);}
   if(temp & 0x40) {WS_ONE(DATA_PIN);} else {WS_ZERO(DATA_PIN);}
   if(temp & 0x20) {WS_ONE(DATA_PIN);} else {WS_ZERO(DATA_PIN);}
   if(temp & 0x10) {WS_ONE(DATA_PIN);} else {WS_ZERO(DATA_PIN);}
   if(temp & 0x08) {WS_ONE(DATA_PIN);} else {WS_ZERO(DATA_PIN);}
   if(temp & 0x04) {WS_ONE(DATA_PIN);} else {WS_ZERO(DATA_PIN);}
   if(temp & 0x02) {WS_ONE(DATA_PIN);} else {WS_ZERO(DATA_PIN);}
   if(temp & 0x01) {WS_ONE(DATA_PIN);} else {WS_ZERO(DATA_PIN);}

}

void RGB_color(char red, char green, char blue,) {

  data_stream(red);
  data_stream(green);
  data_stream(blue);
  WS_RESET(DATA_PIN);
}

Merhaba arkadaşlar yukarıdaki fonksiyonları kullanıp rgb pixel led sürüyorum. Örneğin 7. ledi kontrol etmek için RGB_color fonksiyonunu 7 kere döndürüyorum bu da 7. ledi kontrol etmem için ilk 6 lede tekrar veri yollamamı gerektiriyor. Acaba ilk 6 lede dokunmadan direk 7. ledi kontrol edebilmemin bir yolu var mı ? Ya da bunu sağlayan bir pixel led kütüphanesi. Sayıca fazla ledi karışık sıralamayla sürmeye kalktığımda beceremiyorum. Şimdiden teşekkürler.