Доработка скетча
- Войдите на сайт для отправки комментариев
Привет всем. В топике про наливатор писал http://arduino.ru/forum/proekty/nalivator-avtomatizirovannaya-mashina-kotoraya-budet-razlivat-alkogol-po-stopkam?page=64#comment-555856 но в ответ тишина. Может тут кто поможет.
Надо добавить один режим в тот скетч по ссылке выше. С меня что скажете. Внуки одолели, а моим мозгам, насквозь продутым в горах Афганистана, не хватает знаний в этом вопросе. Скетч дальше меня не уйдет. Слово офицера.
Режим, так сказать, мультиналива: в каждый стаканчик свой объем сока. Почему не возьму готовый с той темы? Много лишнего. Внуки еще малые. Им сам процесс интересен.
Видел тут запрос ранее от одного человека. Так его с грязью смешали. Просьба по существу. Спасибо.
С уважением, Сергей.
Что там у тебя за режим, я не понял. В той теме такого режима нет и ты хочешь добавить, или есть и тебе надо лишнее убрать, объясняй толком - сделаем.
И да, по твоей ссылке я скетча не нашёл, а там в теме их вагон, давай конкретную ссылку.
Что там у тебя за режим, я не понял. В той теме такого режима нет и ты хочешь добавить, или есть и тебе надо лишнее убрать, объясняй толком - сделаем.
И да, по твоей ссылке я скетча не нашёл, а там в теме их вагон, давай конкретную ссылку.
не ты один не нашёл, нас теперь минимум двое )))
Троя.
perfomaster@mail.ru пишите-обсудим
Троя.
Четвира
Мужики, извините, ссылку не проверил. Сборная солянка из нескольких скетчей. На что ума хватило.
001
#include <LCD_1602_RUS.h>
002
#include <Servo.h>
003
#include "Adafruit_NeoPixel.h"
004
//#include "GyverEncoder.h"
005
#include <EEPROM.h>
006
#include "DFRobotDFPlayerMini.h"
007
#include "SoftwareSerial.h"
008
#define RX_MP3_PIN 10 // подключаем к TX плеера (третий пин)
009
#define TX_MP3_PIN 11 // подключаем к RX плеера (второй пин)
010
SoftwareSerial mySoftwareSerial(RX_MP3_PIN, TX_MP3_PIN);
011
DFRobotDFPlayerMini myDFPlayer;
012
013
LCD_1602_RUS lcd(0x27, 16, 2);
//Подключение экрана А4-SDA, А5-SCL, 0x27 или 0x3F
014
015
unsigned
long
currentTime;
016
unsigned
long
loopTime;
017
unsigned
long
ledTime;
018
019
int
j = 1;
020
int
files = 0;
021
int
files_tost = 0;
022
023
// Переменные для энкодера -----------
024
const
int
pin_A = 2;
025
const
int
pin_B = 3;
026
const
int
pin_SW = 4;
027
unsigned
char
encoder_A;
028
unsigned
char
encoder_B;
029
unsigned
char
encoder_A_prev = 0;
030
unsigned
char
encoder_sw_prew = 1;
031
032
const
byte
Optics[] = {0, 1, 2, 3, 6};
033
const
unsigned
int
Optics_porog[] = {1000, 1000, 1000, 1000, 1000};
034
const
int
PIN_SERVO = 9;
035
Servo servo;
036
037
//Позиция каждой рюмки
038
const
byte
Rumka_pos[] = {30, 60, 90, 120, 150};
039
040
byte
Menu = 0;
// Главное меню
041
byte
Nastr = 0;
// Меню режимов
042
byte
Rezim = 0;
// Меню настроек
043
byte
MenuFlag = 0;
// Здесь храниться уровень меню. 0 находимся в Главном меню. 1 Вошли в меню Режимы и т.д.
044
byte
Drink = 10;
// По умолчанию в рюмку наливаем 10 мл.
045
046
const
byte
min_Drink = 5;
// Минимум в рюмку - 5 мл.
047
const
byte
max_Drink = 50;
// Максимум в рюмку - 50 мл.
048
049
const
unsigned
int
min_Drink_delay = 300;
050
const
unsigned
int
max_Drink_delay = 5000;
051
052
byte
DrinkCount = 1;
//По умолчанию, для ручного режима - 1 рюмка
053
const
byte
max_DrinkCount = 5;
//Максимальное кол-во рюмок - 5
054
055
const
byte
PIN_PUMP = 12;
056
057
const
int
PIN_LED = 5;
// Сюда подключаются светодиоды
058
const
int
LED_COUNT = max_DrinkCount;
059
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, PIN_LED, NEO_GRB + NEO_KHZ800);
060
061
int16_t address = 0;
// Переменная для хранения адреса памяти
062
int16_t bright = 0;
// Яркость led, считается из памяти
063
int16_t servo_speed = 0;
// Скорость серво
064
int16_t vol_tost = 0;
// Громкость общая
065
int16_t vol_muz = 0;
// Громкость музыки
066
067
// Функции
068
069
void
pump_enable() {
070
digitalWrite(PIN_PUMP, 1);
//вкл реле
071
}
072
073
void
pump_disable() {
074
digitalWrite(PIN_PUMP, 0);
//выкл реле
075
}
076
077
void
pump_timer(
byte
Drink) {
078
digitalWrite(PIN_PUMP, 1);
//вкл реле
079
delay(map(Drink, min_Drink, max_Drink, min_Drink_delay, max_Drink_delay));
080
digitalWrite(PIN_PUMP, 0);
//выкл реле
081
}
082
083
void
oled_menu(
byte
Menu) {
084
lcd.clear();
085
lcd.setCursor(0, 0);
086
lcd.print(F(
" СОКОНАЛИВАТОР+ "
));
087
lcd.setCursor(0, 1);
088
lcd.print(F(
">"
));
089
lcd.setCursor(15, 1);
090
lcd.print(F(
"<"
));
091
switch
(Menu) {
092
case
0:
093
lcd.setCursor(1, 1);
094
lcd.print(F(
"РЕЖИМЫ РАЗЛИВА"
));
095
break
;
096
case
1:
097
lcd.setCursor(3, 1);
098
lcd.print(F(
"НАСТРОЙКИ+"
));
099
break
;
100
case
2:
101
lcd.setCursor(5, 1);
102
lcd.print(F(
"МУЗЫКА"
));
103
break
;
104
}
105
}
106
107
void
oled_nastr(
byte
Nastr) {
108
lcd.clear();
109
lcd.setCursor(0, 0);
110
lcd.print(F(
" СОКОНАЛИВАТОР+ "
));
111
lcd.setCursor(0, 1);
112
lcd.print(F(
">"
));
113
lcd.setCursor(15, 1);
114
lcd.print(F(
"<"
));
115
switch
(Nastr) {
116
case
0:
117
lcd.setCursor(4, 1);
118
lcd.print(F(
"ПРОМЫВКА"
));
119
break
;
120
case
1:
121
lcd.setCursor(2, 1);
122
lcd.print(F(
"ЯРКОСТЬ LEDS"
));
123
break
;
124
case
2:
125
lcd.setCursor(1, 1);
126
lcd.print(F(
"СКОРОСТЬ СЕРВО"
));
127
break
;
128
case
3:
129
lcd.setCursor(1, 1);
130
lcd.print(F(
"ОБЩ. ГРОМКОСТЬ"
));
131
break
;
132
case
4:
133
lcd.setCursor(2, 1);
134
lcd.print(F(
"ГРОМК. АУДИО"
));
135
break
;
136
}
137
}
138
139
void
oled_rezim(
byte
Rezim) {
140
lcd.clear();
141
lcd.setCursor(0, 0);
142
lcd.print(F(
" СОКОНАЛИВАТОР+ "
));
143
lcd.setCursor(0, 1);
144
lcd.print(F(
">"
));
145
lcd.setCursor(15, 1);
146
lcd.print(F(
"<"
));
147
switch
(Rezim) {
148
case
0:
149
lcd.setCursor(6, 1);
150
lcd.print(F(
"АВТО"
));
151
break
;
152
case
1:
153
lcd.setCursor(2, 1);
154
lcd.print(F(
"РУЧНОЙ РЕЖИМ"
));
155
break
;
156
case
2:
157
lcd.setCursor(0, 1);
158
lcd.print(F(
" МИНУС ОДИН "
));
159
break
;
160
case
3:
161
lcd.setCursor(5, 1);
162
lcd.print(F(
"ГОРКИ"
));
163
break
;
164
case
4:
165
lcd.setCursor(2, 1);
166
lcd.print(F(
" ОДИН ИЗ ПЯТИ "
));
167
break
;
168
}
169
}
170
171
// выводит строчку по чуть чуть, в самый раз и тд. Передается номер строки, на которой выводить сообщение
172
void
DrinkInfo(
byte
pos) {
173
Serial
.println(F(
"INFO_DRINK"
));
174
175
lcd.setCursor(0, 1);
176
if
(Drink < 15) {
177
lcd.print(F(
" НЕ МАЛО? "
));
178
}
else
if
(Drink < 28) {
179
lcd.print(F(
" ПО ЧУТЬ - ЧУТЬ "
));
180
}
else
if
(Drink < 38) {
181
lcd.print(F(
" В САМЫЙ РАЗ "
));
182
}
else
if
(Drink < 48) {
183
lcd.print(F(
" ПО ПОЛНОЙ "
));
184
}
else
{
185
lcd.print(F(
" ДО КРАЕВ "
));
186
}
187
}
188
189
// Меню Авто режим
190
void
oled_auto(
int
Drink) {
191
Serial
.println(F(
"MENU_AUTO"
));
192
lcd.clear();
193
lcd.setCursor(0, 0);
194
lcd.print(F(
" HАЛИТЬ:"
));
195
lcd.setCursor(9, 0);
196
lcd.print(Drink);
197
Serial
.println(Drink);
198
lcd.setCursor(12, 0);
199
lcd.print(F(
"МЛ?"
));
200
DrinkInfo(57);
201
}
202
203
// Меню Ручной режим
204
void
oled_manual(
int
DrinkCount,
int
Drink) {
205
Serial
.println(F(
"MENU_RUCHN"
));
206
lcd.clear();
207
lcd.setCursor(0, 0);
208
lcd.print(F(
" HАЛИТЬ:"
));
209
lcd.setCursor(9, 0);
210
lcd.print(Drink);
211
lcd.setCursor(12, 0);
212
lcd.print(F(
"МЛ?"
));
213
Serial
.println(Drink);
214
lcd.setCursor(0, 1);
215
lcd.print(F(
" В СТ."
));
216
lcd.setCursor(5, 1);
217
lcd.print(DrinkCount);
218
//Serial.println(DrinkCount);
219
//if (DrinkCount == 1) {
220
// lcd.setCursor(10, 1);
221
// lcd.print(F("КУ "));
222
//} else if (DrinkCount <= 4 ) {
223
// lcd.setCursor(10, 1);
224
// lcd.print(F("КИ "));
225
//} else {
226
// lcd.setCursor(10, 1);
227
// lcd.print(F("ОК "));
228
//}
229
}
230
231
// Подсветка рюмок в ручном режимме
232
/* void podsvetka () {
233
if (DrinkCount == 1) {
234
strip.setPixelColor(0, strip.Color(0, 0, 255)); // Подствечиваем синим 1-ю рюмку
235
} else if (DrinkCount == 2 ) {
236
strip.setPixelColor(0, strip.Color(0, 0, 255)); // Подствечиваем синим 1-ю рюмку
237
strip.setPixelColor(1, strip.Color(0, 0, 255)); // Подствечиваем синим 2-ю рюмку
238
} else if (DrinkCount == 3 ) {
239
strip.setPixelColor(0, strip.Color(0, 0, 255)); // Подствечиваем синим 1-ю рюмку
240
strip.setPixelColor(1, strip.Color(0, 0, 255)); // Подствечиваем синим 2-ю рюмку
241
strip.setPixelColor(2, strip.Color(0, 0, 255)); // Подствечиваем синим 3-ю рюмку
242
} else if (DrinkCount == 4 ) {
243
strip.setPixelColor(0, strip.Color(0, 0, 255)); // Подствечиваем синим 1-ю рюмку
244
strip.setPixelColor(1, strip.Color(0, 0, 255)); // Подствечиваем синим 2-ю рюмку
245
strip.setPixelColor(2, strip.Color(0, 0, 255)); // Подствечиваем синим 3-ю рюмку
246
strip.setPixelColor(3, strip.Color(0, 0, 255)); // Подствечиваем синим 4-ю рюмку
247
} else {
248
strip.setPixelColor(0, strip.Color(0, 0, 255)); // Подствечиваем синим 1-ю рюмку
249
strip.setPixelColor(1, strip.Color(0, 0, 255)); // Подствечиваем синим 2-ю рюмку
250
strip.setPixelColor(2, strip.Color(0, 0, 255)); // Подствечиваем синим 3-ю рюмку
251
strip.setPixelColor(3, strip.Color(0, 0, 255)); // Подствечиваем синим 4-ю рюмку
252
strip.setPixelColor(4, strip.Color(0, 0, 255)); // Подствечиваем синим 5-ю рюмку
253
}
254
strip.show();
255
delay(500);
256
} */
257
258
// Меню яркость
259
void
oled_led(
int
bright) {
260
lcd.clear();
261
lcd.setCursor(0, 0);
262
lcd.print(F(
"ВЫБЕРИ ЯРКОСТЬ"
));
263
lcd.setCursor(0, 1);
264
lcd.print(F(
"ЗНАЧЕНИЕ:"
));
265
lcd.setCursor(11, 1);
266
lcd.print(bright);
267
}
268
269
// Меню серво
270
void
oled_servo(
int
servo_speed) {
271
lcd.clear();
272
lcd.setCursor(0, 0);
273
lcd.print(F(
"ВЫБЕРИ СКОРОСТЬ"
));
274
lcd.setCursor(0, 1);
275
lcd.print(F(
"ЗНАЧЕНИЕ:"
));
276
lcd.setCursor(11, 1);
277
lcd.print(servo_speed);
278
}
279
280
// Меню громкости
281
void
oled_voltost(
int
vol_tost) {
282
lcd.clear();
283
lcd.setCursor(0, 0);
284
lcd.print(F(
"ВЫБЕРИ ГРОМКОСТЬ"
));
285
lcd.setCursor(0, 1);
286
lcd.print(F(
"ЗНАЧЕНИЕ:"
));
287
lcd.setCursor(11, 1);
288
lcd.print(vol_tost);
289
}
290
291
// Меню громкости музыки
292
void
oled_volmuz(
int
vol_muz) {
293
lcd.clear();
294
lcd.setCursor(0, 0);
295
lcd.print(F(
"ВЫБЕРИ ГРОМКОСТЬ"
));
296
lcd.setCursor(0, 1);
297
lcd.print(F(
"ЗНАЧЕНИЕ:"
));
298
lcd.setCursor(11, 1);
299
lcd.print(vol_muz);
300
}
301
302
// Меню Казино
303
void
oled_cazino(
int
DrinkCount,
int
Drink) {
304
lcd.clear();
305
lcd.setCursor(0, 0);
306
lcd.print(F(
"СТАВЬ СТАКАНЧИКИ"
));
307
lcd.setCursor(0, 1);
308
lcd.print(F(
" И НАЖМИ <ОК> "
));
309
}
310
311
// Меню Музыка
312
void
oled_muzon(
int
DrinkCount,
int
Drink) {
313
lcd.clear();
314
lcd.setCursor(4, 0);
315
lcd.print(F(
"СЛУШАЕМ"
));
316
lcd.setCursor(4, 1);
317
lcd.print(F(
"МУЗЫКУ!"
));
318
}
319
320
// Меню налива
321
void
oled_naliv(
int
MenuFlag,
int
Drink,
int
DrinkCount) {
322
lcd.clear();
323
lcd.setCursor(0, 0);
324
lcd.print(F(
" НАЛИВАЮ"
));
325
lcd.setCursor(10, 0);
326
lcd.print(Drink);
327
lcd.setCursor(13, 0);
328
lcd.print(F(
"МЛ"
));
329
DrinkInfo(57);
330
}
331
332
// Меню налито
333
void
oled_nalito2(
int
MenuFlag,
int
Nalito,
int
Drink) {
334
Serial
.println(F(
"NALITO"
));
335
lcd.clear();
336
lcd.setCursor(0, 0);
337
lcd.print(F(
" HАЛИТО"
));
338
lcd.setCursor(9, 0);
339
lcd.print(Drink);
340
Serial
.println(Drink);
341
lcd.setCursor(12 , 0);
342
lcd.print(F(
"МЛ"
));
343
lcd.setCursor(0, 1);
344
lcd.print(F(
" В"
));
345
lcd.setCursor(5, 1);
346
lcd.print(Nalito);
347
lcd.setCursor(7, 1);
348
lcd.print(F(
"СТ."
));
349
//Serial.println(Nalito);
350
//if (Nalito == 1) {
351
// lcd.setCursor(10, 1);
352
// lcd.print(F("КУ "));
353
//} else if (Nalito <= 4 ) {
354
// lcd.setCursor(10, 1);
355
// lcd.print(F("КИ "));
356
//} else {
357
// lcd.setCursor(10, 1);
358
// lcd.print(F("ОК "));
359
//}
360
}
361
362
// Тосты
363
void
Tost() {
364
randomSeed(analogRead(7));
365
lcd.clear();
366
lcd.setCursor(0, 1);
367
lcd.print(F(
"ЗАБЕРИ СТАКАНЧИК"
));
368
delay (2000);
369
myDFPlayer.volume(vol_tost);
//Громкость
370
delay (100);
371
myDFPlayer.playFolder (2, random (files_tost + 1));
//воспроизводить определенный mp3 в папке 02
372
}
373
374
375
void
ServoNaliv(
byte
rumka) {
376
servo.attach(PIN_SERVO);
377
for
(
int
pos = servo.read(); pos <= Rumka_pos[rumka]; pos += 1) {
378
// с шагом в 1 градус
379
servo.write(pos);
// даем серве команду повернуться в положение, которое задается в переменной 'pos'
380
delay(servo_speed);
// ждем , пока ротор сервы выйдет в заданную позицию
381
}
382
servo.detach();
383
}
384
385
386
void
ServoParking () {
387
//Serial.println(servo.read());
388
servo.attach(PIN_SERVO);
389
for
(
int
pos = servo.read(); pos >= 0; pos -= 1) {
390
// с шагом в 1 градус
391
servo.write(pos);
// даем серве команду повернуться в положение, которое задается в переменной 'pos'
392
delay(servo_speed);
// ждем , пока ротор сервы выйдет в заданную позицию
393
}
394
servo.detach();
395
}
396
397
398
void
CvetoMuzik() {
399
for
(
long
firstPixelHue = 0; firstPixelHue < 5 * 65536; firstPixelHue += 768) {
400
for
(
int
i = 0; i < strip.numPixels(); i++) {
// For each pixel in strip...
401
int
pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
402
strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
403
}
404
strip.show();
405
delay(10);
406
}
407
}
408
409
410
void
setup
() {
411
randomSeed(analogRead(7));
//инициализация функции рандом по пину А7 для исключения повторения последовательности значений при включении
412
413
mySoftwareSerial.begin(9600);
414
Serial
.begin(9600);
415
delay(1000);
416
if
(!myDFPlayer.begin(mySoftwareSerial)) {
417
Serial
.println(
"Unable to begin:"
);
418
Serial
.println(
"1.Please recheck the connection!"
);
419
Serial
.println(
"2.Please insert the SD card!"
);
420
while
(
true
);
421
}
422
myDFPlayer.setTimeOut(300);
423
myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
424
files = myDFPlayer.readFileCountsInFolder(3);
// Считаем сколько треков в папке с музыкой 03
425
files_tost = myDFPlayer.readFileCountsInFolder(2);
// Считаем сколько треков в папке с тостами 02
426
427
address = 30;
428
EEPROM.
get
(address, bright);
429
if
( bright < 0 || bright > 255) {
430
bright = 100;
431
}
432
433
address = 20;
//ячейка памяти
434
EEPROM.
get
(address, servo_speed);
// считываем из памяти скорость серво
435
if
( servo_speed < 5 || servo_speed > 30) {
436
servo_speed = 10;
437
}
438
439
address = 40;
//ячейка памяти
440
EEPROM.
get
(address, vol_tost);
// считываем из памяти громкость
441
if
( vol_tost < 2 || vol_tost > 30) {
442
vol_tost = 10;
443
}
444
445
address = 50;
//ячейка памяти
446
EEPROM.
get
(address, vol_muz);
// считываем из памяти громкость музыки
447
if
( vol_muz < 2 || vol_muz > 30) {
448
vol_muz = 10;
449
}
450
451
myDFPlayer.volume(vol_tost);
//Громкость
452
delay (100);
453
myDFPlayer.playFolder(1, 1);
//Воспроизведение первого mp3
454
455
lcd.init();
// инициализация дисплея
456
lcd.backlight();
457
lcd.clear();
458
lcd.setCursor(0, 0);
459
lcd.print(F(
" НУ ЧТО "
));
460
lcd.setCursor(0, 1);
461
lcd.print(F(
"НА-ЧАА-ЛИИ-ИИИИИ"
));
462
delay (2000);
463
464
pinMode(pin_SW, INPUT);
// устанавливаем pin pin_SW как вход
465
digitalWrite(pin_SW, HIGH);
// Поддяжка вывода к 1
466
pinMode(pin_A, INPUT);
467
pinMode(pin_B, INPUT);
468
pinMode(PIN_PUMP, OUTPUT);
469
digitalWrite(PIN_PUMP, 0);
470
currentTime = millis();
471
loopTime = currentTime;
472
473
474
475
strip.begin();
476
strip.setBrightness(bright);
477
CvetoMuzik();
478
479
oled_menu(0);
480
for
(
int
i = 0; i < 5; i++) {
481
pinMode(Optics[i], INPUT);
482
}
483
ServoParking();
484
}
485
486
void
loop
() {
487
currentTime = millis();
488
if
(currentTime >= (loopTime + 5)) {
// проверяем каждые 5мс
489
encoder_A = digitalRead(pin_A);
// считываем состояние выхода А энкодера
490
encoder_B = digitalRead(pin_B);
// считываем состояние выхода B энкодера
491
if
((!encoder_A) && (encoder_A_prev)) {
// если состояние изменилось с положительного к нулю
492
493
//Вращение влево
494
if
(encoder_B) {
495
if
(MenuFlag == 0) {
496
(Menu <= 0 ) ? Menu = 2 : Menu--;
497
oled_menu(Menu);
498
}
else
if
(MenuFlag == 1) {
499
(Rezim <= 0 ) ? Rezim = 4 : Rezim--;
500
oled_rezim(Rezim);
501
}
else
if
(MenuFlag == 2) {
502
(Nastr <= 0 ) ? Nastr = 4 : Nastr--;
503
oled_nastr(Nastr);
504
}
else
if
(MenuFlag == 4) {
505
(Drink <= min_Drink ) ? Drink = max_Drink : Drink -= 5;
506
oled_auto(Drink);
507
}
else
if
(MenuFlag == 5) {
508
(DrinkCount >= max_DrinkCount ) ? DrinkCount = 1 : DrinkCount++;
509
oled_manual(DrinkCount, Drink);
510
//podsvetka();
511
}
else
if
(MenuFlag == 9) {
512
bright -= 5;
513
bright = constrain(bright, 0, 254);
514
oled_led(bright);
515
strip.setBrightness(bright);
516
strip.show();
517
delay (100);
518
}
else
if
(MenuFlag == 10) {
519
servo_speed -= 5;
520
servo_speed = constrain(servo_speed, 5, 30);
521
oled_servo(servo_speed);
522
delay (100);
523
524
}
else
if
(MenuFlag == 11) {
525
vol_tost -= 2;
526
vol_tost = constrain(vol_tost, 2, 30);
527
oled_voltost(vol_tost);
528
delay (100);
529
}
else
if
(MenuFlag == 12) {
530
vol_muz -= 2;
531
vol_muz = constrain(vol_muz, 2, 30);
532
oled_volmuz(vol_muz);
533
delay (100);
534
535
}
else
if
(MenuFlag == 3) {
536
j++;
537
if
(j > files)
538
j = 1;
539
myDFPlayer.playFolder (3, j);
540
oled_muzon(DrinkCount, Drink);
541
}
542
543
//Вращение вправо
544
}
else
{
545
if
(MenuFlag == 0) {
546
(Menu >= 2 ) ? Menu = 0 : Menu++;
547
oled_menu(Menu);
548
}
else
if
(MenuFlag == 1) {
549
(Rezim >= 4 ) ? Rezim = 0 : Rezim++;
//
550
oled_rezim(Rezim);
551
}
else
if
(MenuFlag == 2) {
552
(Nastr >= 4 ) ? Nastr = 0 : Nastr++;
//
553
oled_nastr(Nastr);
554
}
else
if
(MenuFlag == 4) {
555
(Drink >= max_Drink ) ? Drink = min_Drink : Drink += 5;
// Увеличиваем кол-во милилитров в рюмку
556
oled_auto(Drink);
557
}
else
if
(MenuFlag == 5) {
558
(Drink >= max_Drink ) ? Drink = min_Drink : Drink += 5;
559
oled_manual(DrinkCount, Drink);
560
}
else
if
(MenuFlag == 9) {
561
bright += 5;
562
bright = constrain(bright, 0, 254);
563
oled_led(bright);
564
strip.setBrightness(bright);
565
strip.show();
566
delay (100);
567
}
else
if
(MenuFlag == 10) {
568
servo_speed += 5;
569
servo_speed = constrain(servo_speed, 5, 30);
570
oled_servo(servo_speed);
571
delay (100);
572
573
}
else
if
(MenuFlag == 11) {
574
vol_tost += 2;
575
vol_tost = constrain(vol_tost, 2, 30);
576
oled_voltost(vol_tost);
577
delay (100);
578
}
else
if
(MenuFlag == 12) {
579
vol_muz += 2;
580
vol_muz = constrain(vol_muz, 2, 30);
581
oled_volmuz(vol_muz);
582
delay (100);
583
584
}
else
if
(MenuFlag == 3) {
585
j++;
586
if
(j > files)
587
j = 1;
588
myDFPlayer.playFolder (3, j);
589
oled_muzon(DrinkCount, Drink);
590
}
591
}
592
}
593
594
// Режим промывки
595
encoder_A_prev = encoder_A;
// сохраняем значение А для следующего цикла
596
int
encoder_sw = digitalRead(pin_SW);
597
if
(encoder_sw == 0 && encoder_sw != encoder_sw_prew) {
598
int
pause_sw = 0;
599
boolean promivka =
false
;
600
while
(digitalRead(pin_SW) == 0) {
601
delay(100);
602
pause_sw++;
603
if
(pause_sw > 20 && Nastr != 0 )
break
;
604
if
(pause_sw > 20 && MenuFlag == 2 && Nastr == 0 && promivka ==
false
) {
605
promivka =
true
;
606
pump_enable();
// Включаем насос
607
delay (100);
608
myDFPlayer.volume(vol_tost);
609
delay (100);
610
myDFPlayer.playFolder (1, 100);
611
delay (100);
612
lcd.clear();
613
lcd.setCursor(0, 0);
614
lcd.print(F(
"П Р О М Ы В К А"
));
615
lcd.setCursor(2, 1);
616
lcd.print(
"<><><><><><>"
);
617
}
618
}
619
//После отпускания кнопки, обрабатываем
620
if
(promivka ==
true
) {
//Отпустили кнопку.
621
promivka =
false
;
622
pump_disable() ;
//Выключаем насос
623
oled_nastr(0);
624
}
else
{
625
626
//Обработка всех нажатий кнопки
627
if
(Menu == 0 && MenuFlag == 0 && pause_sw < 10) {
628
MenuFlag = 1;
629
oled_rezim(Rezim);
630
}
else
if
(Rezim == 0 && MenuFlag == 1 && pause_sw < 10) {
631
MenuFlag = 4;
632
oled_auto(Drink);
633
}
else
if
(MenuFlag == 4 && pause_sw > 20) {
634
MenuFlag = 1;
635
oled_rezim(0);
636
}
else
if
(MenuFlag == 1 && pause_sw > 20) {
637
MenuFlag = 0;
638
oled_menu(0);
639
}
640
641
//Начинается автоматический разлив
642
else
if
(MenuFlag == 4 ) {
643
Serial
.println(
"AUTO"
);
//Начало автоматического разлива
644
oled_naliv(MenuFlag, Drink, DrinkCount);
645
byte
drink_count = 0;
646
for
(
int
y = 0; y < max_DrinkCount; y++) {
647
if
(analogRead(Optics[y]) > Optics_porog[y] ) {
648
strip.setPixelColor(y, strip.Color(255, 0, 0));
// Подствечиваем красным цветом
649
strip.show();
650
ServoNaliv(y);
651
delay (300);
652
pump_timer(Drink);
// Налив.
653
delay(1000);
654
strip.setPixelColor(y, strip.Color(0, 255, 0));
655
strip.show();
656
drink_count++;
657
delay(1000);
658
}
659
}
660
if
(drink_count > 0) {
661
oled_nalito(MenuFlag, drink_count, Drink );
662
delay(2000);
663
ServoParking();
664
Tost();
665
CvetoMuzik();
666
oled_auto(Drink);
667
}
else
{
668
lcd.clear();
669
lcd.setCursor(0, 1);
670
lcd.print(F(
"НЕТ СТАКАНЧИКОВ!"
));
671
myDFPlayer.volume(vol_tost);
672
delay (100);
673
myDFPlayer.playFolder (1, 88);
674
delay(2000);
675
oled_auto(Drink);
676
}
677
// Нажатие меню ручное
678
}
else
if
(Rezim == 1 && MenuFlag == 1 && pause_sw < 10) {
679
MenuFlag = 5;
680
oled_manual(DrinkCount, Drink);
681
}
else
if
(MenuFlag == 5 && pause_sw > 20) {
682
MenuFlag = 1;
683
oled_rezim(1);
684
}
685
686
//Начинается ручной разлив
687
else
if
(MenuFlag == 5 ) {
688
Serial
.println(
"RUCHNOY"
+ String(DrinkCount));
689
oled_naliv(MenuFlag, Drink, DrinkCount);
// Выводим на экран наливаем ...
690
for
(
int
y = 0; y < DrinkCount; y++) {
691
strip.setPixelColor(y, strip.Color(255, 0, 0));
// Подствечиваем красным цветом
692
strip.show();
693
ServoNaliv(y);
694
delay (300);
695
pump_timer(Drink);
// Налив.
696
delay(1000);
697
strip.setPixelColor(y, strip.Color(0, 255, 0));
698
strip.show();
699
delay(1000);
700
}
701
oled_nalito(MenuFlag, DrinkCount, Drink );
702
delay(2000);
703
ServoParking();
704
Tost();
705
CvetoMuzik();
706
oled_manual(DrinkCount, Drink);
707
}
708
709
//нажатие меню яркости
710
else
if
(Menu == 1 && MenuFlag == 0 && pause_sw < 10) {
711
MenuFlag = 2;
712
oled_nastr(Nastr);
713
}
else
if
(Nastr == 1 && MenuFlag == 2 && pause_sw < 10) {
714
MenuFlag = 9;
715
oled_led(bright);
716
}
else
if
(MenuFlag == 9 && pause_sw > 20) {
717
MenuFlag = 2;
718
oled_nastr(1);
719
address = 30;
720
EEPROM.put(address, bright);
721
}
else
if
(MenuFlag == 2 && pause_sw > 20) {
722
MenuFlag = 0;
723
oled_menu(1);
724
725
}
else
if
(MenuFlag == 9 ) {
726
CvetoMuzik();
727
}
728
729
// нажатие меню скорости серво
730
else
if
(Menu == 1 && MenuFlag == 0 && pause_sw < 10) {
731
MenuFlag = 2;
732
oled_nastr(Nastr);
733
}
else
if
(Nastr == 2 && MenuFlag == 2 && pause_sw < 10) {
734
MenuFlag = 10;
735
oled_servo(servo_speed);
736
}
else
if
(MenuFlag == 10 && pause_sw > 20) {
737
MenuFlag = 2;
738
oled_nastr(2);
739
address = 20;
740
EEPROM.put(address, servo_speed);
741
}
else
if
(MenuFlag == 10) {
742
743
// после нажатия энкодера запускаем серву для проверки скорости
744
servo.attach(PIN_SERVO);
745
for
(
int
pos = servo.read(); pos <= 180; pos += 1) {
746
servo.write(pos);
747
delay(servo_speed);
748
}
749
for
(
int
pos = servo.read(); pos >= 0; pos -= 1) {
750
751
servo.write(pos);
752
delay(servo_speed);
753
}
754
}
755
756
// нажатие меню громкости
757
else
if
(Menu == 1 && MenuFlag == 0 && pause_sw < 10) {
758
MenuFlag = 2;
759
oled_nastr(Nastr);
760
}
else
if
(Nastr == 3 && MenuFlag == 2 && pause_sw < 10) {
761
MenuFlag = 11;
762
oled_voltost(vol_tost);
763
}
else
if
(MenuFlag == 11 && pause_sw > 20) {
764
MenuFlag = 2;
765
oled_nastr(3);
766
address = 40;
767
EEPROM.put(address, vol_tost);
768
}
else
if
(MenuFlag == 11) {
769
770
myDFPlayer.volume(vol_tost);
771
delay (100);
772
myDFPlayer.playFolder(1, 1);
773
}
774
775
776
// нажатие меню громкости музыки
777
else
if
(Menu == 1 && MenuFlag == 0 && pause_sw < 10) {
778
MenuFlag = 2;
779
oled_nastr(Nastr);
780
}
else
if
(Nastr == 4 && MenuFlag == 2 && pause_sw < 10) {
781
MenuFlag = 12;
782
oled_volmuz(vol_muz);
783
}
else
if
(MenuFlag == 12 && pause_sw > 20) {
784
MenuFlag = 2;
785
oled_nastr(4);
786
address = 50;
787
EEPROM.put(address, vol_muz);
788
}
else
if
(MenuFlag == 12) {
789
790
// после нажатия энкодера запускаем музыку
791
myDFPlayer.volume(vol_muz);
792
delay (100);
793
myDFPlayer.playFolder(1, 1);
794
}
795
796
// Нажатие меню СИНИЙ БАРМЕН наливатет в рюмки случайный объем
797
else
if
(Rezim == 3 && MenuFlag == 1 && pause_sw < 10) {
798
MenuFlag = 7;
799
oled_cazino(DrinkCount, Drink);
800
}
else
if
(MenuFlag == 7 && pause_sw > 20) {
801
MenuFlag = 1;
802
oled_rezim(3);
803
}
else
if
(MenuFlag == 7 ) {
//Начинается рулетка
804
myDFPlayer.volume(vol_tost);
//Громкость
805
delay (100);
806
myDFPlayer.playFolder (1, 105);
// Мелоди рулетки
807
delay (1000);
808
CvetoMuzik();
809
delay (2000);
810
for
(
int
y = 0; y <= 4; y++) {
811
strip.setPixelColor(y, strip.Color(255, 0, 0));
// Подствечиваем красным цветом
812
strip.show();
813
ServoNaliv(y);
814
delay (300);
815
pump_timer(random(min_Drink, max_Drink));
// Налив
816
delay(1000);
817
strip.setPixelColor(y, strip.Color(0, 255, 0));
818
strip.show();
819
}
820
ServoParking();
821
myDFPlayer.playFolder (1, 102);
822
delay (400);
823
CvetoMuzik();
824
Tost();
825
oled_cazino(DrinkCount, Drink);
826
}
827
828
829
// Нажатие меню музыка
830
else
if
(Menu == 2 && MenuFlag == 0 && pause_sw < 10) {
// Вошли в музыку
831
MenuFlag = 3;
832
myDFPlayer.volume(vol_muz);
833
delay (100);
834
myDFPlayer.loopFolder(3);
835
oled_muzon(DrinkCount, Drink);
836
}
else
if
(MenuFlag == 3 && pause_sw > 20) {
837
MenuFlag = 0;
838
oled_menu(2);
839
}
else
if
(MenuFlag == 3 && pause_sw < 10) {
840
myDFPlayer.pause();
841
MenuFlag = 0;
842
oled_menu(2);
843
}
844
845
846
// Нажатие меню КАЗИНО наливает только в одну рюмку случайно
847
else
if
(Rezim == 4 && MenuFlag == 1 && pause_sw < 10) {
848
MenuFlag = 8;
849
oled_cazino(DrinkCount, Drink);
850
}
else
if
(MenuFlag == 8 && pause_sw > 20) {
851
MenuFlag = 1;
852
oled_rezim(4);
853
}
else
if
(MenuFlag == 8 ) {
854
855
randomSeed(analogRead(7));
856
myDFPlayer.volume(vol_tost);
857
delay (100);
858
myDFPlayer.playFolder (1, 105);
859
delay (1000);
860
CvetoMuzik();
861
delay (2000);
862
for
(
int
y = 0; y <= 4; y++) {
863
strip.setPixelColor(y, strip.Color(255, 0, 0));
864
strip.show();
865
}
866
servo.attach(PIN_SERVO);
// имитация рулетки сервой
867
for
(
int
pos = servo.read(); pos <= 180; pos += 1) {
868
// с шагом в 1 градус
869
servo.write(pos);
// даем серве команду повернуться в положение, которое задается в переменной 'pos'
870
delay(servo_speed);
// ждем , пока ротор сервы выйдет в заданную позицию
871
}
872
for
(
int
pos = servo.read(); pos >= 0; pos -= 1) {
873
// с шагом в 1 градус
874
servo.write(pos);
// даем серве команду повернуться в положение, которое задается в переменной 'pos'
875
delay(servo_speed);
// ждем , пока ротор сервы выйдет в заданную позицию
876
}
877
int
r = random(0, 5);
//выбор одной рюмки в которую нальёт
878
ServoNaliv(r);
// Перемещяемся к рюмке
879
strip.setPixelColor(r, strip.Color(0, 255, 0));
// Подствечиваем зеленым, налито, остальные красные
880
delay(1000);
881
strip.show();
882
pump_timer(Drink);
// Налив
883
servo.detach();
884
ServoParking();
885
myDFPlayer.volume(vol_tost);
//Громкость
886
delay (100);
887
myDFPlayer.playFolder (1, 102);
// Фанфары
888
delay (400);
889
CvetoMuzik();
890
Tost();
891
oled_cazino(DrinkCount, Drink);
892
}
893
894
// Нажатие меню НАША РУЛЕТКА, не наливаем в одну рюмку случайно
895
else
if
(Rezim == 2 && MenuFlag == 1 && pause_sw < 10) {
896
MenuFlag = 6;
897
oled_cazino(DrinkCount, Drink);
898
}
else
if
(MenuFlag == 6 && pause_sw > 20) {
899
MenuFlag = 1;
900
oled_rezim(2);
901
}
else
if
(MenuFlag == 6 ) {
902
903
randomSeed(analogRead(7));
904
myDFPlayer.volume(vol_tost);
//Громкость
905
delay (100);
906
myDFPlayer.playFolder (1, 105);
//Мелодия рулетки
907
delay (1000);
908
CvetoMuzik();
909
delay (2000);
910
for
(
int
y = 0; y <= 4; y++) {
911
strip.setPixelColor(y, strip.Color(255, 0, 0));
912
strip.show();
913
}
914
servo.attach(PIN_SERVO);
// имитация рулетки сервой
915
for
(
int
pos = servo.read(); pos <= 180; pos += 1) {
916
// с шагом в 1 градус
917
servo.write(pos);
// даем серве команду повернуться в положение, которое задается в переменной 'pos'
918
delay(servo_speed);
// ждем , пока ротор сервы выйдет в заданную позицию
919
}
920
for
(
int
pos = servo.read(); pos >= 0; pos -= 1) {
921
// с шагом в 1 градус
922
servo.write(pos);
// даем серве команду повернуться в положение, которое задается в переменной 'pos'
923
delay(servo_speed);
// ждем , пока ротор сервы выйдет в заданную позицию
924
}
925
int
r = random(0, 5);
//выбор одной рюмки в которую НЕ нальёт
926
for
(
int
y = 0; y < 5; y++) {
927
if
(y != r) {
928
strip.setPixelColor(y, strip.Color(255, 0, 0));
// Подствечиваем красным цветом
929
strip.show();
930
ServoNaliv(y);
// Перемещяемся к рюмке
931
delay (300);
//Задержка перед налитием после поворота к рюмке
932
pump_timer(Drink);
// Налив.
933
delay(1000);
934
strip.setPixelColor(y, strip.Color(0, 255, 0));
// Подствечиваем зеленым , налито.
935
strip.show();
936
delay(500);
937
}
938
else
{
939
(y = r);
940
}
941
}
942
servo.detach();
943
ServoParking();
944
myDFPlayer.volume(vol_tost);
//Громкость
945
delay (100);
946
myDFPlayer.playFolder (1, 102);
//Фанфары
947
delay (400);
948
CvetoMuzik();
949
Tost();
950
oled_cazino(DrinkCount, Drink);
951
}
952
}
953
}
954
955
// Работа оптодатчиков
956
if
(currentTime >= (ledTime + 300)) {
957
for
(
int
i = 0; i < max_DrinkCount; i++) {
958
int
val = analogRead(Optics[i]);
959
if
(val > Optics_porog[i]) {
960
strip.setPixelColor(i, strip.Color(0, 0, 255));
961
}
else
{
962
strip.setPixelColor(i, strip.Color(0, 0, 0));
963
}
964
}
965
strip.show();
966
ledTime = currentTime;
967
}
968
encoder_sw_prew = encoder_sw;
969
loopTime = currentTime;
970
}
971
}
Вместо ручного режима сделать режим, когда можно будет выбирать разный объем в разный стаканчик. Соответственно меню его тоже изменить. И прицепом, что-то не получилось в режиме один из пяти сделать зависимость налива от количества в=поставленных стаканчиков.
Ворота 103-я гвардейская ВДД. Ушел с ранением в две ноги. После в органах. Да и до сих пор числюсь на балансе организации :)))
Да, 103-я там от звонка до звонка чалилась, входили одними из первых (один Шигал сколько значил для всех остальных), а при выходе прикрывали выходящих и ушли последними - знаем мы такое соединение.
Напиши-ка мне вот сюда, сделаем твои хотелки. Не быстро, но шаг за шагом сделаем.
Привет всем. Ребята, никто не знает, случайно, куда Ворота делся? Переписывались еще в сентябре и бац, тишина... Всякое может быть. Ну месяц, два... При чем коллега по горам Афганистана... Никаких финансовых обязательств не было, просто общение... Жаль, не взял телефон для мессенджеров. Было бы проще.
Привет всем. Ребята, никто не знает, случайно, куда Ворота делся?
автокатастрофа... тогда же, в сентябре
грустно
Вот это да :((( Земля пухом...
Здоровья всем!