/*Digital Pin 2 is on PE4 (OC3B/INT4)*/ #define PIN 2 void setup() { // put your setup code here, to run once: /*define Pin 2/PE4 as output*/ /*Libraries included w/arduino IDE*/ DDRE = 0b00010000; } void loop() { // put your main code here, to run repeatedly: while(1){ //sendPixel(0,0,0,10); //sendPixel(0,0,5); OneLittleRGBFunc(30); delay(1000); } } /* * Good way to see how fast your GPIO really is void PixHi (void){ PORTE = 0b00010000; } void PixLow (void){ PORTE = 0x00; } */ void PixZero (void){ PORTE = 0b00010000; //_delay_us(0.25); PORTE = 0x00; //_delay_us(0.25); } void PixOne (void){ PORTE = 0b00010000; //_delay_us(0.55); _delay_us(0.55); PORTE = 0x00; } void PixBit (bool res){ if (res == false){ PixZero(); } if (res == true){ PixOne(); } } void PixByte (char input){ uint8_t changer = 0; //WS2812 reads bits as left is lowest (high in first), so go backwards for(changer=8;changer>0;changer--){ PixBit(bitRead(input, changer)); //input <<= 1; //Atmega didn't like this, so instead, using changer //instead of shifting input } } void sendPixel(uint8_t g, uint8_t r, uint8_t b){ /*ws2812, reads bits left side as lowest*/ /*PixByte(0b10100000); //This is dim green PixByte(0b00000000); PixByte(0b00000000); PixByte(0b00000000); //no white on my LED*/ PixByte(g); PixByte(r); PixByte(b); //PixByte(w); PORTE = 0x00; } void OneLittleRGBFunc (uint8_t max){ int rgbfunc = 0; for (rgbfunc = 0; rgbfunc < max; rgbfunc++){ sendPixel(0,10,rgbfunc); delay(22); } for (rgbfunc = max; rgbfunc > 0; rgbfunc--){ sendPixel(0,10,rgbfunc); delay(22); } }