Наливатор,,,,,поправить код
- Войдите на сайт для отправки комментариев
Пнд, 08/02/2021 - 12:18
доброго дня всем,,,,,,так как я не совсем програмист,,,,ардуино можно сказать овладеваю по немногу учусь,,,,собрал наливатор ,,,,,все работает как надо но хотелось бы что бы в автомотическом режиме работал в таком режиме,,,,,,,рюмки налиты,снимаем рюмки,ставим рюмки и продолжается налив в поставленные рюмки ,,,,сейчас все работает но в автомотическом режиме работать начинает только после нажатия кнопки энкодера,,,,,код наливатора из этого форума,,,,,с создателями связаться не удается
1
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
007
OLED myOLED(SDA, SCL, 8);
//Подключение экрана А4-SDA-зеленый, А5-SCL-желтый
008
extern
uint8_t MegaNumbers[];
009
extern
uint8_t RusFont[];
010
extern
uint8_t SmallFont[];
011
unsigned
long
currentTime;
012
unsigned
long
loopTime;
013
unsigned
long
ledTime;
014
// Переменные для энкодера -----------
015
const
int
pin_A = 2;
// Подключение вывода A (CLK) энкодера
016
const
int
pin_B = 3;
// Подключение вывода B (DT) энкодера
017
const
int
pin_SW = 4;
// Подключение вывода кнопки (SW) энкодера
018
unsigned
char
encoder_A;
019
unsigned
char
encoder_B;
020
unsigned
char
encoder_A_prev = 0;
021
unsigned
char
encoder_sw_prew = 1;
022
//Массив , обозначаем подключенные оптопары по выводам . Оптопары подключены, A0,A1,A2,A3,A6
023
const
byte
Optics[] = {0, 1, 2, 3, 6};
024
// Значения порога срабатывания датчика для каждой рюмки
025
const
unsigned
int
Optics_porog[] = {1000,1000,1000,1000,1000};
026
//Серво
027
const
int
PIN_SERVO = 9;
028
Servo servo;
029
//Позиция каждой рюмки
030
const
byte
Rumka_pos[] = {15,45,90,140,175};
//53,69,84,101,117
031
const
byte
servo_speed=15;
// Скорость поворота серво, 10 - норм, 20 медленно, 30 очень медленно
032
byte
Menu = 0;
033
byte
MenuFlag = 0;
// Здесь храниться уровень меню. 0 находимся в Главном меню. 1 Вошли в меню Авто, 2 вошли в Ручное управление
034
byte
Drink = 15;
// По умолчанию в рюмку наливаем 15 мл.
035
//----- Минимальные и максимальные значения наполняемой жидкости и задержки для наполнения.
036
const
byte
min_Drink = 5;
// Минимум в рюмку - 5 мл.
037
const
byte
max_Drink = 50;
// Максимум в рюмку - 50 мл.
038
// Калибровка работы насосика. Значения для налива min_Drink и max_Drink соотвественно
039
const
unsigned
int
min_Drink_delay = 300;
040
const
unsigned
int
max_Drink_delay = 6000;
041
//--------
042
byte
DrinkCount = 1;
//По умолчанию, для ручного режима - 1 рюмка
043
const
byte
max_DrinkCount = 5;
//Максимальное кол-во рюмок - 5
044
// Насосик
045
const
byte
PIN_PUMP = 12;
046
// Светодиоды
047
const
int
PIN_LED = 5;
// Сюда подключаются светодиоды
048
const
int
LED_COUNT = max_DrinkCount;
049
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, PIN_LED, NEO_GRB + NEO_KHZ800);
050
//-------
051
byte
mp3_count=33;
//Количество голосовых файлов на SD карте
052
053
054
055
void
pump_enable() {
056
digitalWrite(PIN_PUMP, 1);
//вкл реле
057
}
058
059
void
pump_disable() {
060
digitalWrite(PIN_PUMP, 0);
//выкл реле
061
}
062
063
void
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
069
void
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
// выводит строчку по чуть чуть, в самый раз и тд. Передается номер строки, на которой выводить сообщение
083
void
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
// Меню Авто режим
211
void
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
// Меню Ручной режим
224
void
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
239
void
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
249
void
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
270
void
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
282
void
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
293
void
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
305
void
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
317
void
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
379
void
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
}
в ветке про Наливатор в Проектах - куча народу тусуется. попроси их.
писал и там но безуспешно,,,,,пока никто не отвечает или не хотят
денег скока?
предлагайте сумму
Поправлю за 1000р
За 2000 перепишу это поделие начисто.
kakmycmail@gmail.com
вайбер есть? ,,,,,удобнее будет обсудить
89124664897
Чет не находит
На почту напиши