Product Documentation
- LED Products
- Arduino Products
- Audio Products
- Timekeeping Products
- Power Products
- Wire Products
#include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #define datapin 5 #define latchpin 0 #define enablepin 1 #define clockpin 4 int SB_CommandMode = 0; int SB_RedCommand = 0; int SB_GreenCommand = 0; int SB_BlueCommand = 0; #define NumLEDs 2 int LEDChannels[NumLEDs][3]; int newred = 0; int newgreen = 0; int newblue = 0; int oldred = 0; int oldgreen = 0; int oldblue = 0; void USI_ShiftOut(unsigned char SendByte) { USIDR = SendByte; USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USITC); USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC); USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USITC); USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC); USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USITC); USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC); USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USITC); USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC); USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USITC); USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC); USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USITC); USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC); USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USITC); USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC); USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USITC); USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC); } void SB_SendPacket() { if (SB_CommandMode == 1) { SB_RedCommand = 127; SB_GreenCommand = 115; SB_BlueCommand = 115; } USI_ShiftOut(SB_CommandMode << 6 | SB_BlueCommand>>4); USI_ShiftOut(SB_BlueCommand<<4 | SB_RedCommand>>6); USI_ShiftOut(SB_RedCommand << 2 | SB_GreenCommand>>8); USI_ShiftOut(SB_GreenCommand); } void WriteLEDArray() { SB_CommandMode = 0; // Write to PWM control registers for (int h = 0;h<NumLEDs;h++) { SB_RedCommand = LEDChannels[h][0]; SB_GreenCommand = LEDChannels[h][1]; SB_BlueCommand = LEDChannels[h][2]; SB_SendPacket(); } _delay_ms(.1); PORTA |= (1 << latchpin); PORTA |= (1 << enablepin); _delay_ms(.1); PORTA &= ~(1 << enablepin); PORTA &= ~(1 << latchpin); SB_CommandMode = 1; // Write to current control registers for (int z = 0; z < NumLEDs; z++) SB_SendPacket(); _delay_ms(.1); PORTA |= (1 << latchpin); _delay_ms(.1); PORTA &= ~(1 << latchpin); } void fadeall(int rate, int steps, int fromred, int fromgreen, int fromblue, int tored, int togreen, int toblue) { for (int i = 0; i < steps; i++) { for (int j = 0; j < NumLEDs; j++) { LEDChannels[j][0] = ((fromred * (steps - i - 1) + tored * i)/(steps-1))*4; LEDChannels[j][1] = ((fromgreen * (steps - i - 1) + togreen * i)/(steps-1))*4; LEDChannels[j][2] = ((fromblue * (steps - i - 1) + toblue * i)/(steps-1))*4; } WriteLEDArray(); _delay_ms(rate); } } int main(void) { DDRA |= (1 << datapin)|(1 << latchpin)|(1 << enablepin)|(1 << clockpin); PORTA &= ~((1 << latchpin)|(1 << enablepin)); while(1) { oldred = newred; oldgreen = newgreen; oldblue = newblue; newred = (rand()/2048)*16; newgreen = (rand()/2048)*16; newblue = (rand()/2048)*16; fadeall(8, 65, 0, 0, 0, newred, newgreen, newblue); _delay_ms(500); fadeall(8, 65, newred, newgreen, newblue, 0, 0, 0); _delay_ms(500); } }