Доработка скетча
- Войдите на сайт для отправки комментариев
Привет всем. В топике про наливатор писал http://arduino.ru/forum/proekty/nalivator-avtomatizirovannaya-mashina-kotoraya-budet-razlivat-alkogol-po-stopkam?page=64#comment-555856 но в ответ тишина. Может тут кто поможет.
Надо добавить один режим в тот скетч по ссылке выше. С меня что скажете. Внуки одолели, а моим мозгам, насквозь продутым в горах Афганистана, не хватает знаний в этом вопросе. Скетч дальше меня не уйдет. Слово офицера.
Режим, так сказать, мультиналива: в каждый стаканчик свой объем сока. Почему не возьму готовый с той темы? Много лишнего. Внуки еще малые. Им сам процесс интересен.
Видел тут запрос ранее от одного человека. Так его с грязью смешали. Просьба по существу. Спасибо.
С уважением, Сергей.
Что там у тебя за режим, я не понял. В той теме такого режима нет и ты хочешь добавить, или есть и тебе надо лишнее убрать, объясняй толком - сделаем.
И да, по твоей ссылке я скетча не нашёл, а там в теме их вагон, давай конкретную ссылку.
Что там у тебя за режим, я не понял. В той теме такого режима нет и ты хочешь добавить, или есть и тебе надо лишнее убрать, объясняй толком - сделаем.
И да, по твоей ссылке я скетча не нашёл, а там в теме их вагон, давай конкретную ссылку.
не ты один не нашёл, нас теперь минимум двое )))
Троя.
perfomaster@mail.ru пишите-обсудим
Троя.
Четвира
Мужики, извините, ссылку не проверил. Сборная солянка из нескольких скетчей. На что ума хватило.
#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; } }Вместо ручного режима сделать режим, когда можно будет выбирать разный объем в разный стаканчик. Соответственно меню его тоже изменить. И прицепом, что-то не получилось в режиме один из пяти сделать зависимость налива от количества в=поставленных стаканчиков.
Ворота 103-я гвардейская ВДД. Ушел с ранением в две ноги. После в органах. Да и до сих пор числюсь на балансе организации :)))
Да, 103-я там от звонка до звонка чалилась, входили одними из первых (один Шигал сколько значил для всех остальных), а при выходе прикрывали выходящих и ушли последними - знаем мы такое соединение.
Напиши-ка мне вот сюда, сделаем твои хотелки. Не быстро, но шаг за шагом сделаем.
Привет всем. Ребята, никто не знает, случайно, куда Ворота делся? Переписывались еще в сентябре и бац, тишина... Всякое может быть. Ну месяц, два... При чем коллега по горам Афганистана... Никаких финансовых обязательств не было, просто общение... Жаль, не взял телефон для мессенджеров. Было бы проще.
Привет всем. Ребята, никто не знает, случайно, куда Ворота делся?
автокатастрофа... тогда же, в сентябре
грустно
Вот это да :((( Земля пухом...
Здоровья всем!