Наливатор,,,,,поправить код

andrei1979
Offline
Зарегистрирован: 07.02.2021

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

andrei1979
Offline
Зарегистрирован: 07.02.2021
001#include <OLED_I2C.h>
002#include <Servo.h>
003#include "Adafruit_NeoPixel.h"
004#include <SoftwareSerial.h>
005#include <DFPlayer_Mini_Mp3.h>
006 
007OLED myOLED(SDA, SCL, 8); //Подключение экрана А4-SDA-зеленый, А5-SCL-желтый
008extern uint8_t MegaNumbers[];
009extern uint8_t RusFont[];
010extern uint8_t SmallFont[];
011unsigned long currentTime;
012unsigned long loopTime;
013unsigned long ledTime;
014// Переменные для энкодера -----------
015const int pin_A = 2;       // Подключение вывода A (CLK) энкодера
016const int pin_B = 3;       // Подключение вывода B (DT) энкодера
017const int pin_SW = 4;       // Подключение вывода кнопки (SW) энкодера
018unsigned char encoder_A;
019unsigned char encoder_B;
020unsigned char encoder_A_prev = 0;
021unsigned char encoder_sw_prew = 1;
022//Массив , обозначаем подключенные оптопары по выводам . Оптопары подключены, A0,A1,A2,A3,A6
023const byte  Optics[] = {0, 1, 2, 3, 6};
024// Значения порога срабатывания датчика для каждой рюмки
025const unsigned int Optics_porog[] = {1000,1000,1000,1000,1000};
026//Серво
027const int PIN_SERVO = 9;
028Servo servo;
029//Позиция каждой рюмки
030const byte Rumka_pos[] = {15,45,90,140,175}; //53,69,84,101,117
031const byte servo_speed=15; // Скорость поворота серво,  10 - норм, 20 медленно, 30 очень медленно
032byte  Menu = 0;
033byte MenuFlag = 0; // Здесь храниться уровень меню. 0 находимся в  Главном меню. 1 Вошли в меню Авто, 2 вошли в  Ручное управление
034byte  Drink = 15; // По умолчанию в рюмку наливаем  15 мл.
035//----- Минимальные и максимальные значения наполняемой жидкости и задержки для наполнения.
036const byte  min_Drink = 5; // Минимум в рюмку - 5 мл.
037const byte  max_Drink = 50; // Максимум в рюмку - 50 мл.
038// Калибровка работы насосика. Значения для налива min_Drink и max_Drink соотвественно
039const unsigned int min_Drink_delay = 300;
040const unsigned int max_Drink_delay = 6000;
041//--------
042byte  DrinkCount = 1; //По умолчанию, для ручного режима - 1 рюмка
043const byte  max_DrinkCount = 5; //Максимальное кол-во рюмок - 5
044// Насосик
045const byte PIN_PUMP = 12;
046// Светодиоды
047const int PIN_LED = 5;// Сюда подключаются светодиоды
048const int LED_COUNT = max_DrinkCount;
049Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, PIN_LED, NEO_GRB + NEO_KHZ800);
050//-------
051byte mp3_count=33; //Количество голосовых файлов на SD карте
052 
053 
054 
055void pump_enable() {
056  digitalWrite(PIN_PUMP, 1); //вкл реле
057}
058 
059void pump_disable() {
060  digitalWrite(PIN_PUMP, 0); //выкл реле
061}
062 
063void pump_timer(byte Drink) {
064  digitalWrite(PIN_PUMP, 1); //вкл реле
065  delay(map(Drink, min_Drink,  max_Drink, min_Drink_delay, max_Drink_delay));
066  digitalWrite(PIN_PUMP, 0); //выкл реле
067}
068 
069void oled_menu(int Menu) {
070  myOLED.clrScr();
071  myOLED.setFont(RusFont);
072  myOLED.print(F("N-34 *YFKBDFNJH*"), CENTER, 0);//Т-34 *НАЛИВАТОР*
073  myOLED.print(F("FDNJ JUJYM"), CENTER, 25);//АВТО ОГОНЬ    15
074  myOLED.print(F("HEXYJQ PFHZL"), CENTER, 40);//РУЧНОЙ ЗАРЯД     30
075  myOLED.print(F("GHJRFXRF CBCNTVS"), CENTER, 55);//ПРОКАЧКА СИСТЕМЫ    45
076  myOLED.setFont(SmallFont);
077  myOLED.print(F(">"), LEFT, (Menu * 15) + 25);  // 15+15
078  myOLED.print(F("<"), RIGHT, (Menu * 15) + 25);  //  15+15
079  myOLED.update();
080 
081}
082//  выводит строчку по чуть чуть, в самый раз и тд. Передается номер строки, на которой выводить сообщение
083void DrinkInfo(byte pos) {
084  if (Drink < 15) {
085    myOLED.print(F("YB J XTV"), CENTER, pos);//НИ О ЧЕМ
086  } else if (Drink < 28) {
087    myOLED.print(F("GJ XENM - XENM"), CENTER, pos);//ПО ЧУТЬ - ЧУТЬ
088  } else if (Drink < 38) {
089    myOLED.print(F("D CFVSQ HFP"), CENTER, pos);//В САМЫЙ РАЗ
090  } else if (Drink < 48) {
091    myOLED.print(F("GJ GJKYJQ"), CENTER, pos);//ПО ПОЛНОЙ
092  } else {
093    myOLED.print(F("LJ RHFTD"), CENTER, pos);//ДО КРАЕВ
094  }
095 
096}
097 
098  void Tost() {
099  randomSeed(currentTime);
100  mp3_play(random(mp3_count)+1);
101  delay (5000);}
102 /* myOLED.clrScr();
103  myOLED.setFont(RusFont);
104  myOLED.print(F("YE!"), CENTER, 20); //НУ!
105  // Рандом - 1
106  switch (random(18)+1) {  // case 0...17
107  case 0:
108      myOLED.print(F("PF DCNHTXE!"), CENTER, 40); //ЗА ВСТРЕЧУ!
109      mp3_play (2);  // Проигрываем "mp3/0002.mp3"
110    delay(100);
111    break;
112  case 1:
113      myOLED.print(F("PF RHFCJNE!"), CENTER, 40); //ЗА КРАСОТУ!
114      mp3_play (3);  // Проигрываем "mp3/0003.mp3"
115    delay(100);
116    break;
117  case 2:
118      myOLED.print(F("PF LHE;,E!"), CENTER, 40); //ЗА ДРУЖБУ!
119      mp3_play (4);  // Проигрываем "mp3/0004.mp3"
120    delay(100);
121    break;
122  case 3:
123      myOLED.print(F("DS <KBY"), CENTER, 38); //ВЫ БЛИН
124      myOLED.print(F("LFTNT!"), CENTER, 55); //ДАЕТЕ!
125      mp3_play (20);  // Проигрываем "mp3/0020.mp3"
126    delay(100);
127    break;
128  case 4:
129      myOLED.print(F("PF ,HFNCNDJ!"), CENTER, 40); //ЗА БРАТСТВО!
130      mp3_play (5);  // Проигрываем "mp3/0005.mp3"
131    delay(100);
132    break;
133  case 5:
134      myOLED.print(F("PF"), CENTER, 38); //за
135    myOLED.print(F("CGHFDTLKBDJCNM!"), CENTER, 55); //СПРАВЕДЛИВОСТЬ!
136      mp3_play (6);  // Проигрываем "mp3/0006.mp3"
137    delay(100);
138    break;
139  case 6:
140      myOLED.print(F("PF HS,FKRE!"), CENTER, 40); //ЗА РЫБАЛКУ!
141      mp3_play (7);  // Проигрываем "mp3/0007.mp3"
142    delay(100);
143    break;
144  case 7:
145      myOLED.print(F("PF BCRECCNDJ!"), CENTER, 40); //ЗА ИСКУССТВО!
146      mp3_play (8);  // Проигрываем "mp3/0008.mp3"
147    delay(100);
148    break;
149  case 8:
150      myOLED.print(F("PF HFPEV!"), CENTER, 40); //ЗА РАЗУМ!
151      mp3_play (9);  // Проигрываем "mp3/0009.mp3"
152    delay(100);
153    break;
154  case 9:
155      myOLED.print(F("PF BCNBYYS["), CENTER, 38); //ЗА ИСТИННЫХ
156      myOLED.print(F(":TYOBY!"), CENTER, 55); //ЖЕНЩИН!
157      mp3_play (10);  // Проигрываем "mp3/0010.mp3"
158    delay(100);
159    break;
160  case 10:
161      myOLED.print(F("PF GJYBVFYBT!"), CENTER, 40); //ЗА ПОНИМАНИЕ!
162      mp3_play (11);  // Проигрываем "mp3/0011.mp3"
163    delay(100);
164    break;
165  case 11:
166      myOLED.print(F("PF TLBYTYBT!"), CENTER, 40); //ЗА ЕДИНЕНИЕ!
167      mp3_play (13);  // Проигрываем "mp3/0013.mp3"
168    delay(100);
169    break;
170  case 12:
171      myOLED.print(F("PF GJ,TLE!"), CENTER, 40); //ЗА ПОБЕДУ!
172      mp3_play (16);  // Проигрываем "mp3/0016.mp3"
173    delay(100);
174    break;
175  case 13:
176      myOLED.print(F("PF HJLBYE!"), CENTER, 40); //ЗА РОДИНУ!
177      mp3_play (21);  // Проигрываем "mp3/0021.mp3"
178    delay(100);
179    break;
180  case 14:
181      myOLED.print(F("XNJ, UJKJDF"), CENTER, 38); //ЧТОБ ГОЛОВА
182    myOLED.print(F("YT NHTOFKF!"), CENTER, 55); //НЕ ТРЕЩАЛА!
183      mp3_play (17);  // Проигрываем "mp3/0017.mp3"
184    delay(100);
185    break;
186  case 15:
187      myOLED.print(F("PF CJKBLYJT"), CENTER, 38); //ЗА СОЛИДНОЕ
188    myOLED.print(F("VE;CRJT VJKXFYBT"), CENTER, 55); //МУЖСКОЕ МОЛЧАНИЕ
189      mp3_play (12);  // Проигрываем "mp3/0012.mp3"
190    delay(100);
191    break;
192  case 16:
193      myOLED.print(F("XNJ, VJHOBKJ"), CENTER, 38); //ЧТОБ МОРЩИЛО
194    myOLED.print(F("YFC VTYMIT!"), CENTER, 55); //НАС МЕНЬШЕ!
195      mp3_play (18);  // Проигрываем "mp3/0018.mp3"
196    delay(100);
197    break;
198  case 17:
199      myOLED.print(F("XNJ, D CNJHJYE"), CENTER, 38); //ЧТОБ В СТОРОНУ
200    myOLED.print(F("YT DBKMYEKJ!"), CENTER, 55); //НЕ ВИЛЬНУЛО!
201      mp3_play (19);  // Проигрываем "mp3/0019.mp3"
202    delay(100);
203    break;     
204  }
205  delay(2000);
206  myOLED.update();
207 
208}*/
209 
210// Меню Авто режим
211void oled_auto(int Drink) {
212 
213  myOLED.clrScr();
214  myOLED.setFont(RusFont);
215  myOLED.print(F("FDNJ JUJYM"), CENTER, 0); //АВТО ОГОНЬ
216  myOLED.print(F("VK   "), RIGHT, 27);
217  DrinkInfo(57);
218  myOLED.setFont(MegaNumbers);
219  myOLED.print(String(Drink), CENTER, 13);
220  myOLED.update();
221}
222 
223// Меню Ручной режим
224void oled_manual(int DrinkCount, int Drink) {
225 
226  myOLED.clrScr();
227  myOLED.setFont(RusFont);
228  myOLED.print(F("HEXYJQ PFHZL"), CENTER, 0); //РУЧНОЙ ЗАРЯД
229  DrinkInfo(57);
230  myOLED.print(F("H>V"), 24, 27);  // РЮМ
231  myOLED.print(F("VK "), RIGHT, 27);
232  myOLED.setFont(MegaNumbers);
233  myOLED.print(String(DrinkCount), LEFT, 13);
234  myOLED.print(String(Drink), (Drink < 10) ? 80 : 57, 13);
235  myOLED.update();
236}
237 
238 
239void oled_naliv(int MenuFlag) {
240  myOLED.clrScr();
241  myOLED.setFont(RusFont);
242  myOLED.print((MenuFlag == 1) ? F("FDNJ JUJYM") : F("HEXYJQ PFHZL") , CENTER, 0); // АВТО ОГОНЬ   РУЧНОЙ ЗАРЯД
243 
244  myOLED.print(F("JNRHSDF> JUJYM"), CENTER, 27); //ОТКРЫВАЮ ОГОНЬ
245  DrinkInfo(47);
246  myOLED.update();
247}
248 
249void oled_nalito(int MenuFlag, int Nalito) {
250  myOLED.clrScr();
251  myOLED.setFont(RusFont);
252  myOLED.print((MenuFlag == 1) ? F("FDNJ JUJYM") : F("HEXYJQ PFHZL") , CENTER, 0); // АВТО ОГОНЬ   РУЧНОЙ ЗАРЯД
253   
254  if (Nalito == 1) {
255    myOLED.print(F("G J H F : T Y F"), CENTER, 20); // ПОРАЖЕНА
256    myOLED.print(F("W T K M"), CENTER, 55); //ЦЕЛЬ
257  } else if (Nalito <= 4 ) {
258    myOLED.print(F("G J H F : T Y J"), CENTER, 20); // ПОРАЖЕНО
259    myOLED.print(F("W T K B"), CENTER, 55); //ЦЕЛИ
260  } else {
261    myOLED.print(F("G J H F : T Y J"), CENTER, 20); // ПОРАЖЕНО
262    myOLED.print(F("W T K T Q"), CENTER, 55); //ЦЕЛЕЙ
263  }
264 
265  myOLED.setFont(SmallFont);
266  myOLED.print(String(Nalito), CENTER, 36);
267  myOLED.update();
268}
269 
270void ServoNaliv(byte rumka) {
271  servo.attach(PIN_SERVO);
272  for (int pos = servo.read(); pos <= Rumka_pos[rumka]; pos += 1) {
273    // с шагом в 1 градус
274    servo.write(pos); // даем серве команду повернуться в положение, которое задается в переменной 'pos'
275    delay(servo_speed); // ждем , пока ротор сервы выйдет в заданную позицию
276  }
277  servo.detach();
278 
279 
280}
281 
282void ServoParking () {
283  //Serial.println(servo.read());
284  servo.attach(PIN_SERVO);
285  for (int pos = servo.read();  pos >= 0; pos -= 1) {
286    // с шагом в 1 градус
287    servo.write(pos); // даем серве команду повернуться в положение, которое задается в переменной 'pos'
288    delay(servo_speed); // ждем , пока ротор сервы выйдет в заданную позицию
289  }
290  servo.detach();
291}
292 
293void CvetoMuzik() {
294  for(long firstPixelHue = 0; firstPixelHue < 5*65536; firstPixelHue += 768) {
295    for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
296      int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
297      strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
298    }
299    strip.show(); // Update strip with new contents
300    delay(10);  // Pause for a moment
301  }
302}
303 
304 
305void celi()  {   // Мелодия перед наливом
306            myOLED.clrScr();
307            myOLED.setFont(RusFont);
308            myOLED.print(F("J<YFHE:TYBT WTKTQ"), CENTER, 28); //ОБНАРУЖЕНИЕ ЦЕЛЕЙ
309            myOLED.print(F("LKZ GJHF:TYBZ"), CENTER, 45); // ДЛЯ ПОРАЖЕНИЯ
310            delay(300);
311            mp3_play (51);   
312            myOLED.update();
313            delay(5000);
314}
315 
316 
317void setup()  {
318  Serial.begin(9600);//
319  //устанавливаем Serial порт МП3 плейера если вывод в монитор TX(D0) и RX(D1)не нужен
320  mp3_set_serial (Serial);//инициализируем Serial порт МП3 плейера
321  /* 
322  при необходимости создаем програмный порт для управдения МП3 плейером, если вывод в монитор TX(D0) RX(D1) необходим
323  SoftwareSerial mySoftwareSerial(10, 11); // RX, TX  обозначаем програмный порт как mySoftwareSerial
324  //плейер подключаем D10 D11
325  mySoftwareSerial.begin(9600);//инициализируем програмный Serial порт
326  mp3_set_serial (mySoftwareSerial);// указываем програмный порт для МП3 плейера
327  //инициализируем Serial с скоростью 115200, если вывод в монитор  TX(D0) RX(D1) необходим
328  Serial.begin(115200);
329  */ 
330  delay (100);//Между двумя командами необходимо делать задержку 100 миллисекунд, в противном случае некоторые команды могут работать не стабильно.
331  mp3_set_volume (28);// устанвливаем громкость 20
332  delay (100);
333  mp3_play (1); // Проигрываем "mp3/0001.mp3"
334  delay (100);
335  //   Volume=EEPROM.read(0);
336  myOLED.begin(); // Инициализация дисплея
337  // выводим привествие после включения перед наливом
338  myOLED.clrScr(); 
339  myOLED.setFont(RusFont);
340  myOLED.print(F("PFDJLBVCZ!"), CENTER, 25);// ЗАВОДИМСЯ!
341  myOLED.update();
342   delay (5000);
343    
344   // Выводит на экран Настройка систем
345   myOLED.clrScr();
346   myOLED.setFont(RusFont);
347   myOLED.print(F("GHJBPDJ:E"), CENTER, 25); //ПРОИЗВОЖУ
348   myOLED.print(F("YFCNHJQRE CBCNTV"), CENTER, 35); // НАСТРОЙКУ СИТЕМ
349   myOLED.update();
350   delay(2000);
351    
352   // Выводит на экран Все системы работают нормально
353   myOLED.clrScr();
354   myOLED.setFont(RusFont);
355   myOLED.print(F("DCT CBNTVS"), CENTER, 15); //ВСЕ СИСТЕМЫ
356   myOLED.print(F("D YJHVT"), CENTER, 35); // В НОРМЕ
357   myOLED.update();
358   delay(3000);
359    
360    
361  pinMode(pin_SW, INPUT); // устанавливаем pin pin_SW как вход
362  digitalWrite(pin_SW, HIGH); // Поддяжка вывода к 1
363  pinMode(pin_A, INPUT);
364  pinMode(pin_B, INPUT);
365  pinMode(PIN_PUMP, OUTPUT);
366  digitalWrite(PIN_PUMP, 0);
367  currentTime = millis();
368  loopTime = currentTime;
369  //---------------
370  oled_menu(0);
371  strip.begin();
372  for (int i = 0; i < 5; i++) {
373    pinMode(Optics[i], INPUT);
374  }
375  ServoParking();
376 
377}
378 
379void loop()  {
380  currentTime = millis();
381  if (currentTime >= (loopTime + 5)) { // проверяем каждые 5мс
382 
383    //     int  val = analogRead(0);     // считываем значение
384    //  Serial.println(val);
385    encoder_A = digitalRead(pin_A);     // считываем состояние выхода А энкодера
386    encoder_B = digitalRead(pin_B);     // считываем состояние выхода B энкодера
387    if ((!encoder_A) && (encoder_A_prev)) {  // если состояние изменилось с положительного к нулю
388 
389      //Вращение влево
390      if (encoder_B) {
391        if (MenuFlag == 0) {
392          (Menu <= 0 ) ? Menu = 2 : Menu--; // Перемещение курсора по главному меню назад
393          oled_menu(Menu);
394        } else if (MenuFlag == 1) {
395          (Drink <= min_Drink ) ? Drink = max_Drink : Drink--; // Уменьшаем кол-во милилитров в рюмку
396          oled_auto(Drink);
397        } else if (MenuFlag == 2) {
398          (DrinkCount >= max_DrinkCount ) ? DrinkCount = 1 : DrinkCount++; // Влево увечичиваем рюмки для ручного режима
399          oled_manual(DrinkCount, Drink);
400        }
401        //Вращение вправо
402      } else {
403        if (MenuFlag == 0) {
404          (Menu >= 2 ) ? Menu = 0 : Menu++; // Перемещение курсора по главному меню вперед.
405          oled_menu(Menu);
406        } else if (MenuFlag == 1) {
407          (Drink >= max_Drink ) ? Drink = min_Drink : Drink++;
408          oled_auto(Drink);
409        } else if (MenuFlag == 2) {
410          (Drink >= max_Drink ) ? Drink = min_Drink : Drink++;
411          oled_manual(DrinkCount, Drink);
412        }
413      }
414 
415    }
416 
417    encoder_A_prev = encoder_A;     // сохраняем значение А для следующего цикла
418 
419    int encoder_sw = digitalRead(pin_SW);
420    if  (encoder_sw == 0 && encoder_sw != encoder_sw_prew)  { // Нажата кнопка
421 
422      int pause_sw = 0;
423      boolean promivka = false;
424      while (digitalRead(pin_SW) == 0) { // Держим кнопку. Считаем сколько времени прошло...
425        delay(100);
426        pause_sw++;
427        if (pause_sw > 20 && Menu != 2 ) break;
428 
429        if (pause_sw > 20 && Menu == 2 && promivka == false) { // Если пункт меню промывка и держим кнопку больше 2 секунд.
430          promivka = true;
431          pump_enable(); // Включаем насос
432          myOLED.clrScr();
433          myOLED.setFont(RusFont);
434          myOLED.print(F("GHJRFXRF CBCNTVS"), CENTER, 15); // ПРОКАЧКА СИСТЕМЫ
435          myOLED.print(F("* * * * *"), CENTER, 45);
436          myOLED.update();
437        }
438      }
439 
440      //После отпускания кнопки , обрабатываем
441      if (promivka == true) { //Отпустили кнопку. Если включена промывка, выключаем насос и возвращаемся в главное меню
442        promivka = false;
443        pump_disable() ; //Выключаем насос
444        oled_menu(2);
445 
446      } else {
447        //Обработка всех нажатий кнопки
448        if (Menu == 0 && MenuFlag == 0 &&  pause_sw < 10) { //Нажатие кнопки меню авто
449          MenuFlag = 1;
450          oled_auto(Drink);
451        } else if (MenuFlag == 1 && pause_sw > 20) { //Выход из меню авто в главное
452          MenuFlag = 0;
453          oled_menu(0);
454        } else if (MenuFlag == 1 ) { //Начинается автоматический разлив
455           
456          celi();           // Мелодия перед наливом в авторежиме
457           
458          Serial.println("Начало автоматического разлива");
459          oled_naliv(MenuFlag); // Выводим на экран наливаем ...
460          byte drink_count = 0;
461          for (int y = 0; y < max_DrinkCount; y++) {
462            if (analogRead(Optics[y]) < Optics_porog[y] ) {
463              strip.setPixelColor(y, strip.Color(255, 0, 0)); // Подствечиваем красным цветом
464              strip.show();
465              ServoNaliv(y); // Перемещяемся к рюмке
466              pump_timer(Drink); // Налив.
467              strip.setPixelColor(y, strip.Color(0, 255, 0)); // Подствечиваем зеленым , налито.
468              strip.show();
469              drink_count++;
470            }
471          }
472          if (drink_count > 0) {
473            oled_nalito(MenuFlag, drink_count );
474            ServoParking();
475            //delay(1000);
476            Tost();
477            CvetoMuzik();
478            oled_auto(Drink);
479          } else {
480            myOLED.clrScr();
481            myOLED.setFont(RusFont);
482            myOLED.print(F("YTN WTKTQ!"), CENTER, 15); //НЕТ ЦЕЛЕЙ!
483            myOLED.print(F("J<JPYFXMNT WTKM"), CENTER, 35); // ОБОЗНАЧЬТЕ ЦЕЛИ
484            myOLED.print(F("LKZ GJHF:TYBZ!"), CENTER, 55); // ДЛЯ ПОРАЖЕНИЯ!
485      delay(300);
486            mp3_play (50);  // Играем сирену.
487            myOLED.update();
488            delay(5000);
489            oled_auto(Drink);
490 
491          }
492        } else if (Menu == 1 && MenuFlag == 0 &&  pause_sw < 10) { // Нажатие меню ручное
493          MenuFlag = 2;
494          oled_manual(DrinkCount, Drink);
495        } else if (MenuFlag == 2 && pause_sw > 20) { //Выход из меню ручное в главное
496          MenuFlag = 0;
497          oled_menu(1);
498        } else if (MenuFlag == 2 ) { //Начинается ручной разлив
499 
500            celi(); //Мелодия перед ручным наливом
501                         
502          oled_naliv(MenuFlag); // Выводим на экран наливаем ...
503          for (int y = 0; y < DrinkCount; y++) {
504            strip.setPixelColor(y, strip.Color(255, 0, 0)); // Подствечиваем красным цветом
505            strip.show();
506            ServoNaliv(y); // Перемещяемся к рюмке
507            pump_timer(Drink); // Налив.
508            strip.setPixelColor(y, strip.Color(0, 255, 0)); // Подствечиваем зеленым , налито.
509            strip.show();
510          }
511          oled_nalito(MenuFlag, DrinkCount );
512          ServoParking();
513          Tost();
514          CvetoMuzik();
515          oled_manual(DrinkCount, Drink);
516        }
517      }
518    }
519 
520    if (currentTime >= (ledTime + 300)) {
521      //Опрашиваем оптопары ... Если рюмка поставлена , светодиод светится синим, нет ничего - не светится
522      for (int i = 0; i < max_DrinkCount; i++) {
523         
524        int val = analogRead(Optics[i]);     // считываем значение
525        Serial.println(val);
526        if (val < Optics_porog[i]) {
527          strip.setPixelColor(i, strip.Color(0, 0, 255));
528        } else {
529          strip.setPixelColor(i, strip.Color(30, 60, 60));// свеченте в отсутствии рюмки
530        }
531    //    delay(20);
532 
533      }
534      strip.show();
535      ledTime = currentTime;
536    }
537    encoder_sw_prew = encoder_sw;
538    loopTime = currentTime;
539 
540  }
541}

 

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

в ветке про Наливатор в Проектах - куча народу тусуется. попроси их.

 

andrei1979
Offline
Зарегистрирован: 07.02.2021

писал и там но безуспешно,,,,,пока никто не отвечает или не хотят

man9913
Offline
Зарегистрирован: 19.03.2016

денег скока?

andrei1979
Offline
Зарегистрирован: 07.02.2021

предлагайте сумму 

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

Поправлю за 1000р
За 2000 перепишу это поделие начисто.

kakmycmail@gmail.com

andrei1979
Offline
Зарегистрирован: 07.02.2021

вайбер есть? ,,,,,удобнее будет обсудить

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

89124664897

andrei1979
Offline
Зарегистрирован: 07.02.2021

Чет не находит

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

На почту напиши