Доработать скетч наливатора

tnn29041985
Offline
Зарегистрирован: 17.01.2020
Здравствуйте! сколько буде стоить доработать проект на ардуино? надо добавить режимы: 1) русская рулетка (рандомный налив в 1 рюмку из 5)
2) американская рулетка (чтоб в одну рюмку случайным выбором не наливал)
3) американские горки (чтоб во все рюмки наливал разное количество напитка)
4) режим робота (как только ставишь стакан сразу производит налив)
5) поддержка тостов чем больше тем лучше
 
 
/*Добавлены библиотека от гиви, индикация состояния батареи радугой 
(6-й светодиод), свистоперделки (бодренькая мелодия (в гудках) во время налива 574,587).
регулировка мелодии налива строчка 572, тостов - 254, приветствия - 506 -максимальная */

#include <LCD_1602_RUS.h>
#include <Servo.h>
#include <Adafruit_NeoPixel.h>
//#include <SoftwareSerial.h>//добавляем библиотеки
#include <DFPlayer_Mini_Mp3.h>//добавляем библиотеку МП3 плейера

LCD_1602_RUS lcd(0x27, 16, 2); //Порт дисплея обычно 0x27 или 0x3F, подключение экрана А4-SDA-зеленый, А5-SCL-желтый

unsigned long currentTime;
unsigned long ledTime;

// Переменные для энкодера -----------
#include "GyverEncoder.h"
const byte CLK = 2;
const byte DT = 3;
const byte SW = 4;
Encoder enc(CLK, DT, SW);
boolean promivka = false;
//Массив , обозначаем подключенные оптопары по выводам . Оптопары подключены, A0,A1,A2,A3,A6
const byte  Optics[] = {0, 1, 2, 3, 6};
// Значения порога срабатывания датчика для каждой рюмки
const unsigned int Optics_porog[] = {1010,1010,1010,1010,1010};
//Серво
const int PIN_SERVO = 9;
Servo servo;
//Позиция каждой рюмки 
const byte Rumka_pos[] = {32,60,93,123,150}; //12 - 48 - 90 - 135 - 174 
const byte servo_speed=20; // Скорость поворота серво,  10 - норм, 20 медленно, 30 очень медленно
byte  Menu = 0;
byte MenuFlag = 0; // Здесь храниться уровень меню. 0 находимся в  Главном меню. 1 Вошли в меню Авто, 2 вошли в  Ручное управление
byte  Drink = 20; // По умолчанию в рюмку наливаем  20 мл.
//----- Минимальные и максимальные значения наполняемой жидкости и задержки для наполнения. 
const byte  min_Drink = 2; // Минимум в рюмку - 2 мл.
const byte  max_Drink = 50; // Максимум в рюмку - 50 мл.
// Калибровка работы насосика. Значения для налива min_Drink и max_Drink соотвественно 
const unsigned int min_Drink_delay = 222; 
const unsigned int max_Drink_delay = 9000;
//--------
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);

int BatPin = A7;    // пин контроля состояния батареи
float  Value_volt=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(3, 0);
  lcd.print(F("НАЛИВАТОР+"));
  lcd.setCursor(0, 1);
  lcd.print(F(">"));
  lcd.setCursor(15, 1);
  lcd.print(F("<"));
  switch (Menu) {
    case 0:
      lcd.setCursor(6, 1);
      lcd.print(F("АВТО"));
      break;
    case 1:
      lcd.setCursor(2, 1);
      lcd.print(F("РУЧНОЙ РЕЖИМ"));
      break;
    case 2:
      lcd.setCursor(4, 1);
      lcd.print(F("ПРОМЫВКА"));
      break;
  }
}

//  выводит строчку по чуть чуть, в самый раз и тд. Передается номер строки, на которой выводить сообщение
void DrinkInfo(byte pos) {
  Serial.println(F("INFO_DRINK"));

lcd.setCursor(0, 1);
  if (Drink < 15) {
//    lcd.setCursor(0, 1);
    lcd.print(F("    НИ О ЧЕМ    "));
  } else if (Drink < 28) {
//    lcd.setCursor(0, 1);
    lcd.print(F(" ПО ЧУТЬ - ЧУТЬ "));
  } else if (Drink < 38) {
//    lcd.setCursor(0, 1);
    lcd.print(F("  В САМЫЙ  РАЗ  "));
  } else if (Drink < 48) {
//    lcd.setCursor(0, 1);
    lcd.print(F("   ПО  ПОЛНОЙ  "));
  } else {
//    lcd.setCursor(0, 1);
    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(10, 0);
    lcd.print(Drink);
  Serial.println(Drink);
    lcd.setCursor(13, 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(10, 0);
    lcd.print(Drink);
    lcd.setCursor(13, 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 oled_naliv(int MenuFlag, int Drink, int DrinkCount) {
  Serial.println(F("NALIVAIU"));
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print(F("НАЛИВАЮ ПО"));
    lcd.setCursor(11, 0);
    lcd.print(Drink);
  Serial.println(Drink);
    lcd.setCursor(14, 0);
    lcd.print(F("мЛ"));
    lcd.setCursor(0, 1);
    lcd.print(F("   В"));
    lcd.setCursor(5, 1);
    lcd.print(DrinkCount);
  Serial.println(DrinkCount); 
    lcd.setCursor(7, 1);
    lcd.print(F("РЮМ"));

  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 oled_nalito(int MenuFlag, int Nalito, int Drink) {
    Serial.println(F("NALITO"));
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print(F("HАЛИТО ПО"));
    lcd.setCursor(11, 0);
    lcd.print(Drink);
    Serial.println(Drink); 
    lcd.setCursor(14, 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 Batery() { // процедура измерение напряжения
  Value_volt=(float)5/1024*analogRead(BatPin);
  
  if(Value_volt < 3.4) {
  strip.setPixelColor(5, strip.Color(255, 0, 0)); //CRGB::Red 0xFF0000 красный
  }
  else if(Value_volt < 3.5) {
  //strip.setPixelColor(4, strip.Color(255, 165, 0)); //CRGB::Orange 0xFFA500 оранжевый
  strip.setPixelColor(5, strip.Color(255, 69, 0)); //CRGB::OrangeRed  0xFF4500
  }
  else if(Value_volt < 3.6) {
  strip.setPixelColor(5, strip.Color(255, 255, 0)); //CRGB::Yellow 0xFFFF00 желтый
  }
  else if(Value_volt < 3.7) {
  strip.setPixelColor(5, strip.Color(0, 255, 0)); //CRGB::Lime 0x00FF00 зеленый
  }  
  else if(Value_volt < 3.8) {
  strip.setPixelColor(5, strip.Color(0, 255, 255)); //CRGB::Aqua 0x00FFFF голубой
  }
 else if(Value_volt < 3.9) {
  strip.setPixelColor(5, strip.Color(0, 0, 255)); //CRGB::Blue 0x0000FF синий
  } 
  else if(Value_volt < 4.0) {
  strip.setPixelColor(5, strip.Color(255, 0, 255)); //CRGB::Magenta 0xFF00FF фиолетовый
  } 
  else {// >100% заряда
  strip.setPixelColor(5, strip.Color(75, 0, 130)); //CRGB::Indigo  0x4B0082 

  } 
strip.show();
} 

  void Tost() { //Рандом - 1 
    randomSeed(currentTime);
byte num=random(22); // 0...21
  mp3_set_volume (25);// устанвливаем громкость 25 (если хотите установить
  delay (100);
   lcd.clear();
    switch (num){
  //switch (random(20)) { // 0...19
case 0: //ЗА ВСТРЕЧУ!
lcd.setCursor(7, 0);
lcd.print(F("НУ,"));
lcd.setCursor(2, 1);
lcd.print(F("ЗА ВДВ!"));
mp3_play (2);  // Проигрываем "mp3/0002.mp3"
delay(100);
break; 
  case 1: //ЗА КРАСОТУ!
lcd.setCursor(7, 0);
lcd.print(F("НУ,"));
lcd.setCursor(2, 1);
lcd.print(F("ЗА КРАСОТУ!"));   
mp3_play (3);  // Проигрываем "mp3/0003.mp3"
delay(100);
break;
case 2: //"ЗА ДРУЖБУ!"
lcd.setCursor(7, 0);
lcd.print(F("НУ,"));//
lcd.setCursor(3, 1);
lcd.print(F("ЗА ДРУЖБУ!"));  
mp3_play (4);  // Проигрываем "mp3/0004.mp3"
delay(100);
break;
case 3: //"ЗА БРАТСТВО!
lcd.setCursor(7, 0);
lcd.print(F("НУ,"));
lcd.setCursor(2, 1);
lcd.print(F("ЗА БРАТСТВО!"));   
mp3_play (5);  // Проигрываем "mp3/0005.mp3"
delay(100);
break;
case 4: //ЗА СПРАВЕДЛИВОСТЬ!
lcd.setCursor(5, 0);
lcd.print(F("НУ, ЗА"));
lcd.setCursor(1, 1);
lcd.print(F("ЛЮБИМЫХ!"));
mp3_play (6);  // Проигрываем "mp3/0006.mp3"11
delay(100);
break;
  case 5: //ЗА РЫБАЛКУ!
lcd.setCursor(7, 0);
lcd.print(F("НУ,"));
lcd.setCursor(3, 1);
lcd.print(F("ЗА МЕЧТЫ!"));
mp3_play (7);  // Проигрываем "mp3/0007.mp3"
delay(100);
break;
case 6: //ЗА ИСКУССТВО!
lcd.setCursor(7, 0);
lcd.print(F("НУ,"));
lcd.setCursor(2, 1);
lcd.print(F("ЗА ИСКУССТВО!"));
mp3_play (8);  // Проигрываем "mp3/0008.mp3"
delay(100);
break;
case 7: //ЗА РАЗУМ!
lcd.setCursor(7, 0);
lcd.print(F("НУ,"));
lcd.setCursor(3, 1);
lcd.print(F("ЗА РАЗУМ!"));
mp3_play (9);  // Проигрываем "mp3/0009.mp3"
delay(100);
  break; 
case 8: //ЗА ИСТИННЫХ ЖЕНЩИН!
lcd.setCursor(5, 0);
lcd.print(F("НУ, ЗА"));
lcd.setCursor(0, 1);
lcd.print(F("ИСТИННЫХ ЛЮДЕЙ!!"));
mp3_play (10);  // Проигрываем "mp3/0010.mp3"
delay(100);
  break;
case 9: //ЗА ПОНИМАНИЕ!
lcd.setCursor(7, 0);
lcd.print(F("НУ,"));
lcd.setCursor(2, 1);
lcd.print(F("ЗА ПОНИМАНИЕ!"));
mp3_play (11);  // Проигрываем "mp3/0011.mp3"
delay(100);
  break;
case 10: //ЗА ЕДИНЕНИЕ!
lcd.setCursor(7, 0);
lcd.print(F("НУ,"));
lcd.setCursor(2, 1);
lcd.print(F("ЗА ЕДИНЕНИЕ!"));
mp3_play (13);  // Проигрываем "mp3/0013.mp3"
delay(100);
  break;
case 11: //ЗА ПОБЕДУ!
lcd.setCursor(7, 0);
lcd.print(F("НУ,"));
lcd.setCursor(3, 1);
lcd.print(F("ЗА ПОБЕДУ!"));
mp3_play (16);  // Проигрываем "mp3/0016.mp3"
delay(100);
  break;
case 12: //ЗА РОДИНУ!
lcd.setCursor(7, 0);
lcd.print(F("НУ,"));
lcd.setCursor(3, 1);
lcd.print(F("ЗА ЖИЗНЬ!"));
mp3_play (21);  // Проигрываем "mp3/0021.mp3"
delay(100);
  break;
case 13: //ЧТОБ ГОЛОВА НЕ ТРЕЩАЛА!
lcd.setCursor(0, 0);
lcd.print(F("НУ, ЧТОБ ГОЛОВА"));
lcd.setCursor(2, 1);
lcd.print(F("НЕ ТРЕЩАЛА!"));
mp3_play (17);  // Проигрываем "mp3/0017.mp3"
delay(100);
  break;
case 14: //ЗА СОЛИДНОЕ МУЖСКОЕ МОЛЧАНИЕ
lcd.setCursor(0, 0);
lcd.print(F("НУ, ЗА  СОЛИДНОЕ"));//НУ,
lcd.setCursor(0, 1);
lcd.print(F("МУЖСКОЕ МОЛЧАНИЕ!"));
mp3_play (12);  // Проигрываем "mp3/0012.mp3"
delay(100);
  break;
case 15: //ЧТОБ МОРЩИЛО НАС МЕНЬШЕ!
lcd.setCursor(0, 0);
lcd.print(F("НУ,ЧТОБЫ МОРЩИЛО"));
lcd.setCursor(2, 1);
lcd.print(F("НАС МЕНЬШЕ ЧЕМ"));
mp3_play (18);  // Проигрываем "mp3/0018.mp3"
delay(100);
    break;
case 16: //ЧТОБ В СТОРОНУ НЕ ВИЛЬНУЛО!
lcd.setCursor(0, 0);
lcd.print(F("НУ,ЧТОБ В СТОРО-"));
lcd.setCursor(0, 1);
lcd.print(F("НУ НЕ  ВИЛЬНУЛО!"));
mp3_play (19);  // Проигрываем "mp3/0019.mp3"
delay(100);
  break; 
case 17: //НУ ВЫ БЛИН ДАЁТЕ!
lcd.setCursor(2, 0);
lcd.print(F("НУ ВЫ БЛИН"));
lcd.setCursor(5, 1);
lcd.print(F("ДАЁТЕ!"));
mp3_play (20);  // Проигрываем "mp3/0020.mp3"
delay(100);
  break;
case 18: //ЗА МИР ВО ВСЕМ МИРЕ
lcd.setCursor(5, 0);
lcd.print(F("ЗА МИР"));
lcd.setCursor(2, 1);
lcd.print(F("ВО ВСЕМ МИРЕ"));  
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("И БОЛЬШИЕ СИСЬКИ"));
lcd.setCursor(5, 1);
lcd.print("!!!!");
    mp3_play (34);  // Проигрываем "mp3/0034.mp3"
    delay(100);   
  break;
case 19: //ЗА НАС С ВАМИ
lcd.setCursor(1, 0);
lcd.print(F("ЗА НАС С ВАМИ"));
lcd.setCursor(1, 1);
lcd.print(F("И ХРЕН С НИМИ"));
    mp3_play (35);  // Проигрываем "mp3/0035.mp3"
    delay(100);
    break; 
case 20: //ЖЕЛАЮ ЧТОБЫ ВСЕ 
lcd.setCursor(0, 0);
lcd.print(F("ЖЕЛАЮ ЧТОБЫ ВСЕ"));
lcd.setCursor(5, 1);
lcd.print(F("!!!!"));    
mp3_play (31);  // Проигрываем "mp3/0031.mp3"
delay(100);
break;
case 21: //ХЛОПНУТЬ ПО РЮМАШКЕ
  mp3_play (37);  // Проигрываем "mp3/0037.mp3"
lcd.setCursor(0, 0);
lcd.print(F("А НЕ ХЛОПНУТЬ ЛИ"));
lcd.setCursor(0, 1);
lcd.print(F(" НАМ ПО РЮМАШКЕ?")); 
delay(3500);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print(F(" ЭТО ПРЕДЛОЖИЛ! ")); 
lcd.setCursor(0, 0);
lcd.print(F(" ЗАМЕТЬТЕ, НЕ Я "));
break;
  }

  delay(2000);

}

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 (int i = 0; i <= 7; i++) {
    for (int y = 0; y < max_DrinkCount; y++) {
      strip.setPixelColor(y, strip.Color(255, 0, 0));
      strip.show();
      delay(30);
    }
    for (int y = 0; y < max_DrinkCount; y++) {
      strip.setPixelColor(y, strip.Color(0, 255, 0));
      strip.show();
      delay(30);
    }
    for (int y = 0; y < max_DrinkCount; y++) {
      strip.setPixelColor(y, strip.Color(0, 0, 255));
      strip.show();
      delay(30);
    }
  }
}

void setup()  {
  Serial.begin(9600);//
  enc.setType(TYPE2); 
  //устанавливаем Serial порт МП3 плейера если вывод в монитор TX(D0) и RX(D1)не нужен 
  mp3_set_serial (Serial);//инициализируем Serial порт МП3 плейера
  /*  
  при необходимости создаем програмный порт для управдения МП3 плейером, если вывод в монитор TX(D0) RX(D1) необходим
  SoftwareSerial mySoftwareSerial(10, 11); // RX, TX  обозначаем програмный порт как mySoftwareSerial
  //плейер подключаем D10 D11
  mySoftwareSerial.begin(9600);//инициализируем програмный Serial порт 
  mp3_set_serial (mySoftwareSerial);// указываем програмный порт для МП3 плейера
  //инициализируем Serial с скоростью 115200, если вывод в монитор  TX(D0) RX(D1) необходим 
  Serial.begin(115200);
  */  
  delay (100);//Между двумя командами необходимо делать задержку 100 миллисекунд, в противном случае некоторые команды могут работать не стабильно.
  mp3_set_volume (30);// устанвливаем громкость 30
  delay (100);
  mp3_play (1); // Проигрываем "mp3/0001.mp3"(0001_get started!.mp3)
  delay (100);
  lcd.init();// Инициализация дисплея
  lcd.backlight();
  lcd.setCursor(3, 0);
lcd.print(F("ВЫПЬЕМ ЗА"));
lcd.setCursor(0, 1);
lcd.print(F("  БОРИСОВИЧА!"));
delay (3500);
  mp3_play (53);  // говорим.
  pinMode(BatPin, INPUT);
  pinMode(PIN_PUMP, OUTPUT);
  digitalWrite(PIN_PUMP, 0);
  currentTime = millis();
  //---------------
  oled_menu(0);
  strip.begin();
  for (int i = 0; i < 5; i++) {
    pinMode(Optics[i], INPUT);
  }
  ServoParking();
}

void loop()  {
  enc.tick();
  currentTime = millis();

      //Вращение влево
      if (enc.isLeft()) {
        if (MenuFlag == 0) {
          (Menu <= 0 ) ? Menu = 2 : Menu--; // Перемещение курсора по главному меню назад
          oled_menu(Menu);
        } else if (MenuFlag == 1) {
          (Drink <= min_Drink ) ? Drink = max_Drink : Drink--; // Уменьшаем кол-во милилитров в рюмку
          oled_auto(Drink);   
        } else if (MenuFlag == 2) {
          (DrinkCount >= max_DrinkCount ) ? DrinkCount = 1 : DrinkCount++; // Влево увечичиваем рюмки для ручного режима
          oled_manual(DrinkCount, Drink);
        }
        //Вращение вправо
      } //else {
      if (enc.isRight()) {
        if (MenuFlag == 0) {
          (Menu >= 2 ) ? Menu = 0 : Menu++; // Перемещение курсора по главному меню вперед.
          oled_menu(Menu);
        } else if (MenuFlag == 1) {
          (Drink >= max_Drink ) ? Drink = min_Drink : Drink++;
          oled_auto(Drink);
        } else if (MenuFlag == 2) {
          (Drink >= max_Drink ) ? Drink = min_Drink : Drink++;
          oled_manual(DrinkCount, Drink);
        }
      }

   
        //Обработка всех нажатий кнопки
        if (enc.isClick()){// Нажата и отпущена кнопка
        if (Menu == 0 && MenuFlag == 0) { //Нажатие кнопки меню авто
          MenuFlag = 1;
          oled_auto(Drink);
        //} else if (MenuFlag == 1 && pause_sw > 20) { //Выход из меню авто в главное
          //MenuFlag = 0;
          //oled_menu(0);
        } else if (MenuFlag == 1 ) { //Начинается автоматический разлив
          //Serial.println("AUTO"); //Начало автоматического разлива
mp3_set_volume (15);// устанвливаем громкость 25 (если хотите установить
         delay (100);
mp3_play (99);  // Проигрываем бодренькую мелодию
          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); // Перемещяемся к рюмке
              pump_timer(Drink); // Налив.
              strip.setPixelColor(y, strip.Color(0, 255, 0)); // Подствечиваем зеленым , налито.
              strip.show();
              drink_count++;
            }
mp3_stop;
          }
          if (drink_count > 0) {
            oled_nalito(MenuFlag, drink_count, Drink );
            ServoParking();
            delay(1000);
            Tost();
            CvetoMuzik();
            oled_auto(Drink);
          } else {
lcd.setCursor(0, 0);
            lcd.print(F("   НЕТ РЮМОК!   "));
            lcd.setCursor(0, 1);
            lcd.print(F("ПОСТАВТЕ РЮМКИ! "));
            mp3_play (51);  // Проигрываем ГУДОК паровоза низкий.
            delay(2000);
            oled_auto(Drink);

          }
        } else if (Menu == 1 && MenuFlag == 0) { // Нажатие меню ручное
          MenuFlag = 2;
          oled_manual(DrinkCount, Drink);

        } else if (MenuFlag == 2 ) { //Начинается ручной разлив
  lcd.clear();   
  lcd.setCursor(0, 0);
          lcd.print(F("А РЮМКИ ТОЧНО НА"));
          lcd.setCursor(0, 1);
          lcd.print(" СВОИХ МЕСТАХ?  ");
          mp3_play (52);  // Проигрываем СИРЕНА.
  delay(5000);
          oled_naliv(MenuFlag, Drink, DrinkCount); // Выводим на экран наливаем ...
          for (int y = 0; y < DrinkCount; y++) {
            strip.setPixelColor(y, strip.Color(255, 0, 0)); // Подствечиваем красным цветом
            strip.show();
            ServoNaliv(y); // Перемещяемся к рюмке
            pump_timer(Drink); // Налив.
            strip.setPixelColor(y, strip.Color(0, 255, 0)); // Подствечиваем зеленым , налито.
            strip.show();
          }
          oled_nalito(MenuFlag, DrinkCount, Drink ); // Выводим на экран налито ...
          ServoParking();
          Tost();
          CvetoMuzik();
          oled_manual(DrinkCount, Drink);
        }
      }

              if (enc.isHolded()){
                if (Menu == 2 && !promivka){
                 promivka = true;
                 pump_enable(); // Включаем насос
                 lcd.clear();   
                 lcd.setCursor(0, 0);
                 lcd.print(F("П Р О М Ы В К А"));
                 lcd.setCursor(2, 1);
                 lcd.print(">>>>>>>>>>>>");
               } else if (MenuFlag == 1 ) { //Выход из меню авто в главное
                 MenuFlag = 0;
                 oled_menu(0);
              }else if (MenuFlag == 2 ) { //Выход из меню ручное в главное
                 MenuFlag = 0;
                 oled_menu(1);
              }
            }
            if (!enc.isHold() && promivka){
               promivka = false;
               pump_disable() ; //Выключаем насос
               oled_menu(2);
              }

    if (currentTime >= (ledTime + 300)) {
      //Опрашиваем оптопары ... Если рюмка поставлена , светодиод светится синим, нет ничего - не светится
      for (int i = 0; i < max_DrinkCount; i++) {
        
        int val = analogRead(Optics[i]);     // считываем значение
//        Serial.println(val);
        if (val > Optics_porog[i]) {
          strip.setPixelColor(i, strip.Color(0, 0, 255));
        } else {
          strip.setPixelColor(i, strip.Color(0, 0, 0));
        }
    //    delay(20);

      }
      strip.show();
  Batery();
      ledTime = currentTime;
    }
    //encoder_sw_prew = encoder_sw;
    //loopTime = currentTime;

  //}
}
/*Скетч использует 20 314 байт (66%) памяти устройства. Всего доступно 30 720 байт.
Глобальные переменные используют 708 байт (34%) динамической памяти, оставляя 1 340 байт для локальных переменных.*/

 

 

tnn29041985
Offline
Зарегистрирован: 17.01.2020

ЛЮДИ ПРЕДЛАГАЙТЕ РАЗУМНЫЕ ЦЕНЫ ИБО ПРОЕКТ БУДЕТ ВЫЛОЖЕН В ОТКРЫТЫЙ ДОСТУП ВСЕМ ЖЕЛАЮЩИМ!

ПРОСТО МНОГО ЛЮДЕЙ ХОТЯТ СОБИРАТЬ "НАЛИВАТОР" НО НЕ ВСЕ ШАРЯТ В ПРОГРАММИРОВАНИИ. А КОДЫ КОТОРЫЕ ЛЕЖАТ В ОТКРЫТОМ ДОСТУПЕ МАЛОФУНКЦИОНАЛЬНЫ! НАДЕЮСЬ НА ВАШЕ ПОНИМАНИЕ И ПОДДЕРЖКУ! ЗАРАНЕЕ СПАСИБО!!!))))

fridgetester
fridgetester аватар
Offline
Зарегистрирован: 09.02.2019

моё предложение более не актуально

sadman41
Offline
Зарегистрирован: 19.10.2016

В Проектах есть топик про разливатор - там собрались те, кто шарит, у кого есть на чем потестить и кто, может, будет делать это из интереса. А Вам бы стоило большими буквами свою цену обозначить, если не хотите чужие видеть.

b707
Offline
Зарегистрирован: 26.05.2017

tnn29041985 пишет:

ЛЮДИ ПРЕДЛАГАЙТЕ РАЗУМНЫЕ ЦЕНЫ ИБО ПРОЕКТ БУДЕТ ВЫЛОЖЕН В ОТКРЫТЫЙ ДОСТУП ВСЕМ ЖЕЛАЮЩИМ!

хотите пропиарится за чужой счет?

Вы откуда код этот сперли? Судя по комментам в тексте - это с какого-то форума, явно совместая работа нескольких человек - а вы хотите чужими руками его "улучшить" и потом хвастать в блогах "своим" крутым проектам? - некрасиво

UPDATE - заглянул в Проекты - этот код оттуда. Не стыдно???

tnn29041985
Offline
Зарегистрирован: 17.01.2020

Никто его не воровал. Он в открытом доступе. А не че так что "некоторые" чужими руками и на халяву этот код улучшили и присвоили себе и за hex файлы целую 1000 просят. А я готов заплатить за добавление функций и выложить его в открытый доступ. И к блогам я обращаюсь не для хвастовства а конкретно по делу. За "чужие руки" деньги платят

b707
Offline
Зарегистрирован: 26.05.2017

tnn29041985 пишет:
Никто его не воровал. Он в открытом доступе.

А я готов .... выложить его в открытый доступ.

Вы заговариваетесь? он и так в открытом доступе, зачем его туда выкладывать? :)

И непонятно - вы то тут при чем? - это пусть авторы решают, в открытый доступ выкладывать или продавать за "целую тысячу". ваша помощь тут не требуется

tnn29041985
Offline
Зарегистрирован: 17.01.2020

Так же как и ваш комментарий.

b707
Offline
Зарегистрирован: 26.05.2017

tnn29041985 - раз вам так хочется улучшить наливатор, добрый совет: пойдите в раздел Проекты, в ветку, где тусуются парни, писавшие этот код - и помогите им. Доработайте конструкцию, напишите новый код - и выложите в ветку.

А если вы этого не делаете - есть очень большое подозрение, что вы хотите наварится на чужлм коде

tnn29041985
Offline
Зарегистрирован: 17.01.2020

Да нафиг мне навар. Я его делаю для своего начальника в подарок и хочу чтобы там были эти функции. У меня наливатор уже сделан и плата под этот код. Код отлично работает, но я хочу эти функции которые я описал выше. Просто коды писать не умею. Если не верите скиньте почту я скину фото. И за доработку я готов заплатить рублем. И то что напишут я опубликую бесплатно))

b707
Offline
Зарегистрирован: 26.05.2017

ну так предложите этот заказ авторам проекта в той ветке.

tnn29041985
Offline
Зарегистрирован: 17.01.2020

Они офлайн

b707
Offline
Зарегистрирован: 26.05.2017

tnn29041985 пишет:
Они офлайн

Да ну? - 4 часа назад последнее сообщение. Считай только что от компа отошли

Или вы надетесь, что вам тут кто-то напишет код за пару часов?

tnn29041985
Offline
Зарегистрирован: 17.01.2020

Вы мне можете помочь?

b707
Offline
Зарегистрирован: 26.05.2017

tnn29041985 пишет:
Вы мне можете помочь?

нет

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Видел топик про наливатор в проектах, но не заглядывал.

И тут

    randomSeed(currentTime);
byte num=random(22); // 0...21
  mp3_set_volume (25);// устанвливаем громкость 25 (если хотите установить
  delay (100);
   lcd.clear();
    switch (num){
  //switch (random(20)) { // 0...19
case 0: //ЗА ВСТРЕЧУ!
lcd.setCursor(7, 0);
lcd.print(F("НУ,"));
lcd.setCursor(2, 1);
lcd.print(F("ЗА ВДВ!"));
mp3_play (2);  // Проигрываем "mp3/0002.mp3"
delay(100);
break; 
  case 1: //ЗА КРАСОТУ!
lcd.setCursor(7, 0);
lcd.print(F("НУ,"));
lcd.setCursor(2, 1);
lcd.print(F("ЗА КРАСОТУ!"));   
mp3_play (3);  // Проигрываем "mp3/0003.mp3"
delay(100);
break;

И так 22 раза. Какой  ужос...

 

Kakmyc
Offline
Зарегистрирован: 15.01.2018

asam пишет:

Видел топик про наливатор в проектах, но не заглядывал.

И тут

    randomSeed(currentTime);
byte num=random(22); // 0...21
  mp3_set_volume (25);// устанвливаем громкость 25 (если хотите установить
  delay (100);
   lcd.clear();
    switch (num){
  //switch (random(20)) { // 0...19
case 0: //ЗА ВСТРЕЧУ!
lcd.setCursor(7, 0);
lcd.print(F("НУ,"));
lcd.setCursor(2, 1);
lcd.print(F("ЗА ВДВ!"));
mp3_play (2);  // Проигрываем "mp3/0002.mp3"
delay(100);
break; 
  case 1: //ЗА КРАСОТУ!
lcd.setCursor(7, 0);
lcd.print(F("НУ,"));
lcd.setCursor(2, 1);
lcd.print(F("ЗА КРАСОТУ!"));   
mp3_play (3);  // Проигрываем "mp3/0003.mp3"
delay(100);
break;

И так 22 раза. Какой  ужос...

 

Такие видимо писаки писали.
Вот честно, если бы я захотел наливатор, то написал бы под себя какой захотел с какими угодно фичами. Хотя я и не программист вовсе.
Если люди собрались для того что бы такое написать толпой, и на это у них ушло столько времени, то даже не знаю какого уровня новички этим занялись.