// Include libraries
#include <LiquidCrystal.h>
// Assign pins
// Buttons
const int Pin_Button_Up = 50;
const int Pin_Button_Down = 52;
const int Pin_Button_Advance = 53;
const int Pin_Button_Start = 49;
const int Pin_Button_Stop = 51;
// LCD Signals
const int Pin_LCD_DB0 = 22;
const int Pin_LCD_DB1 = 23;
const int Pin_LCD_DB2 = 24;
const int Pin_LCD_DB3 = 25;
const int Pin_LCD_DB4 = 26;
const int Pin_LCD_DB5 = 27;
const int Pin_LCD_DB6 = 28;
const int Pin_LCD_DB7 = 29;
const int Pin_LCD_RS = 33;
const int Pin_LCD_RW = 34;
const int Pin_LCD_EN = 35;
// LEDs
const int Pin_LED_Red = 36;
const int Pin_LED_Yellow = 13;
const int Pin_LED_Green = 39;
// Press Signals
const int Pin_Press_OK = A10;
const int Pin_Press_NOK = A11; // OK/NOK signals are on the same input but connector was given 2 pins
const int Pin_Press_Running = A12;
const int Pin_Press_Control = A13;
const int Pin_Press_Detect1 = A14;
const int Pin_Press_Detect2 = A15;
const int TestCycles = 3;
// Other Variables
int MenuStatus = 0; // 0=Startup, 1=CheckSettings, 2=Speed, 3=Rotations, 4=ReadyToRun, 5=Running
int Setting_Speed = 4; // Seconds per rotation
int Setting_Qty = 6; // Number of rotations per cycle
int Min_Speed = 9; // s/rev
int Max_Speed = 2;
int Min_Qty = 1;
int Max_Qty = 6;
int Max_Motor_Speed = 60; // RPM
//int Count_Qty = 0;
//int Cursor_Point = 0;
LiquidCrystal lcd(Pin_LCD_RS, Pin_LCD_EN, Pin_LCD_DB4, Pin_LCD_DB5, Pin_LCD_DB6, Pin_LCD_DB7);
// LCD Characters
uint8_t Arrow_Up[8] = {
0b00100,
0b01110,
0b11111,
0b00100,
0b00100,
0b00100,
0b00100,
0b00100
};
uint8_t Arrow_Down[8] = {
0b00100,
0b00100,
0b00100,
0b00100,
0b00100,
0b11111,
0b01110,
0b00100
};
uint8_t Checkmark[8] = {
0b00000,
0b00000,
0b00001,
0b00010,
0b10100,
0b01000,
0b00000,
0b00000
};
void setup() {
Serial.begin(9600);
// Buttons
pinMode(Pin_Button_Up, INPUT_PULLUP);
pinMode(Pin_Button_Down, INPUT_PULLUP);
pinMode(Pin_Button_Advance, INPUT_PULLUP);
pinMode(Pin_Button_Start, INPUT_PULLUP);
pinMode(Pin_Button_Stop, INPUT_PULLUP);
// LEDs
pinMode(Pin_LED_Red, OUTPUT);
pinMode(Pin_LED_Yellow, OUTPUT);
pinMode(Pin_LED_Green, OUTPUT);
// Press Signals
pinMode(Pin_Press_OK, INPUT_PULLUP); // Signals when press cycle is done
pinMode(Pin_Press_NOK, INPUT_PULLUP); // Signals if something went wrong
pinMode(Pin_Press_Running, INPUT_PULLUP); // Is the press running?
pinMode(Pin_Press_Control, OUTPUT); // Start button
pinMode(Pin_Press_Detect1, OUTPUT); // Allows the press to cycle
pinMode(Pin_Press_Detect2, OUTPUT); // ^^^
// LCD Setup
pinMode(Pin_LCD_RW,OUTPUT);
digitalWrite(Pin_LCD_RW,LOW);
lcd.begin(16, 2);
lcd.createChar(1, Arrow_Up);
lcd.createChar(2, Arrow_Down);
lcd.createChar(3, Checkmark);
}
void Blink_Green() {digitalWrite(Pin_LED_Green, HIGH); delay(200); digitalWrite(Pin_LED_Green, LOW);}
void Blink_Yellow() {digitalWrite(Pin_LED_Yellow, HIGH); delay(200); digitalWrite(Pin_LED_Yellow, LOW);}
void Blink_Red() {digitalWrite(Pin_LED_Red, HIGH); delay(200); digitalWrite(Pin_LED_Red, LOW);}
int lastState = HIGH;
void loop() {
lcd.clear(); lcd.setCursor(0,1); lcd.print("X X X X X X");
int Signal_OK = digitalRead(Pin_Press_OK); //analogRead(Pin_Press_OK);
int Signal_NOK = LOW; //analogRead(Pin_Press_NOK);
int Signal_Running = LOW; //analogRead(Pin_Press_Running);
int Signal_Control = LOW;
int Signal_Detect1 = LOW;
int Signal_Detect2 = LOW;
int Val_Up = digitalRead(Pin_Button_Up);
int Val_Down = digitalRead(Pin_Button_Down);
int Val_Start = digitalRead(Pin_Button_Start);
while (lastState==Val_Start){
Val_Start = digitalRead(Pin_Button_Start);
if (lastState != Val_Start){Signal_Control = HIGH;}
}
if (Signal_Control == HIGH){
//int Signal_Control = HIGH;
lcd.setCursor(6,1); lcd.print("\x03");
delay(2000);
while (Signal_Detect1==LOW){
Val_Up = digitalRead(Pin_Button_Up);
if (lastState != Val_Up) {Signal_Detect1 = HIGH; Blink_Yellow(); lcd.setCursor(8,1); lcd.print("\x03");}
}
while (Signal_Detect2==LOW){
Val_Down = digitalRead(Pin_Button_Down);
if (lastState != Val_Down) {Signal_Detect2 = HIGH; Blink_Yellow(); lcd.setCursor(10,1); lcd.print("\x03");}
}
lcd.setCursor(0,0); lcd.print(Signal_OK);
//Signal_OK = digitalRead(Pin_Press_OK);//analogRead(Pin_Press_OK);
while (Signal_OK==LOW){
lcd.setCursor(0,0); lcd.print(Signal_OK);
Signal_Running = digitalRead(Pin_Press_Running);//analogRead(Pin_Press_Running);
if (Signal_Running==HIGH) {lcd.setCursor(4,1); lcd.print("\x03");digitalWrite(Pin_LED_Yellow, HIGH);}
if (Signal_Running==LOW) {lcd.setCursor(4,1); lcd.print("X");digitalWrite(Pin_LED_Yellow, LOW);}
Signal_OK = digitalRead(Pin_Press_OK);//analogRead(Pin_Press_OK);
Signal_NOK = digitalRead(Pin_Press_NOK);//analogRead(Pin_Press_NOK);
if (Signal_NOK==HIGH) {lcd.setCursor(2,1); lcd.print("\x03");digitalWrite(Pin_LED_Red, HIGH);}
if (Signal_NOK==LOW) {lcd.setCursor(2,1); lcd.print("K");digitalWrite(Pin_LED_Red, LOW);}
if (Signal_OK==HIGH) {lcd.setCursor(0,1); lcd.print("\x03");digitalWrite(Pin_LED_Green, HIGH);}
}
}
delay(10000);
Blink_Red(); Blink_Yellow(); Blink_Green();
}