#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
uint8_t user_Up[8] =
{
B00100,
B01110,
B11111,
B00100,
B00100,
B00100,
B00100,
B00100,
};
uint8_t user_Dn[8] =
{
B00100,
B00100,
B00100,
B00100,
B00100,
B11111,
B01110,
B00100,
};
const int NUM_ITEMS = 4; // number of items in the list and also the number of screenshots and screenshots with QR codes (other screens)
const int MAX_ITEM_LENGTH = 8; // maximum characters for the item name
char menu_items [NUM_ITEMS] [MAX_ITEM_LENGTH] = { // array with item names
{ "Labeling" },
{ "Offset " },
{ "Sensor " },
{ "Bottle " },
};
uint8_t menu_item = 0;
uint8_t menu = 1;
uint8_t smenu = 0;
unsigned long vivod = 0;
int vivodvalue = 1000;
bool obn = 1;
bool START = 0;
bool TEST = 0;
bool PAUSE = 0;
uint8_t shag = 0;
char buffer[6];
bool sensors[4];
bool offsetSens = 0;
bool Optsens = 0;
uint8_t label = 0;
int COUNTER = 0;
int OFFSET = 30;
int SENSOR = 50;
unsigned long SENSORMILL = 0;
unsigned long OFFSETMILL = 0;
float CORRECT = 9;
bool holl1 = 0, holl2 = 0;
#define BTN_PIN1 14
#define BTN_PIN2 15
#define BTN_PIN3 16
#define BTN_PIN4 17
#include "GyverButton.h"
GButton butt1(BTN_PIN1, LOW_PULL);
GButton butt2(BTN_PIN2, LOW_PULL);
GButton butt3(BTN_PIN3, LOW_PULL);
GButton butt4(BTN_PIN4, LOW_PULL);
#include <EEPROM.h>
byte prov = 4;
unsigned long zaderjkamillis = 0;
int zaderjka = 50;
unsigned long RunPause = 0;
int RunPauseItem = 400;
int TimeError = 1000;
void SensorRead() {
for (int i = 0; i < 4; i++)
sensors[0 + i] = digitalRead(6 - i);
}
void setup() {
Serial.begin(115200);
lcd.begin(16, 2);
lcd.createChar(5, user_Up);
lcd.createChar(6, user_Dn);
lcd.setCursor(0, 0);
lcd.print("Labeling Machine");
lcd.setCursor(0, 1);
lcd.print("www. .com");
delay(5000);
lcd.clear();
for (int i = 0; i < 4; i++)
pinMode(6 - i, INPUT);
pinMode(18, OUTPUT);
pinMode(19, OUTPUT);
digitalWrite(18, LOW);
digitalWrite(19, LOW);
if (EEPROM.read(250) == prov)
{
EEPROM.get(2, COUNTER);
EEPROM.get(4, OFFSET);
EEPROM.get(6, SENSOR);
}
else {
EEPROM.put(250, prov);
EEPROM.put(2, COUNTER);
EEPROM.put(4, OFFSET);
EEPROM.put(6, SENSOR);
}
}
void loop() {
butt1.tick();
butt2.tick();
butt3.tick();
butt4.tick();
SensorRead();
if (butt1.isClick() || (butt1.isHold() && millis() - zaderjkamillis >= zaderjka)) {
if (menu == 0 && butt2.isHold() != 1) {
if (menu_item > 0)
menu_item--;
}
if (menu == 2)
{
if (START == 0)
if (OFFSET < 200)
{
OFFSET++;
EEPROM.put(4, OFFSET);
}
}
else if (menu == 3)
{
if (START == 0)
if (SENSOR < 50) {
SENSOR++;
EEPROM.put(6, SENSOR);
}
}
obn = 1;
zaderjkamillis = millis();
Serial.println("Button 1");
}
if (butt2.isClick() || (butt2.isHold() && millis() - zaderjkamillis >= zaderjka)) {
if (menu == 0 && butt1.isHold() != 1) {
if (menu_item < NUM_ITEMS - 1)
menu_item++;
}
if (menu == 2) {
if (START == 0)
if (OFFSET > 1)
{
OFFSET--;
EEPROM.put(4, OFFSET);
}
}
else if (menu == 3)
{
if (START == 0)
if (SENSOR > 1)
{
SENSOR--;
EEPROM.put(6, SENSOR);
}
}
obn = 1;
zaderjkamillis = millis();
Serial.println("Button 2");
}
if (butt3.isClick())
{
if (menu == 1 && START == 0) {
COUNTER = 0;
EEPROM.put(2, COUNTER);
}
else if (menu > 1 && START == 0 && smenu == 0) {
menu = 0;
}
lcd.clear();
obn = 1;
Serial.println("Button 3");
}
if (butt4.isClick())
{
if (menu == 0) {
menu = menu_item + 1;
digitalWrite(18, LOW);
digitalWrite(19, LOW);
}
else if (menu == 1 && START == 0) {
if (smenu == 0)
menu = 0;
else
smenu = 0;
}
else if (menu == 2) {
if (smenu == 0) {
smenu = 1;
digitalWrite(18, HIGH);
label = 0;
shag = 0;
}
if (smenu == 2) {
smenu = 0;
label = 0;
shag = 0;
}
}
else if (menu == 3 && smenu == 0) {
smenu = 1;
}
else if (menu == 4) {
if (smenu == 0)
smenu = 1;
digitalWrite(19, HIGH);
}
lcd.clear();
obn = 1;
Serial.println("Button 4");
}
if (millis() - vivod >= vivodvalue || obn == 1)
{
for (int i = 0; i < 4; i++) {
Serial.print(sensors[i]);
Serial.print(" ");
}
Serial.println(shag);
obn = 0;
if (menu == 0) {
lcd.setCursor(0, 0);
lcd.print("Menu: >");
lcd.setCursor(7, 0);
for (int i = 0; i < MAX_ITEM_LENGTH; i++)
lcd.print(menu_items[menu_item][i]);
lcd.setCursor(7, 1);
if (menu_item < NUM_ITEMS - 1) {
for (int i = 0; i < MAX_ITEM_LENGTH; i++)
lcd.print(menu_items[menu_item + 1][i]);
}
else {
lcd.print(" ");
}
}
if (menu == 1) {
if (smenu == 0) {
lcd.setCursor(0, 0);
lcd.print("COUNT");
lcd.setCursor(11, 0);
// if (START == 1)// && run == 0)
lcd.print("READY");
// else
// lcd.print(" ");
lcd.setCursor(0, 1);
sprintf (buffer, "%05d", COUNTER);
lcd.print(buffer);
lcd.setCursor(8, 1);
lcd.print("ZER MENU");
// lcd.setCursor(11, 0);
// for (int i = 0; i < 4; i++) {
// lcd.print(sensors[i]);
// }
// lcd.print(shag);
}
// if (smenu == 1) {
// lcd.setCursor(0, 0);
// lcd.print("ERROR!");
// lcd.setCursor(0, 1);
// lcd.print("LABEL NOT FOUND!");
// }
}
else if (menu == 2) {
if (smenu == 0) {
lcd.setCursor(0, 0);
lcd.write(5);
lcd.print("OFFSET");
lcd.setCursor(0, 1);
lcd.write(6);
lcd.setCursor(2, 1);
sprintf (buffer, "%03dmm", OFFSET);
lcd.print(buffer);
lcd.setCursor(8, 1);
lcd.print("SET TEST");
}
if (smenu == 1) {
lcd.setCursor(0, 0);
lcd.print("OFFSET >>>>>>>>>");
lcd.setCursor(0, 1);
lcd.print("TESTING");
}
if (smenu == 2) {
lcd.setCursor(0, 0);
lcd.print("ERROR!");
lcd.setCursor(0, 1);
lcd.print("MAX OFFSET");
}
}
else if (menu == 3) {
if (smenu == 0) {
lcd.setCursor(0, 0);
lcd.write(5);
lcd.print("SENSOR");
lcd.setCursor(0, 1);
lcd.write(6);
lcd.setCursor(2, 1);
sprintf (buffer, "%1d.%1dS", SENSOR / 10, SENSOR % 10);
lcd.print(buffer);
lcd.setCursor(8, 1);
lcd.print("SET TEST");
}
else if (smenu == 1) {
lcd.setCursor(0, 0);
lcd.print("SENSOR >>>>>>>>>");
lcd.setCursor(0, 1);
lcd.print("TESTING");
}
}
else if (menu == 4) {
if (smenu == 0) {
lcd.setCursor(0, 0);
lcd.print("BOTTLE");
lcd.setCursor(0, 1);
lcd.print("REPLACE SET STA");
}
if (smenu == 1) {
lcd.setCursor(0, 0);
lcd.print("BOOTLE >>>>>>>>>");
lcd.setCursor(0, 1);
if (PAUSE == 0)
lcd.print("REPLACE ");
else
lcd.print("REPLACE STO");
}
}
vivod = millis();
}
if (menu == 1) {
if (shag == 0)
{
if (sensors[2] != holl1)
{
digitalWrite(19, HIGH);
}
else {
digitalWrite(19, LOW);
if (sensors[0] == Optsens) {
Serial.println("PUSH MOTOR HOLL1 OK & OPTECAL SENSOR OK");
shag = 1;
START = 1;
SENSORMILL = millis();
Serial.println(SENSOR * 100);
}
}
}
else if (shag == 1 && millis() - SENSORMILL >= SENSOR * 100)
{
Serial.println("OPTICAL SENSOR ZADERJKA OK");
digitalWrite(19, HIGH);
shag = 2;
}
else if (shag == 2 && sensors[3] == holl2)
{
Serial.println("PUSH MOTOR HOLL2 OK & OFF PUSH MOTOR");
digitalWrite(19, LOW);
digitalWrite(18, HIGH);
// if (sensors[1] == offsetSens) {
Serial.println("LABEL SENSOR 1 SRABATIVANIE & RUN LABEL MOTOR");
shag = 3;
OFFSETMILL = millis();
// }
// else
// Serial.println("ERROR! Label Sensor (1)");
}
else if (shag == 3 && sensors[1] == offsetSens && label == 0) {
label = 1;
shag = 4;
Serial.println("LABEL SENSOR 2 SRABATIVANIE");
}
else if (shag == 4 && sensors[1] != offsetSens && label == 1)
{
Serial.println("LABEL SENSOR VKLUCHENIE ZADERJKI");
OFFSETMILL = millis();
shag = 5;
}
else if (shag == 5 && millis() - OFFSETMILL >= CORRECT * OFFSET && label == 1)
{
Serial.println("LABEL SENSOR OFF LABEL MOTORA");
digitalWrite(18, LOW);
RunPause = millis();
// smenu = 0;
label = 0;
// lcd.clear();
shag = 6;
// obn = 1;
}
else if (shag == 6 && millis() - RunPause >= RunPauseItem)
{
digitalWrite(19, HIGH);
Serial.println("PAUSE & RUN PUSH MOTOR");
shag = 7;
}
else if (shag == 7 && sensors[2] == holl1)
{
Serial.println("PUSH MOTOR OFF HOLL1 SENSOR OK");
digitalWrite(19, LOW);
START = 0;
shag = 0;
COUNTER++;
EEPROM.put(2, COUNTER);
}
// if (shag == 3 && millis() - OFFSETMILL >= TimeError)
// {
// label == 0;
// START = 0;
// shag = 0;
// smenu = 1;
// lcd.clear();
// digitalWrite(18, LOW);
// digitalWrite(19, LOW);
// Serial.println("ERROR! LABEL NOT FOUND!");
// }
}
else if (menu == 2) {
if (smenu == 1)
{
if (shag == 0 && sensors[1] == offsetSens && label == 0) {
label = 1;
shag = 1;
}
else if (shag == 1 && sensors[1] != offsetSens && label == 1)
{
OFFSETMILL = millis();
shag = 2;
}
else if (shag == 2 && millis() - OFFSETMILL >= CORRECT * OFFSET && label == 1)
{
Serial.println("LABEL SENSOR OFF LABEL MOTORA & RUN PUSH MOTOR");
digitalWrite(18, LOW);
smenu = 0;
label = 0;
lcd.clear();
shag = 0;
obn = 1;
}
// if (shag == 2 && sensors[1] != offsetSens)
// {
// Serial.println("ERROR! MAX OFFSET");
// smenu = 2;
// digitalWrite(18, LOW);
// lcd.clear();
// }
// Serial.print(label);
// Serial.print(" ");
// Serial.print(shag);
// Serial.println(" ");
// Serial.print(label);
// Serial.print(" ");
}
}
else if (menu == 3) {
if (smenu == 1)
{
if (shag == 0)
{
if (sensors[2] != holl1)
{
digitalWrite(19, HIGH);
}
else {
digitalWrite(19, LOW);
if (sensors[0] == Optsens) {
shag = 1;
// START = 1;
SENSORMILL = millis();
}
}
}
else if (shag == 1 && millis() - SENSORMILL >= SENSOR * 100)
{
digitalWrite(19, HIGH);
shag = 2;
}
else if (shag == 2 && digitalRead(19) == 1 && sensors[3] == holl2)
{
digitalWrite(19, LOW);
delay(1000);
digitalWrite(19, HIGH);
shag = 3;
}
else if (shag == 3 && digitalRead(19) == 1 && sensors[2] == holl1)
{
digitalWrite(19, LOW);
smenu = 0;
shag = 0;
lcd.clear();
obn = 1;
}
}
}
else if (menu == 4) {
if (smenu == 1)
{
if (sensors[3] == holl2 && PAUSE == 0)
{
digitalWrite(19, LOW);
PAUSE = 1;
}
else if (sensors[2] == holl1 && PAUSE == 1)
{
digitalWrite(19, LOW);
PAUSE = 0;
smenu = 0;
lcd.clear();
obn = 1;
}
}
}
}