#include "leds.h"
#include "dc_motor.h"
#include "joystick.h"
#include "prepare_coffee.h"
#include "cart.h"
#include "vidacha_coffee.h"
// #include "display.h"
bool button_on = false;
int mode_coffee_prepare_and_vidacha_switch = 0;
int mode_main_switch = 0;
bool is_need_coffee_prepare = false;
bool is_need_coffee_okno_vidachi = false;
bool is_coffee_proccess_run = false;
bool is_need_snacks_prepare = false;
bool is_need_snacks_okno_vidachi = false;
bool is_snacks_proccess_run = false;
/*
Покупка состоит из (информация из планшета в вендинговый аппарат):
- Кофе/снек
- индекс продукта
Пример заказа #1:
- Кофе:
- {2, 5} // заказано 2 кофе под номером 2 и 5
- Снеки:
- {2, 3, 4} // заказаны снеки под номером 2, 3 и 4
int array[2][4] = {
{2, 5},
{2, 3, 4}
}
Пример заказа #2:
- Кофе:
- {} // заказано 0 кофе
- Снеки:
- {2, 4} // заказаны снеки под номером 2 и 4
int array[2][4] = {
{},
{2, 4}
}
*/
/*
Вариант 1.
Кофе - Латте.
Вариант 2.
Снек - Сникерс.
Вариант 3.
Кофе: // номер кофе в массиве {последовательность нажатий сервоприводов и время ожидания приготовления}
- Латте
- Горячий шоколад
Снеки: // номер ячейки
- Сникерс
- Алёнка шоколад
- Фундук "рога и копыта"
*/
unsigned int cart[MAX_CATEGORY_PRODUCTS][MAX_PRODUCTS] = { // Корзина
// {2, 5}, // кофе
// {2, 3, 4, 5} // снеки
};
void coffee_prepare_and_vidacha_switch() {
switch (mode_coffee_prepare_and_vidacha_switch) {
case 0: // Инициализация
Serial.print("Count coffee: ");
Serial.println(get_coffee_count());
Serial.print("Count snacks: ");
Serial.println(get_snacks_count());
is_need_coffee_prepare = true;
Serial.println("[1. PC_AND_VS] koffee_switch");
mode_coffee_prepare_and_vidacha_switch++;
break;
case 1:
coffee_prepare_switch();
if (not is_need_coffee_prepare) {
mode_coffee_prepare_and_vidacha_switch++;
}
break;
case 2: //
Serial.println("[2. PC_AND_VS] koffee_okno_vidachi_switch");
coffee_okno_vidachi_switch();
is_coffee_proccess_run = false;
mode_coffee_prepare_and_vidacha_switch = 0;
delay(200);
break;
default:
Serial.println("[ERROR. PC_AND_VS] Unknown case | main.ino");
delay(10000);
}
}
void snacks_prepare_and_vidacha_switch() {
is_snacks_proccess_run = false; // TODO
}
void setup() {
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(button_pin, INPUT_PULLUP);
Serial.begin(115200);
init_motor();
init_led();
init_steppers(); // Инициализация ШД
init_endstops();
init_servo();
// test_servo();
}
void loop() {
// joystick();
run_all_steppers();
led_flash();
// coffee_prepare_and_vidacha_switch();
switch (mode_main_switch) {
case 0: // Дисплей
Serial.println("[0. MAIN SWITCH] Display");
mode_main_switch++;
break;
case 1: // бработка корзины (заказа)
Serial.println("[1. MAIN SWITCH] Cart init");
init_cart();
// Заказ 1
cart[0][0] = 1; // кофе TODO cart.coffee cart.snacks
cart[0][1] = 2;
cart[1][0] = 3; // снеки
cart[1][1] = 4;
cart[1][2] = 5;
// Заказ 2
// cart[0][0] = 2;
// cart[1][0] = 3;
// Заказ 3
// cart[0][0] = 2;
// display_switch();
is_coffee_proccess_run = true;
is_snacks_proccess_run = true;
mode_main_switch++;
Serial.println("[2. MAIN SWITCH] Prepare and vidacha coffee and snacks");
break;
case 2: // Параллельное приготовление и выдача (кофе и снеков)
coffee_prepare_and_vidacha_switch();
// snacks_prepare_and_vidacha_switch();
if (not is_coffee_proccess_run and not is_snacks_proccess_run) {
mode_main_switch = 1;
}
break;
default:
Serial.println("[ERROR. MAIN SWITCH] Unknown case | main.ino");
delay(10000);
}
}
// TODO настроить скорости и ускорения при отправке домой и в остальных случаях
/*
План:
1. Сделать универсальную функцию движения сервоприводами в serv.ino которая
принимает номер серво и паузу
2. Вызвать функцию движения сервопривода
3. Возможно нужно условие перехода на кейс 7
4. Параллельная работа со снеками
5. Связать корзину покупок с последовательностью нажатий сервоприводов и работой dc-motor
6. Протестировать последовательность кейсов на разных заказах
*/
// ДЗ 10
// Сделать универсальную функцию движения сервоприводами в serv.ino которая
// принимает номер серво и паузу