Доработать скетч
- Войдите на сайт для отправки комментариев
Пнд, 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 процентов, если вам так понятнее будет.
Вопрос снимаю. Спасибо за предложения. Вроде как сам разобрался. Даже работает, что странно :))
Удачи всем.