/*
A simple Arduino UNO Program that switches between 4 LED modes:
1. x-mas mode that just are flickering lights
2. running lights, to do a sense of motion
3. pulsing effect using PWM
4. party effect that is simply simulating party lights XD
Um programa simples em Arduino UNO que muda entre 4 Modos de LED:
1. modo de natal com luzes piscantes
2. luzes correntes, que dão uma sensação de movimento
3. efeito pulsante usando PWM
4. efeito de festa que simula luzes de festa XD
*/
#include <LiquidCrystal_I2C.h>
// LCD variables:
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 2
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
// Other variables:
const int button_pin = 0;
int mode = 0;
// pins variables:
const int x_mas_set[] = {5,6,7};
const int motion_pins[] = {9,10,11,12,13}
void set_text(const char* text, int columm = 0, bool clear = true){ // sets the LCD text to some other text
if (clear){
lcd.clear();
}
lcd.setCursor(0,columm);
lcd.print(text);
}
void init_pins(int list[], size, mode=OUTPUT){
for(i=0;i<size;i++){
pinMode(list[i], mode);
}
}
void switch_mode(){
end_modes();
switch(mode){
case 0:
set_text("Current mode:");
set_text("None", 1, false);
break;
case 1:
set_text("Current mode:");
set_text("x_mas", 1, false);
x_mas();
break;
case 2:
set_text("Current mode:");
set_text("Motion Lights", 1, false);
break;
case 3:
set_text("Current mode:");
set_text("Pulsing Lights", 1, false);
break;
case 4:
set_text("Current mode:");
set_text("Party Lights", 1, false);
break;
}
mode++;
if (mode == 5){
mode = 1;
}
}
void verify_button(){
delay(100);
pinMode(button_pin, INPUT_PULLUP);
if (digitalRead(button_pin) == LOW){
switch_mode();
}
}
void end_modes(){
end_x_mas();
set_text("Current mode:");
set_text("None", 1, false);
}
void x_mas(){ // x-mas lights main function
init_pins(x_mas_set, 3)
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 3; j++) {
digitalWrite(x_mas_set[j], HIGH);
delay(100);
digitalWrite(x_mas_set[j], LOW);
delay(100);
}
}
delay(1000);
for (int i = 0; i < 20; i++) {
int msdelay = 1000 / (i+1);
digitalWrite(x_mas_set[0], HIGH);
delay(msdelay);
digitalWrite(x_mas_set[1], HIGH);
delay(msdelay);
digitalWrite(x_mas_set[0], LOW);
digitalWrite(x_mas_set[2], HIGH);
delay(msdelay);
digitalWrite(x_mas_set[1], LOW);
delay(msdelay);
digitalWrite(x_mas_set[2], LOW);
}
delay(1000);
end_modes();
}
void end_x_mas() {
for (int i = 0; i < sizeof(x_mas_set) / sizeof(x_mas_set[0]); i++) {
if (digitalRead(x_mas_set[i]) == HIGH) {
digitalWrite(x_mas_set[i], LOW);
}
}
}
void motion_lights(){ // motion effect main function
init_pins(motion_pins, 5)
}
void pulsing_lights(){ // pulsing effect main function
//
}
void party_lights(){
//
}
void setup() {
lcd.init();
switch_mode();
}
void loop() {
verify_button();
}