0% found this document useful (0 votes)
19 views5 pages

ATtiny 88

Uploaded by

andrevanzato
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
19 views5 pages

ATtiny 88

Uploaded by

andrevanzato
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 5

// Use if you want to force the software SPI subsystem to be used for some reason

#define FASTLED_FORCE_SOFTWARE_SPI
// Use if you want to force non-accelerated pin access
#define FASTLED_FORCE_SOFTWARE_PINS

#include <FastLED.h>
#include <Button.h> // https://github.com/madleech/Button

// Define pins for ATtiny88


#define REM_BOTAO01_PIN 3 // Remote button 1 (PB3)
#define RELAY01_PIN 4 // Relay 1 (PB4)

#define REM_BOTAO02_PIN 5 // Remote button 2 (PB5)


#define RELAY02_PIN 6 // Relay 2 (PB6)

#define REM_BOTAO03_PIN 7 // Remote button 3 (PB7)


#define RELAY03_PIN 8 // Relay 3 (PD0)

// Define buttons on the control panel


#define BOTAO_RELAY01 9 // Panel button 1 (PD1)
#define BOTAO_RELAY02 10 // Panel button 2 (PD2)
#define BOTAO_RELAY03 11 // Panel button 3 (PD3)

// Define LED control pins (these should be connected to compatible pins on


ATtiny88)
#define DATA_PIN 12 // LED Data Pin (PD4)
#define CLK_PIN 13 // LED Clock Pin (PD5)

#define LED_TYPE P9813


#define COLOR_ORDER GRB
#define NUM_LEDS 60
CRGB leds[NUM_LEDS];
#define FRAMES_PER_SECOND 120

/////////////////////////// Button and Relay States ///////////////////////////


int relay01_state = LOW; // Current state of Relay 1
int rem_button01_state; // Current state of Remote Button 1
int last_rem_button01_state; // Previous state of Remote Button 1

int relay02_state = LOW; // Current state of Relay 2


int rem_button02_state; // Current state of Remote Button 2
int last_rem_button02_state; // Previous state of Remote Button 2

int relay03_state = LOW; // Current state of Relay 3


int rem_button03_state; // Current state of Remote Button 3
int last_rem_button03_state; // Previous state of Remote Button 3

////////////////////////// Panel Button States ///////////////////////////////


int button01_state; // Current state of Panel Button 1
int last_button01_state; // Previous state of Panel Button 1

int button02_state; // Current state of Panel Button 2


int last_button02_state; // Previous state of Panel Button 2

int button03_state; // Current state of Panel Button 3


int last_button03_state; // Previous state of Panel Button 3

//////////////////////// Pattern Variables ///////////////////////////////////


const uint8_t PIN_REM_BUTTON_PATTERN = 2; // Pattern button on remote (PB2)
Button rem_buttonPattern(PIN_REM_BUTTON_PATTERN);
const uint8_t PIN_BUTTON_PATTERN = 1; // Pattern button on panel (PB1)
Button buttonPattern(PIN_BUTTON_PATTERN);

uint8_t currentPatternIndex = 0; // Index number of which pattern is current


uint8_t hue = 0; // Rotating "base color" used by many of the patterns
uint8_t hueFast = 0; // Faster rotating "base color" used by many of the patterns
uint8_t autoplay = 0;
uint8_t autoplayDuration = 10;
unsigned long autoPlayTimeout = 0;
uint8_t cyclePalettes = 1;
uint8_t paletteDuration = 5;
uint8_t currentPaletteIndex = 0;
unsigned long paletteTimeout = 0;

///////////////////////// Brightness Control Variables ///////////////////////


const uint8_t PIN_REM_BUTTON_BRIGHTNESS = 0; // Brightness button on remote (PB0)
Button rem_buttonBrightness(PIN_REM_BUTTON_BRIGHTNESS);
const uint8_t PIN_BUTTON_BRIGHTNESS = 14; // Brightness button on panel (PC0, if
available on ATtiny88)
Button buttonBrightness(PIN_BUTTON_BRIGHTNESS);

uint8_t brightnesses[] = { 255, 200, 150, 100, 50, 0};


uint8_t currentBrightnessIndex = 1;

///////////////////////// Setup and Loop Functions ///////////////////////////


void setup() {
// Set up LED control pins
FastLED.addLeds<LED_TYPE, DATA_PIN, CLK_PIN, COLOR_ORDER>(leds,
NUM_LEDS).setCorrection(TypicalLEDStrip);
FastLED.setBrightness(brightnesses[currentBrightnessIndex]);

// Set relay pins as outputs


pinMode(RELAY01_PIN, OUTPUT);
pinMode(RELAY02_PIN, OUTPUT);
pinMode(RELAY03_PIN, OUTPUT);

// Set button pins as inputs


pinMode(REM_BOTAO01_PIN, INPUT_PULLUP);
pinMode(REM_BOTAO02_PIN, INPUT_PULLUP);
pinMode(REM_BOTAO03_PIN, INPUT_PULLUP);

pinMode(BOTAO_RELAY01, INPUT_PULLUP);
pinMode(BOTAO_RELAY02, INPUT_PULLUP);
pinMode(BOTAO_RELAY03, INPUT_PULLUP);
}

void loop() {
// Read the state of remote buttons
rem_button01_state = digitalRead(REM_BOTAO01_PIN);
rem_button02_state = digitalRead(REM_BOTAO02_PIN);
rem_button03_state = digitalRead(REM_BOTAO03_PIN);

// Read the state of panel buttons


button01_state = digitalRead(BOTAO_RELAY01);
button02_state = digitalRead(BOTAO_RELAY02);
button03_state = digitalRead(BOTAO_RELAY03);

/////////////////////// Remote Button Relay Toggle Logic ///////////////////////


// Button 1 - Toggle Relay 1
if (rem_button01_state != last_rem_button01_state) {
if (rem_button01_state == LOW) { // Button pressed
relay01_state = !relay01_state; // Toggle relay state
digitalWrite(RELAY01_PIN, relay01_state);
}
last_rem_button01_state = rem_button01_state;
}

// Button 2 - Toggle Relay 2


if (rem_button02_state != last_rem_button02_state) {
if (rem_button02_state == LOW) { // Button pressed
relay02_state = !relay02_state; // Toggle relay state
digitalWrite(RELAY02_PIN, relay02_state);
}
last_rem_button02_state = rem_button02_state;
}

// Button 3 - Toggle Relay 3


if (rem_button03_state != last_rem_button03_state) {
if (rem_button03_state == LOW) { // Button pressed
relay03_state = !relay03_state; // Toggle relay state
digitalWrite(RELAY03_PIN, relay03_state);
}
last_rem_button03_state = rem_button03_state;
}

/////////////////////// Panel Button Relay Toggle Logic ///////////////////////


// Panel Button 1 - Toggle Relay 1
if (button01_state != last_button01_state) {
if (button01_state == LOW) { // Button pressed
relay01_state = !relay01_state; // Toggle relay state
digitalWrite(RELAY01_PIN, relay01_state);
}
last_button01_state = button01_state;
}

// Panel Button 2 - Toggle Relay 2


if (button02_state != last_button02_state) {
if (button02_state == LOW) { // Button pressed
relay02_state = !relay02_state; // Toggle relay state
digitalWrite(RELAY02_PIN, relay02_state);
}
last_button02_state = button02_state;
}

// Panel Button 3 - Toggle Relay 3


if (button03_state != last_button03_state) {
if (button03_state == LOW) { // Button pressed
relay03_state = !relay03_state; // Toggle relay state
digitalWrite(RELAY03_PIN, relay03_state);
}
last_button03_state = button03_state;
}

////////////////////////// LED Pattern Change Logic ///////////////////////////


// Remote Pattern Button - Change LED Pattern
if (rem_buttonPattern.isPressed()) {
currentPatternIndex = (currentPatternIndex + 1) % 3; // Change pattern index
}

// Panel Pattern Button - Change LED Pattern


if (buttonPattern.isPressed()) {
currentPatternIndex = (currentPatternIndex + 1) % 3; // Change pattern index
}

// Update LED pattern based on the current index


switch (currentPatternIndex) {
case 0: fill_solid(leds, NUM_LEDS, CHSV(hue++, 255, 255)); break; // Basic
color fill pattern
case 1: fill_rainbow(leds, NUM_LEDS, hue++, 7); break; // Rainbow pattern
case 2: Fire2012(); break; // Fire pattern (user-defined function, you can
implement)
}

/////////////////////////// Brightness Control /////////////////////////////


// Remote Brightness Button - Adjust Brightness
if (rem_buttonBrightness.isPressed()) {
currentBrightnessIndex = (currentBrightnessIndex + 1) % (sizeof(brightnesses) /
sizeof(brightnesses[0]));
FastLED.setBrightness(brightnesses[currentBrightnessIndex]);
}

// Panel Brightness Button - Adjust Brightness


if (buttonBrightness.isPressed()) {
currentBrightnessIndex = (currentBrightnessIndex + 1) % (sizeof(brightnesses) /
sizeof(brightnesses[0]));
FastLED.setBrightness(brightnesses[currentBrightnessIndex]);
}

// Show the updated LEDs with the new pattern and brightness
FastLED.show();
delay(1000 / FRAMES_PER_SECOND); // Limit the frame rate
}

// Define Fire2012 pattern


void Fire2012() {
// Array of temperature readings at each simulation cell
static byte heat[NUM_LEDS];

// Step 1. Cool down every cell a little


for (int i = 0; i < NUM_LEDS; i++) {
heat[i] = qsub8(heat[i], random8(0, ((55 * 10) / NUM_LEDS) + 2));
}

// Step 2. Heat drifts up and diffuses a little


for (int k = NUM_LEDS - 1; k >= 2; k--) {
heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3;
}

// Step 3. Randomly ignite new sparks near the bottom


if (random8() < 120) {
int y = random8(7);
heat[y] = qadd8(heat[y], random8(160, 255));
}

// Step 4. Convert heat to LED colors


for (int j = 0; j < NUM_LEDS; j++) {
leds[j] = HeatColor(heat[j]);
}
}

You might also like