// generated by mBlock5 for <your product>
// codes make you happy
#include <src/NeoPixel.h>
#include <src/NeoPixelUB.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>
float Pot_Value = 0;
float RED = 0;
float BLUE = 0;
float GREEN = 0;
float PROGRAM_X = 0;
float Average_Angle = 0;
float New_State = 0;
float Previous_State = 0;
float TIMER_VALUE = 0;
float PREVIOUS_ANGLE = 0;
float ACCUMULATIVE = 0;
float BUTTON_NEW = 0;
float BUTTON_OLD = 0;
float SWITCH_STATE = 0;
float LCD_REFRESH = 0;
float NEXT_PROGRAM_NEW = 0;
float NEXT_PROGRAM_OLD = 0;
float PREV_PROGRAM_NEW = 0;
float PREV_PROGRAM_OLD = 0;
float OLD_PROGRAM_X = 0;
float STROKE_LENGHT = 0;
float STROKE_SPEED = 0;
float STROKE_TIME = 0;
float NUMBER_OF_LEDS = 0;
float DELAY = 0;
float LED_COUNTER = 0;
float DIRECTION = 0;
float START_TIMER_VALUE = 0;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(16, 13, NEO_GRB + NEO_KHZ800);
void ON_OFF (){
BUTTON_NEW = digitalRead(1);
if(!((BUTTON_NEW == BUTTON_OLD))){
_delay(0.05);
}
BUTTON_NEW = digitalRead(1);
if((!((BUTTON_NEW == BUTTON_OLD))) && (BUTTON_NEW == 1.000000)){
if(SWITCH_STATE == 0.000000){
SWITCH_STATE = 1;
}else{
SWITCH_STATE = 0;
}
LCD_REFRESH = 0;
}
BUTTON_OLD = BUTTON_NEW;
}
void LENGHT_SELECTOR (){
NEXT_PROGRAM_NEW = digitalRead(3);
if(!((NEXT_PROGRAM_NEW == NEXT_PROGRAM_OLD))){
_delay(0.05);
NEXT_PROGRAM_NEW = digitalRead(3);
if((!((NEXT_PROGRAM_NEW == NEXT_PROGRAM_OLD))) && (NEXT_PROGRAM_NEW == 1.000000)){
STROKE_LENGHT = (STROKE_LENGHT + 10);
if(STROKE_LENGHT == 130.000000){
STROKE_LENGHT = 0;
}
LCD_REFRESH = 0;
SWITCH_STATE = 0;
}
}
NEXT_PROGRAM_OLD = NEXT_PROGRAM_NEW;
}
void SPEED_SELECTOR (){
PREV_PROGRAM_NEW = digitalRead(2);
if(!((PREV_PROGRAM_NEW == PREV_PROGRAM_OLD))){
_delay(0.05);
PREV_PROGRAM_NEW = digitalRead(2);
if((!((PREV_PROGRAM_NEW == PREV_PROGRAM_OLD))) && (PREV_PROGRAM_NEW == 1.000000)){
STROKE_SPEED = (STROKE_SPEED + 10);
if(STROKE_SPEED == 110.000000){
STROKE_SPEED = 0;
}
LCD_REFRESH = 0;
SWITCH_STATE = 0;
}
}
PREV_PROGRAM_OLD = PREV_PROGRAM_NEW;
}
void LCD_CONTROL (){
if((SWITCH_STATE == 1.000000) && (LCD_REFRESH == 0.000000)){
lcd.clear();
lcd.setCursor(0,0);
lcd.print(String("ON") + String(String("DELAY: ") + String(DELAY)));
lcd.setCursor(0,1);
lcd.print(String("LENGHT: ") + String(STROKE_LENGHT));
lcd.setCursor(0,2);
lcd.print(String("SPEED: ") + String(STROKE_SPEED));
lcd.setCursor(0,3);
lcd.print(String("STROKE TIME: ") + String(STROKE_TIME));
LCD_REFRESH = 1;
}
if((SWITCH_STATE == 0.000000) && (LCD_REFRESH == 0.000000)){
lcd.clear();
lcd.setCursor(0,0);
lcd.print(String("OFF") + String(String("DELAY:") + String(DELAY)));
lcd.setCursor(0,1);
lcd.print(String("LENGHT: ") + String(STROKE_LENGHT));
lcd.setCursor(0,2);
lcd.print(String("SPEED: ") + String(STROKE_SPEED));
lcd.setCursor(0,3);
lcd.print(String("STROKE TIME: ") + String(STROKE_TIME));
LCD_REFRESH = 1;
}
}
void LED_RING_CONTROL (){
if(SWITCH_STATE == 1.000000){
if((DIRECTION == 0.000000) && (TIMER_VALUE / 10000 > DELAY)){
digitalWrite(LED_COUNTER,0);
strip.setPixelColor(LED_COUNTER, 0, 0, 0);
strip.show();
LED_COUNTER = (LED_COUNTER + 1);
digitalWrite(LED_COUNTER,1);
strip.setPixelColor(LED_COUNTER, 100, 100, 100);
strip.show();
TIMER_VALUE = 0;
if(LED_COUNTER == (NUMBER_OF_LEDS + 5)){
tone(4,262,0.25*1000);
delay(0.25*1000);
DIRECTION = 1;
}
}
if((DIRECTION == 1.000000) && (TIMER_VALUE / 10000 > DELAY)){
digitalWrite(LED_COUNTER,0);
strip.setPixelColor(LED_COUNTER, 0, 0, 0);
strip.show();
LED_COUNTER = ((LED_COUNTER - 1));
digitalWrite(LED_COUNTER,1);
strip.setPixelColor(LED_COUNTER, 50, 150, 150);
strip.show();
TIMER_VALUE = 0;
if(LED_COUNTER == 6.000000){
tone(4,82,0.25*1000);
delay(0.25*1000);
DIRECTION = 0;
}
}
TIMER_VALUE = (TIMER_VALUE + 1);
}else{
digitalWrite(LED_COUNTER,0);
LED_COUNTER = 6;
TIMER_VALUE = 0;
DIRECTION = 0;
}
}
void _delay(float seconds) {
long endTime = millis() + seconds * 1000;
while(millis() < endTime) _loop();
}
void setup() {
lcd.init();
strip.begin();
pinMode(1,INPUT);
pinMode(3,INPUT);
pinMode(2,INPUT);
pinMode(LED_COUNTER,OUTPUT);
pinMode(4,OUTPUT);
lcd.backlight();
while(1) {
ON_OFF();
SPEED_SELECTOR();
LENGHT_SELECTOR();
STROKE_TIME = STROKE_LENGHT / STROKE_SPEED;
NUMBER_OF_LEDS = STROKE_LENGHT / 10;
DELAY = STROKE_TIME / NUMBER_OF_LEDS;
LED_RING_CONTROL();
LCD_CONTROL();
_loop();
}
}
void _loop() {
}
void loop() {
_loop();
}