// RGBLED on ATtiny85
// Reference material: https://www.engineersgarage.com/?s=attiny85
#define rPin 1 // PB1 - Pin 6 - PWM
#define gPin 0 // PB0 - Pin 5 - PWM
#define bPin 4 // PB4 - Pin 3 - PWM
#define vMax 255 // Maximum brightness
#define vMin 0 // Minimum brightness
bool dir;
int rVal, gVal, bVal, i;
float counter = 0;
unsigned long timer, timeout = 10;
void setup() {
pinMode(rPin, OUTPUT); // configure I/O pin
pinMode(gPin, OUTPUT); // configure I/O pin
pinMode(bPin, OUTPUT); // configure I/O pin
}
void loop() {
crossfade();
// fadeupdown(); // one color (not blue)
}
void fadeupdown() {
if (millis() - timer > timeout) {
timer = millis();
if (i++ == 255) {
i = 0;
dir = !dir;
}
if (dir)
analogWrite(gPin, i);
else
analogWrite(gPin, 255 - i);
}
}
void crossfade() {
counter = counter + 1;
rVal = sin(counter / 100 + PI * 0 / 3) * 1000;
gVal = sin(counter / 100 + PI * 2 / 3) * 1000;
bVal = sin(counter / 100 + PI * 4 / 3) * 1000;
rVal = map(rVal, -1000, 1000, 0, 255);
gVal = map(gVal, -1000, 1000, 0, 255);
bVal = map(bVal, -1000, 1000, 0, 255);
analogWrite(rPin, rVal);
analogWrite(gPin, gVal);
analogWrite(bPin, bVal);
}
/************************************************************************************************
ATTINY85 +-- --+
PCINT5/-RESET/ADC0/dW/PB5 |1 * 8| VCC
PCINT3/XTAL1/CLKI/-OC1B/ADC3/PB3 |2 7| PB2/SCK/USCK/SCL/ADC1/T0/INT0/PCINT2
PWM4/PCINT4/XTAL2/CLKO/OC1B/ADC2/PB4 |3 6| PB1/MISO/DO/AIN1/OC0B/OC1A/PCINT1/PWM1
GND |4 5| PB0/MOSI/DI/SDA/AIN0/OC0A/-OC1A/AREF/PCINT0/PWM0
+-----+
************************************************************************************************/