0@0 LibraryRoot 0@0 355 0@0 169 308 0@0 root 2 0@0 1 5 100@20 100@20 corner: 209.0d@40.0d left Загрузить в Ардуино 103.0d 3@12.0d 9.0d 90@100 110@100 corner: 282.0d@140 90@100 corner: 302.0d@140 115.0d@114.5d EN_eff 90@130 104@130 WS2812_com_Glediator and Jinx db618684-e910-493b-a86d-4fcb821d077b 7916881f-67e2-46d7-ac93-ccad1947160c a1b1d295-0403-4ccb-816e-93627eed3186 WS2812 эффекты Glediator и Jinx через UART Управление световыми эффектами из программ Glediator и Jinx через компьютер. DATA_PIN - Выход на ленту (PIN 6). RX - 0, TX - 1. NUMBER_OF_PIXELS - количество пикселей (светодиодов). 183 NUMBER_OF_PIXELS 30 b4e48060-84f6-45cc-bb16-4daa7db892de f4b09df7-2287-40b5-a797-a003fe07849a DATA_PIN 6 9ee685a7-4675-4677-a406-63f644a4956b 486b8f08-dc78-4650-8457-233e3e34059b if (EN_eff) { if (go==1) { cli(); ws2812_sendarray(display_buffer, NUMBER_OF_PIXELS * 3); sei(); go=0; } } 158 DATA_DDR |= (1 << DATA_PIN); UCSR0A |= (1<<U2X0); UCSR0B |= (1<<RXEN0) | (1<<TXEN0) | (1<<RXCIE0); UCSR0C |= (1<<UCSZ01) | (1<<UCSZ00) ; UBRR0H = 0; UBRR0L = 1; //Baud Rate 1 MBit (at F_CPU = 16MHz) ptr=display_buffer; sei(); 288 #define DATA_PORT PORTD #define DATA_DDR DDRD display_buffer [NUMBER_OF_PIXELS * 3]; unsigned char *ptr ; static unsigned char pos = 0; static unsigned int go = 0; volatile unsigned char uint8_t curbyte,ctr,masklo; uint8_t maskhi = _BV(DATA_PIN); masklo =~ maskhi & DATA_PORT; maskhi |= DATA_PORT; while (datlen--) { curbyte = *data++; asm volatile ( " ldi %0,8 \n\t" // 0 "loop%=:out %2, %3 \n\t" // 1 "lsl %1 \n\t" // 2 "dec %0 \n\t" // 3 " rjmp .+0 \n\t" // 5 " brcs .+2 \n\t" // 6l / 7h " out %2,%4 \n\t" // 7l / - " rjmp .+0 \n\t" // 9 " nop \n\t" // 10 " out %2,%4 \n\t" // 11 " breq end%= \n\t" // 12 nt. 13 taken " rjmp .+0 \n\t" // 14 " rjmp .+0 \n\t" // 16 " rjmp .+0 \n\t" // 18 " rjmp loop%= \n\t" // 20 "end%=: \n\t" : "=&d" (ctr) : "r" (curbyte), "I" (_SFR_IO_ADDR(DATA_PORT)), "r" (maskhi), "r" (masklo) ); } 815 void ws2812_sendarray uint8_t *data uint16_t datlen unsigned char b; b=UDR0; if (b == 1) {pos=0; ptr=display_buffer; return;} if (pos == (NUMBER_OF_PIXELS*3)) {} else {*ptr=b; ptr++; pos++;} if (pos == ((NUMBER_OF_PIXELS*3)-1)) {go=1;} 202 ISR USART_RX_vect 90@120 corner: 110@140 172.0d 221.0d 0 9600 arduinoIDE 31 1024 Arduino Uno 142360727