Доработать скетч
- Войдите на сайт для отправки комментариев
Пнд, 28/12/2020 - 11:04
Как-то в прошлой теме писать не хочется http://arduino.ru/forum/ishchu-ispolnitelya/dorabotka-sketcha :((
Суть: надо чуть-чуть для внуков мелких доработать скетч:
#include <LCD_1602_RUS.h>
#include <Servo.h>
#include "Adafruit_NeoPixel.h"
//#include "GyverEncoder.h"
#include <EEPROM.h>
#include "DFRobotDFPlayerMini.h"
#include "SoftwareSerial.h"
#define RX_MP3_PIN 10 // подключаем к TX плеера (третий пин)
#define TX_MP3_PIN 11 // подключаем к RX плеера (второй пин)
SoftwareSerial mySoftwareSerial(RX_MP3_PIN, TX_MP3_PIN);
DFRobotDFPlayerMini myDFPlayer;
LCD_1602_RUS lcd(0x27, 16, 2); //Подключение экрана А4-SDA, А5-SCL, 0x27 или 0x3F
unsigned long currentTime;
unsigned long loopTime;
unsigned long ledTime;
int j = 1;
int files = 0;
int files_tost = 0;
// Переменные для энкодера -----------
const int pin_A = 2;
const int pin_B = 3;
const int pin_SW = 4;
unsigned char encoder_A;
unsigned char encoder_B;
unsigned char encoder_A_prev = 0;
unsigned char encoder_sw_prew = 1;
const byte Optics[] = {0, 1, 2, 3, 6};
const unsigned int Optics_porog[] = {1000, 1000, 1000, 1000, 1000};
const int PIN_SERVO = 9;
Servo servo;
//Позиция каждой рюмки
const byte Rumka_pos[] = {30, 60, 90, 120, 150};
byte Menu = 0; // Главное меню
byte Nastr = 0; // Меню режимов
byte Rezim = 0; // Меню настроек
byte MenuFlag = 0; // Здесь храниться уровень меню. 0 находимся в Главном меню. 1 Вошли в меню Режимы и т.д.
byte Drink = 10; // По умолчанию в рюмку наливаем 10 мл.
const byte min_Drink = 5; // Минимум в рюмку - 5 мл.
const byte max_Drink = 50; // Максимум в рюмку - 50 мл.
const unsigned int min_Drink_delay = 300;
const unsigned int max_Drink_delay = 5000;
byte DrinkCount = 1; //По умолчанию, для ручного режима - 1 рюмка
const byte max_DrinkCount = 5; //Максимальное кол-во рюмок - 5
const byte PIN_PUMP = 12;
const int PIN_LED = 5;// Сюда подключаются светодиоды
const int LED_COUNT = max_DrinkCount;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, PIN_LED, NEO_GRB + NEO_KHZ800);
int16_t address = 0; // Переменная для хранения адреса памяти
int16_t bright = 0; // Яркость led, считается из памяти
int16_t servo_speed = 0; // Скорость серво
int16_t vol_tost = 0; // Громкость общая
int16_t vol_muz = 0; // Громкость музыки
// Функции
void pump_enable() {
digitalWrite(PIN_PUMP, 1); //вкл реле
}
void pump_disable() {
digitalWrite(PIN_PUMP, 0); //выкл реле
}
void pump_timer(byte Drink) {
digitalWrite(PIN_PUMP, 1); //вкл реле
delay(map(Drink, min_Drink, max_Drink, min_Drink_delay, max_Drink_delay));
digitalWrite(PIN_PUMP, 0); //выкл реле
}
void oled_menu(byte Menu) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F(" СОКОНАЛИВАТОР+ "));
lcd.setCursor(0, 1);
lcd.print(F(">"));
lcd.setCursor(15, 1);
lcd.print(F("<"));
switch (Menu) {
case 0:
lcd.setCursor(1, 1);
lcd.print(F("РЕЖИМЫ РАЗЛИВА"));
break;
case 1:
lcd.setCursor(3, 1);
lcd.print(F("НАСТРОЙКИ+"));
break;
case 2:
lcd.setCursor(5, 1);
lcd.print(F("МУЗЫКА"));
break;
}
}
void oled_nastr(byte Nastr) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F(" СОКОНАЛИВАТОР+ "));
lcd.setCursor(0, 1);
lcd.print(F(">"));
lcd.setCursor(15, 1);
lcd.print(F("<"));
switch (Nastr) {
case 0:
lcd.setCursor(4, 1);
lcd.print(F("ПРОМЫВКА"));
break;
case 1:
lcd.setCursor(2, 1);
lcd.print(F("ЯРКОСТЬ LEDS"));
break;
case 2:
lcd.setCursor(1, 1);
lcd.print(F("СКОРОСТЬ СЕРВО"));
break;
case 3:
lcd.setCursor(1, 1);
lcd.print(F("ОБЩ. ГРОМКОСТЬ"));
break;
case 4:
lcd.setCursor(2, 1);
lcd.print(F("ГРОМК. АУДИО"));
break;
}
}
void oled_rezim(byte Rezim) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F(" СОКОНАЛИВАТОР+ "));
lcd.setCursor(0, 1);
lcd.print(F(">"));
lcd.setCursor(15, 1);
lcd.print(F("<"));
switch (Rezim) {
case 0:
lcd.setCursor(6, 1);
lcd.print(F("АВТО"));
break;
case 1:
lcd.setCursor(2, 1);
lcd.print(F("РУЧНОЙ РЕЖИМ"));
break;
case 2:
lcd.setCursor(0, 1);
lcd.print(F(" МИНУС ОДИН "));
break;
case 3:
lcd.setCursor(5, 1);
lcd.print(F("ГОРКИ"));
break;
case 4:
lcd.setCursor(2, 1);
lcd.print(F(" ОДИН ИЗ ПЯТИ "));
break;
}
}
// выводит строчку по чуть чуть, в самый раз и тд. Передается номер строки, на которой выводить сообщение
void DrinkInfo(byte pos) {
Serial.println(F("INFO_DRINK"));
lcd.setCursor(0, 1);
if (Drink < 15) {
lcd.print(F(" НЕ МАЛО? "));
} else if (Drink < 28) {
lcd.print(F(" ПО ЧУТЬ - ЧУТЬ "));
} else if (Drink < 38) {
lcd.print(F(" В САМЫЙ РАЗ "));
} else if (Drink < 48) {
lcd.print(F(" ПО ПОЛНОЙ "));
} else {
lcd.print(F(" ДО КРАЕВ "));
}
}
// Меню Авто режим
void oled_auto(int Drink) {
Serial.println(F("MENU_AUTO"));
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F(" HАЛИТЬ:"));
lcd.setCursor(9, 0);
lcd.print(Drink);
Serial.println(Drink);
lcd.setCursor(12, 0);
lcd.print(F("МЛ?"));
DrinkInfo(57);
}
// Меню Ручной режим
void oled_manual(int DrinkCount, int Drink) {
Serial.println(F("MENU_RUCHN"));
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F(" HАЛИТЬ:"));
lcd.setCursor(9, 0);
lcd.print(Drink);
lcd.setCursor(12, 0);
lcd.print(F("МЛ?"));
Serial.println(Drink);
lcd.setCursor(0, 1);
lcd.print(F(" В СТ."));
lcd.setCursor(5, 1);
lcd.print(DrinkCount);
//Serial.println(DrinkCount);
//if (DrinkCount == 1) {
// lcd.setCursor(10, 1);
// lcd.print(F("КУ "));
//} else if (DrinkCount <= 4 ) {
// lcd.setCursor(10, 1);
// lcd.print(F("КИ "));
//} else {
// lcd.setCursor(10, 1);
// lcd.print(F("ОК "));
//}
}
// Подсветка рюмок в ручном режимме
/* void podsvetka () {
if (DrinkCount == 1) {
strip.setPixelColor(0, strip.Color(0, 0, 255)); // Подствечиваем синим 1-ю рюмку
} else if (DrinkCount == 2 ) {
strip.setPixelColor(0, strip.Color(0, 0, 255)); // Подствечиваем синим 1-ю рюмку
strip.setPixelColor(1, strip.Color(0, 0, 255)); // Подствечиваем синим 2-ю рюмку
} else if (DrinkCount == 3 ) {
strip.setPixelColor(0, strip.Color(0, 0, 255)); // Подствечиваем синим 1-ю рюмку
strip.setPixelColor(1, strip.Color(0, 0, 255)); // Подствечиваем синим 2-ю рюмку
strip.setPixelColor(2, strip.Color(0, 0, 255)); // Подствечиваем синим 3-ю рюмку
} else if (DrinkCount == 4 ) {
strip.setPixelColor(0, strip.Color(0, 0, 255)); // Подствечиваем синим 1-ю рюмку
strip.setPixelColor(1, strip.Color(0, 0, 255)); // Подствечиваем синим 2-ю рюмку
strip.setPixelColor(2, strip.Color(0, 0, 255)); // Подствечиваем синим 3-ю рюмку
strip.setPixelColor(3, strip.Color(0, 0, 255)); // Подствечиваем синим 4-ю рюмку
} else {
strip.setPixelColor(0, strip.Color(0, 0, 255)); // Подствечиваем синим 1-ю рюмку
strip.setPixelColor(1, strip.Color(0, 0, 255)); // Подствечиваем синим 2-ю рюмку
strip.setPixelColor(2, strip.Color(0, 0, 255)); // Подствечиваем синим 3-ю рюмку
strip.setPixelColor(3, strip.Color(0, 0, 255)); // Подствечиваем синим 4-ю рюмку
strip.setPixelColor(4, strip.Color(0, 0, 255)); // Подствечиваем синим 5-ю рюмку
}
strip.show();
delay(500);
} */
// Меню яркость
void oled_led(int bright) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("ВЫБЕРИ ЯРКОСТЬ"));
lcd.setCursor(0, 1);
lcd.print(F("ЗНАЧЕНИЕ:"));
lcd.setCursor(11, 1);
lcd.print(bright);
}
// Меню серво
void oled_servo(int servo_speed) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("ВЫБЕРИ СКОРОСТЬ"));
lcd.setCursor(0, 1);
lcd.print(F("ЗНАЧЕНИЕ:"));
lcd.setCursor(11, 1);
lcd.print(servo_speed);
}
// Меню громкости
void oled_voltost(int vol_tost) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("ВЫБЕРИ ГРОМКОСТЬ"));
lcd.setCursor(0, 1);
lcd.print(F("ЗНАЧЕНИЕ:"));
lcd.setCursor(11, 1);
lcd.print(vol_tost);
}
// Меню громкости музыки
void oled_volmuz(int vol_muz) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("ВЫБЕРИ ГРОМКОСТЬ"));
lcd.setCursor(0, 1);
lcd.print(F("ЗНАЧЕНИЕ:"));
lcd.setCursor(11, 1);
lcd.print(vol_muz);
}
// Меню Казино
void oled_cazino(int DrinkCount, int Drink) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("СТАВЬ СТАКАНЧИКИ"));
lcd.setCursor(0, 1);
lcd.print(F(" И НАЖМИ <ОК> "));
}
// Меню Музыка
void oled_muzon(int DrinkCount, int Drink) {
lcd.clear();
lcd.setCursor(4, 0);
lcd.print(F("СЛУШАЕМ"));
lcd.setCursor(4, 1);
lcd.print(F("МУЗЫКУ!"));
}
// Меню налива
void oled_naliv(int MenuFlag, int Drink, int DrinkCount) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F(" НАЛИВАЮ"));
lcd.setCursor(10, 0);
lcd.print(Drink);
lcd.setCursor(13, 0);
lcd.print(F("МЛ"));
DrinkInfo(57);
}
// Меню налито
void oled_nalito2(int MenuFlag, int Nalito, int Drink) {
Serial.println(F("NALITO"));
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F(" HАЛИТО"));
lcd.setCursor(9, 0);
lcd.print(Drink);
Serial.println(Drink);
lcd.setCursor(12 , 0);
lcd.print(F("МЛ"));
lcd.setCursor(0, 1);
lcd.print(F(" В"));
lcd.setCursor(5, 1);
lcd.print(Nalito);
lcd.setCursor(7, 1);
lcd.print(F("СТ."));
//Serial.println(Nalito);
//if (Nalito == 1) {
// lcd.setCursor(10, 1);
// lcd.print(F("КУ "));
//} else if (Nalito <= 4 ) {
// lcd.setCursor(10, 1);
// lcd.print(F("КИ "));
//} else {
// lcd.setCursor(10, 1);
// lcd.print(F("ОК "));
//}
}
// Тосты
void Tost() {
randomSeed(analogRead(7));
lcd.clear();
lcd.setCursor(0, 1);
lcd.print(F("ЗАБЕРИ СТАКАНЧИК"));
delay (2000);
myDFPlayer.volume(vol_tost); //Громкость
delay (100);
myDFPlayer.playFolder (2, random (files_tost + 1)); //воспроизводить определенный mp3 в папке 02
}
void ServoNaliv(byte rumka) {
servo.attach(PIN_SERVO);
for (int pos = servo.read(); pos <= Rumka_pos[rumka]; pos += 1) {
// с шагом в 1 градус
servo.write(pos); // даем серве команду повернуться в положение, которое задается в переменной 'pos'
delay(servo_speed); // ждем , пока ротор сервы выйдет в заданную позицию
}
servo.detach();
}
void ServoParking () {
//Serial.println(servo.read());
servo.attach(PIN_SERVO);
for (int pos = servo.read(); pos >= 0; pos -= 1) {
// с шагом в 1 градус
servo.write(pos); // даем серве команду повернуться в положение, которое задается в переменной 'pos'
delay(servo_speed); // ждем , пока ротор сервы выйдет в заданную позицию
}
servo.detach();
}
void CvetoMuzik() {
for (long firstPixelHue = 0; firstPixelHue < 5 * 65536; firstPixelHue += 768) {
for (int i = 0; i < strip.numPixels(); i++) { // For each pixel in strip...
int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
}
strip.show();
delay(10);
}
}
void setup() {
randomSeed(analogRead(7));//инициализация функции рандом по пину А7 для исключения повторения последовательности значений при включении
mySoftwareSerial.begin(9600);
Serial.begin(9600);
delay(1000);
if (!myDFPlayer.begin(mySoftwareSerial)) {
Serial.println("Unable to begin:");
Serial.println("1.Please recheck the connection!");
Serial.println("2.Please insert the SD card!");
while (true);
}
myDFPlayer.setTimeOut(300);
myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
files = myDFPlayer.readFileCountsInFolder(3); // Считаем сколько треков в папке с музыкой 03
files_tost = myDFPlayer.readFileCountsInFolder(2); // Считаем сколько треков в папке с тостами 02
address = 30;
EEPROM.get(address, bright);
if ( bright < 0 || bright > 255) {
bright = 100;
}
address = 20; //ячейка памяти
EEPROM.get(address, servo_speed); // считываем из памяти скорость серво
if ( servo_speed < 5 || servo_speed > 30) {
servo_speed = 10;
}
address = 40; //ячейка памяти
EEPROM.get(address, vol_tost); // считываем из памяти громкость
if ( vol_tost < 2 || vol_tost > 30) {
vol_tost = 10;
}
address = 50; //ячейка памяти
EEPROM.get(address, vol_muz); // считываем из памяти громкость музыки
if ( vol_muz < 2 || vol_muz > 30) {
vol_muz = 10;
}
myDFPlayer.volume(vol_tost); //Громкость
delay (100);
myDFPlayer.playFolder(1, 1); //Воспроизведение первого mp3
lcd.init();// инициализация дисплея
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F(" НУ ЧТО "));
lcd.setCursor(0, 1);
lcd.print(F("НА-ЧАА-ЛИИ-ИИИИИ"));
delay (2000);
pinMode(pin_SW, INPUT); // устанавливаем pin pin_SW как вход
digitalWrite(pin_SW, HIGH); // Поддяжка вывода к 1
pinMode(pin_A, INPUT);
pinMode(pin_B, INPUT);
pinMode(PIN_PUMP, OUTPUT);
digitalWrite(PIN_PUMP, 0);
currentTime = millis();
loopTime = currentTime;
strip.begin();
strip.setBrightness(bright);
CvetoMuzik();
oled_menu(0);
for (int i = 0; i < 5; i++) {
pinMode(Optics[i], INPUT);
}
ServoParking();
}
void loop() {
currentTime = millis();
if (currentTime >= (loopTime + 5)) { // проверяем каждые 5мс
encoder_A = digitalRead(pin_A); // считываем состояние выхода А энкодера
encoder_B = digitalRead(pin_B); // считываем состояние выхода B энкодера
if ((!encoder_A) && (encoder_A_prev)) { // если состояние изменилось с положительного к нулю
//Вращение влево
if (encoder_B) {
if (MenuFlag == 0) {
(Menu <= 0 ) ? Menu = 2 : Menu--;
oled_menu(Menu);
} else if (MenuFlag == 1) {
(Rezim <= 0 ) ? Rezim = 4 : Rezim--;
oled_rezim(Rezim);
} else if (MenuFlag == 2) {
(Nastr <= 0 ) ? Nastr = 4 : Nastr--;
oled_nastr(Nastr);
} else if (MenuFlag == 4) {
(Drink <= min_Drink ) ? Drink = max_Drink : Drink -= 5;
oled_auto(Drink);
} else if (MenuFlag == 5) {
(DrinkCount >= max_DrinkCount ) ? DrinkCount = 1 : DrinkCount++;
oled_manual(DrinkCount, Drink);
//podsvetka();
} else if (MenuFlag == 9) {
bright -= 5;
bright = constrain(bright, 0, 254);
oled_led(bright);
strip.setBrightness(bright);
strip.show();
delay (100);
} else if (MenuFlag == 10) {
servo_speed -= 5;
servo_speed = constrain(servo_speed, 5, 30);
oled_servo(servo_speed);
delay (100);
} else if (MenuFlag == 11) {
vol_tost -= 2;
vol_tost = constrain(vol_tost, 2, 30);
oled_voltost(vol_tost);
delay (100);
} else if (MenuFlag == 12) {
vol_muz -= 2;
vol_muz = constrain(vol_muz, 2, 30);
oled_volmuz(vol_muz);
delay (100);
} else if (MenuFlag == 3) {
j++;
if (j > files)
j = 1;
myDFPlayer.playFolder (3, j);
oled_muzon(DrinkCount, Drink);
}
//Вращение вправо
} else {
if (MenuFlag == 0) {
(Menu >= 2 ) ? Menu = 0 : Menu++;
oled_menu(Menu);
} else if (MenuFlag == 1) {
(Rezim >= 4 ) ? Rezim = 0 : Rezim++; //
oled_rezim(Rezim);
} else if (MenuFlag == 2) {
(Nastr >= 4 ) ? Nastr = 0 : Nastr++; //
oled_nastr(Nastr);
} else if (MenuFlag == 4) {
(Drink >= max_Drink ) ? Drink = min_Drink : Drink += 5;// Увеличиваем кол-во милилитров в рюмку
oled_auto(Drink);
} else if (MenuFlag == 5) {
(Drink >= max_Drink ) ? Drink = min_Drink : Drink += 5;
oled_manual(DrinkCount, Drink);
} else if (MenuFlag == 9) {
bright += 5;
bright = constrain(bright, 0, 254);
oled_led(bright);
strip.setBrightness(bright);
strip.show();
delay (100);
} else if (MenuFlag == 10) {
servo_speed += 5;
servo_speed = constrain(servo_speed, 5, 30);
oled_servo(servo_speed);
delay (100);
} else if (MenuFlag == 11) {
vol_tost += 2;
vol_tost = constrain(vol_tost, 2, 30);
oled_voltost(vol_tost);
delay (100);
} else if (MenuFlag == 12) {
vol_muz += 2;
vol_muz = constrain(vol_muz, 2, 30);
oled_volmuz(vol_muz);
delay (100);
} else if (MenuFlag == 3) {
j++;
if (j > files)
j = 1;
myDFPlayer.playFolder (3, j);
oled_muzon(DrinkCount, Drink);
}
}
}
// Режим промывки
encoder_A_prev = encoder_A; // сохраняем значение А для следующего цикла
int encoder_sw = digitalRead(pin_SW);
if (encoder_sw == 0 && encoder_sw != encoder_sw_prew) {
int pause_sw = 0;
boolean promivka = false;
while (digitalRead(pin_SW) == 0) {
delay(100);
pause_sw++;
if (pause_sw > 20 && Nastr != 0 ) break;
if (pause_sw > 20 && MenuFlag == 2 && Nastr == 0 && promivka == false) {
promivka = true;
pump_enable(); // Включаем насос
delay (100);
myDFPlayer.volume(vol_tost);
delay (100);
myDFPlayer.playFolder (1, 100);
delay (100);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("П Р О М Ы В К А"));
lcd.setCursor(2, 1);
lcd.print("<><><><><><>");
}
}
//После отпускания кнопки, обрабатываем
if (promivka == true) { //Отпустили кнопку.
promivka = false;
pump_disable() ; //Выключаем насос
oled_nastr(0);
} else {
//Обработка всех нажатий кнопки
if (Menu == 0 && MenuFlag == 0 && pause_sw < 10) {
MenuFlag = 1;
oled_rezim(Rezim);
} else if (Rezim == 0 && MenuFlag == 1 && pause_sw < 10) {
MenuFlag = 4;
oled_auto(Drink);
} else if (MenuFlag == 4 && pause_sw > 20) {
MenuFlag = 1;
oled_rezim(0);
} else if (MenuFlag == 1 && pause_sw > 20) {
MenuFlag = 0;
oled_menu(0);
}
//Начинается автоматический разлив
else if (MenuFlag == 4 ) {
Serial.println("AUTO"); //Начало автоматического разлива
oled_naliv(MenuFlag, Drink, DrinkCount);
byte drink_count = 0;
for (int y = 0; y < max_DrinkCount; y++) {
if (analogRead(Optics[y]) > Optics_porog[y] ) {
strip.setPixelColor(y, strip.Color(255, 0, 0)); // Подствечиваем красным цветом
strip.show();
ServoNaliv(y);
delay (300);
pump_timer(Drink); // Налив.
delay(1000);
strip.setPixelColor(y, strip.Color(0, 255, 0));
strip.show();
drink_count++;
delay(1000);
}
}
if (drink_count > 0) {
oled_nalito(MenuFlag, drink_count, Drink );
delay(2000);
ServoParking();
Tost();
CvetoMuzik();
oled_auto(Drink);
} else {
lcd.clear();
lcd.setCursor(0, 1);
lcd.print(F("НЕТ СТАКАНЧИКОВ!"));
myDFPlayer.volume(vol_tost);
delay (100);
myDFPlayer.playFolder (1, 88);
delay(2000);
oled_auto(Drink);
}
// Нажатие меню ручное
} else if (Rezim == 1 && MenuFlag == 1 && pause_sw < 10) {
MenuFlag = 5;
oled_manual(DrinkCount, Drink);
} else if (MenuFlag == 5 && pause_sw > 20) {
MenuFlag = 1;
oled_rezim(1);
}
//Начинается ручной разлив
else if (MenuFlag == 5 ) {
Serial.println("RUCHNOY" + String(DrinkCount));
oled_naliv(MenuFlag, Drink, DrinkCount); // Выводим на экран наливаем ...
for (int y = 0; y < DrinkCount; y++) {
strip.setPixelColor(y, strip.Color(255, 0, 0)); // Подствечиваем красным цветом
strip.show();
ServoNaliv(y);
delay (300);
pump_timer(Drink); // Налив.
delay(1000);
strip.setPixelColor(y, strip.Color(0, 255, 0));
strip.show();
delay(1000);
}
oled_nalito(MenuFlag, DrinkCount, Drink );
delay(2000);
ServoParking();
Tost();
CvetoMuzik();
oled_manual(DrinkCount, Drink);
}
//нажатие меню яркости
else if (Menu == 1 && MenuFlag == 0 && pause_sw < 10) {
MenuFlag = 2;
oled_nastr(Nastr);
} else if (Nastr == 1 && MenuFlag == 2 && pause_sw < 10) {
MenuFlag = 9;
oled_led(bright);
} else if (MenuFlag == 9 && pause_sw > 20) {
MenuFlag = 2;
oled_nastr(1);
address = 30;
EEPROM.put(address, bright);
} else if (MenuFlag == 2 && pause_sw > 20) {
MenuFlag = 0;
oled_menu(1);
} else if (MenuFlag == 9 ) {
CvetoMuzik();
}
// нажатие меню скорости серво
else if (Menu == 1 && MenuFlag == 0 && pause_sw < 10) {
MenuFlag = 2;
oled_nastr(Nastr);
} else if (Nastr == 2 && MenuFlag == 2 && pause_sw < 10) {
MenuFlag = 10;
oled_servo(servo_speed);
} else if (MenuFlag == 10 && pause_sw > 20) {
MenuFlag = 2;
oled_nastr(2);
address = 20;
EEPROM.put(address, servo_speed);
} else if (MenuFlag == 10) {
// после нажатия энкодера запускаем серву для проверки скорости
servo.attach(PIN_SERVO);
for (int pos = servo.read(); pos <= 180; pos += 1) {
servo.write(pos);
delay(servo_speed);
}
for (int pos = servo.read(); pos >= 0; pos -= 1) {
servo.write(pos);
delay(servo_speed);
}
}
// нажатие меню громкости
else if (Menu == 1 && MenuFlag == 0 && pause_sw < 10) {
MenuFlag = 2;
oled_nastr(Nastr);
} else if (Nastr == 3 && MenuFlag == 2 && pause_sw < 10) {
MenuFlag = 11;
oled_voltost(vol_tost);
} else if (MenuFlag == 11 && pause_sw > 20) {
MenuFlag = 2;
oled_nastr(3);
address = 40;
EEPROM.put(address, vol_tost);
} else if (MenuFlag == 11) {
myDFPlayer.volume(vol_tost);
delay (100);
myDFPlayer.playFolder(1, 1);
}
// нажатие меню громкости музыки
else if (Menu == 1 && MenuFlag == 0 && pause_sw < 10) {
MenuFlag = 2;
oled_nastr(Nastr);
} else if (Nastr == 4 && MenuFlag == 2 && pause_sw < 10) {
MenuFlag = 12;
oled_volmuz(vol_muz);
} else if (MenuFlag == 12 && pause_sw > 20) {
MenuFlag = 2;
oled_nastr(4);
address = 50;
EEPROM.put(address, vol_muz);
} else if (MenuFlag == 12) {
// после нажатия энкодера запускаем музыку
myDFPlayer.volume(vol_muz);
delay (100);
myDFPlayer.playFolder(1, 1);
}
// Нажатие меню СИНИЙ БАРМЕН наливатет в рюмки случайный объем
else if (Rezim == 3 && MenuFlag == 1 && pause_sw < 10) {
MenuFlag = 7;
oled_cazino(DrinkCount, Drink);
} else if (MenuFlag == 7 && pause_sw > 20) {
MenuFlag = 1;
oled_rezim(3);
} else if (MenuFlag == 7 ) { //Начинается рулетка
myDFPlayer.volume(vol_tost); //Громкость
delay (100);
myDFPlayer.playFolder (1, 105); // Мелоди рулетки
delay (1000);
CvetoMuzik();
delay (2000);
for (int y = 0; y <= 4; y++) {
strip.setPixelColor(y, strip.Color(255, 0, 0)); // Подствечиваем красным цветом
strip.show();
ServoNaliv(y);
delay (300);
pump_timer(random(min_Drink, max_Drink)); // Налив
delay(1000);
strip.setPixelColor(y, strip.Color(0, 255, 0));
strip.show();
}
ServoParking();
myDFPlayer.playFolder (1, 102);
delay (400);
CvetoMuzik();
Tost();
oled_cazino(DrinkCount, Drink);
}
// Нажатие меню музыка
else if (Menu == 2 && MenuFlag == 0 && pause_sw < 10) { // Вошли в музыку
MenuFlag = 3;
myDFPlayer.volume(vol_muz);
delay (100);
myDFPlayer.loopFolder(3);
oled_muzon(DrinkCount, Drink);
} else if (MenuFlag == 3 && pause_sw > 20) {
MenuFlag = 0;
oled_menu(2);
} else if (MenuFlag == 3 && pause_sw < 10) {
myDFPlayer.pause();
MenuFlag = 0;
oled_menu(2);
}
// Нажатие меню КАЗИНО наливает только в одну рюмку случайно
else if (Rezim == 4 && MenuFlag == 1 && pause_sw < 10) {
MenuFlag = 8;
oled_cazino(DrinkCount, Drink);
} else if (MenuFlag == 8 && pause_sw > 20) {
MenuFlag = 1;
oled_rezim(4);
} else if (MenuFlag == 8 ) {
randomSeed(analogRead(7));
myDFPlayer.volume(vol_tost);
delay (100);
myDFPlayer.playFolder (1, 105);
delay (1000);
CvetoMuzik();
delay (2000);
for (int y = 0; y <= 4; y++) {
strip.setPixelColor(y, strip.Color(255, 0, 0));
strip.show();
}
servo.attach(PIN_SERVO);// имитация рулетки сервой
for (int pos = servo.read(); pos <= 180; pos += 1) {
// с шагом в 1 градус
servo.write(pos); // даем серве команду повернуться в положение, которое задается в переменной 'pos'
delay(servo_speed); // ждем , пока ротор сервы выйдет в заданную позицию
}
for (int pos = servo.read(); pos >= 0; pos -= 1) {
// с шагом в 1 градус
servo.write(pos); // даем серве команду повернуться в положение, которое задается в переменной 'pos'
delay(servo_speed); // ждем , пока ротор сервы выйдет в заданную позицию
}
int r = random(0, 5);//выбор одной рюмки в которую нальёт
ServoNaliv(r); // Перемещяемся к рюмке
strip.setPixelColor(r, strip.Color(0, 255, 0)); // Подствечиваем зеленым, налито, остальные красные
delay(1000);
strip.show();
pump_timer(Drink); // Налив
servo.detach();
ServoParking();
myDFPlayer.volume(vol_tost); //Громкость
delay (100);
myDFPlayer.playFolder (1, 102); // Фанфары
delay (400);
CvetoMuzik();
Tost();
oled_cazino(DrinkCount, Drink);
}
// Нажатие меню НАША РУЛЕТКА, не наливаем в одну рюмку случайно
else if (Rezim == 2 && MenuFlag == 1 && pause_sw < 10) {
MenuFlag = 6;
oled_cazino(DrinkCount, Drink);
} else if (MenuFlag == 6 && pause_sw > 20) {
MenuFlag = 1;
oled_rezim(2);
} else if (MenuFlag == 6 ) {
randomSeed(analogRead(7));
myDFPlayer.volume(vol_tost); //Громкость
delay (100);
myDFPlayer.playFolder (1, 105); //Мелодия рулетки
delay (1000);
CvetoMuzik();
delay (2000);
for (int y = 0; y <= 4; y++) {
strip.setPixelColor(y, strip.Color(255, 0, 0));
strip.show();
}
servo.attach(PIN_SERVO);// имитация рулетки сервой
for (int pos = servo.read(); pos <= 180; pos += 1) {
// с шагом в 1 градус
servo.write(pos); // даем серве команду повернуться в положение, которое задается в переменной 'pos'
delay(servo_speed); // ждем , пока ротор сервы выйдет в заданную позицию
}
for (int pos = servo.read(); pos >= 0; pos -= 1) {
// с шагом в 1 градус
servo.write(pos); // даем серве команду повернуться в положение, которое задается в переменной 'pos'
delay(servo_speed); // ждем , пока ротор сервы выйдет в заданную позицию
}
int r = random(0, 5);//выбор одной рюмки в которую НЕ нальёт
for (int y = 0; y < 5; y++) {
if (y != r) {
strip.setPixelColor(y, strip.Color(255, 0, 0)); // Подствечиваем красным цветом
strip.show();
ServoNaliv(y); // Перемещяемся к рюмке
delay (300); //Задержка перед налитием после поворота к рюмке
pump_timer(Drink); // Налив.
delay(1000);
strip.setPixelColor(y, strip.Color(0, 255, 0)); // Подствечиваем зеленым , налито.
strip.show();
delay(500);
}
else {
(y = r);
}
}
servo.detach();
ServoParking();
myDFPlayer.volume(vol_tost); //Громкость
delay (100);
myDFPlayer.playFolder (1, 102); //Фанфары
delay (400);
CvetoMuzik();
Tost();
oled_cazino(DrinkCount, Drink);
}
}
}
// Работа оптодатчиков
if (currentTime >= (ledTime + 300)) {
for (int i = 0; i < max_DrinkCount; i++) {
int val = analogRead(Optics[i]);
if (val > Optics_porog[i]) {
strip.setPixelColor(i, strip.Color(0, 0, 255));
} else {
strip.setPixelColor(i, strip.Color(0, 0, 0));
}
}
strip.show();
ledTime = currentTime;
}
encoder_sw_prew = encoder_sw;
loopTime = currentTime;
}
}
Вместо ручного режима сделать режим, когда можно будет выбирать разный объем сока в разный стаканчик (686 строка). Соответственно переделать меню (204 строка). И прицепом, что-то не получилось в режиме один из пяти сделать зависимость налива от количества поставленных стаканчиков (846 строка).
Все-таки решил дособрать агрегат для ребятишек. Если сейчас не получится, можно в праздники не торопясь.
всех с наступающим!
Ворота не успел сделать? Жаль мужика.
500 рублей
Ворота не успел сделать? Жаль мужика.
:((
500 рублей
Праздники... Уехал с внуками на дачу. Моя почта ded_1961СОБАКАлист.ру Не срочно, как будет свободное время. У меня +4 к времени МСК.
Все еще актуально. Спасибо.
Деда, а что, Бармалей не справился ?
Взял бабосы и слилсо? ;)
Все еще актуально. Спасибо.
5т.р. и схему. Без неё не возьмусь. Или нормальное ТЗ.
Взял бабосы и слилсо? ;)
Нет конечно. Просто не отписался. Видимо не интересно стало после НГ :))
Все еще актуально. Спасибо.
5т.р. и схему. Без неё не возьмусь. Или нормальное ТЗ.
Как-то для детской игрушки многовато, как мне кажется. Хотя я не знаю расценок на такого рода исполнения. За предложение спасибо, подумаю.
Вы оцениваете с точки зрения назначения, а исполнитель с точки зрения затраченного времени.
Может быть имеет смысл просто выбрать один из готовых скетчей наливаторов, коих в инете море ?
Может быть имеет смысл просто выбрать один из готовых скетчей наливаторов, коих в инете море ?
Насколько я понял ТС - готовый скетч у него есть, и даже запущен и работает. Теперь ему хочется индивидуальной подстройки под себя.
При всем уважении, такие доработки обычно требуют кучи времени для вникания с исходный код. 5 тыр в этом случае - скорее нижняя граница...
Он же просит переделать 2 строки в коде. Даже пишет какие.
550р
Он же просит переделать 2 строки в коде. Даже пишет какие.
550р
А чё, со времён #2 уже подорожало?
А вы давно в магазинах были?
Не хотите отвечать - не отвечайте, я Вас не заставляю, но вопросом на вопрос отвечать не надо, если Вам не трудно, конечно.
Так у меня вопрос чисто риторический. То есть, вопрос-ответ.
У нас доширак подорожал на 10 процентов, если вам так понятнее будет.
Вопрос снимаю. Спасибо за предложения. Вроде как сам разобрался. Даже работает, что странно :))
Удачи всем.