#include <LiquidCrystal_I2C.h>
#include <IRremote.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
IRrecv receiver(23);
int kode = 0;
int c_A = 0;
int c_B = 0;
int c_C = 0;
int c_D = 0;
int c_E = 0;
int total = 0;
bool flag1 = false;
bool flag2 = false;
bool flag3 = false;
int i = 0;
unsigned long skr = 0;
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);//step
pinMode(25, OUTPUT);//r
pinMode(33, OUTPUT);//b
pinMode(32, OUTPUT);//g
pinMode(19, OUTPUT);//state1
pinMode(18, OUTPUT);//state2
pinMode(5, OUTPUT); //state3
pinMode(17, OUTPUT);//state4
pinMode(16, OUTPUT);//state5
pinMode(4, OUTPUT); //state6
pinMode(2, OUTPUT); //state7
pinMode(15, OUTPUT);//state8
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Filling Simulation ");
lcd.setCursor(0, 1);
lcd.print("A: ");
lcd.setCursor(10, 1);
lcd.print("B: ");
lcd.setCursor(0, 2);
lcd.print("C: ");
lcd.setCursor(10, 2);
lcd.print("D: ");
lcd.setCursor(0, 3);
lcd.print("E: ");
lcd.setCursor(10, 3);
lcd.print("Tot: ");
receiver.enableIRIn();
delay(2000);
}
void loop() {
if (receiver.decode()) {
kode = receiver.decodedIRData.command;
switch (kode) {
case 48:
Serial.println('1');
break;
case 24:
Serial.println('2');
break;
case 122:
Serial.println('3');
break;
case 16:
Serial.println('4');
break;
case 56:
Serial.println('5');
break;
case 90:
Serial.println('6');
break;
case 66:
Serial.println('7');
break;
case 74:
Serial.println('8');
break;
case 82:
if (flag1) {
Serial.println('9');
flag1 = false;
} else {
Serial.println("10");
flag1 = true;
}
break;
}
receiver.resume();
}
}
void serialEvent() {
while (Serial.available()) {
int data = Serial.parseInt();
if (Serial.read() == char(13)) {
switch (data) {
case 1:
analogWrite(25, 255);
analogWrite(33, 0);
analogWrite(32, 0);
c_A++;
break;
case 2:
analogWrite(25, 0);
analogWrite(33, 128);
analogWrite(32, 0);
c_B++;
break;
case 3:
analogWrite(25, 0);
analogWrite(33, 0);
analogWrite(32, 255);
c_C++;
break;
case 4:
analogWrite(25, 255);
analogWrite(33, 255);
analogWrite(32, 0);
c_D++;
break;
case 5:
analogWrite(25, 106);
analogWrite(33, 13);
analogWrite(32, 173);
c_E++;
break;
case 10:
lcd.setCursor(0, 0);
lcd.print("Initial Condition ");
break;
case 11:
lcd.setCursor(0, 0);
lcd.print("Conveyor Motor 1 ON ");
show();
digitalWrite(15, LOW);
digitalWrite(19, HIGH);
break;
case 12:
lcd.setCursor(0, 0);
lcd.print("Filling Process ");
digitalWrite(19, LOW);
digitalWrite(18, HIGH);
flag3 = true;
break;
case 13:
lcd.setCursor(0, 0);
lcd.print("First disc rotation ");
digitalWrite(18, LOW);
digitalWrite(5, HIGH);
if (flag3) stepper();
break;
case 14:
lcd.setCursor(0, 0);
lcd.print("Capping Process ");
digitalWrite(5, LOW);
digitalWrite(17, HIGH);
flag3 = true;
break;
case 15:
lcd.setCursor(0, 0);
lcd.print("Second disc rotation");
digitalWrite(17, LOW);
digitalWrite(16, HIGH);
if (flag3) stepper();
break;
case 16:
lcd.setCursor(0, 0);
lcd.print("Labelling Process ");
digitalWrite(16, LOW);
digitalWrite(4, HIGH);
flag3 = true;
break;
case 17:
lcd.setCursor(0, 0);
lcd.print("Third disc rotation ");
digitalWrite(4, LOW);
digitalWrite(2, HIGH);
if (flag3) stepper();
break;
case 18:
lcd.setCursor(0, 0);
lcd.print("Conveyor Motor 2 ON ");
digitalWrite(2, LOW);
digitalWrite(15, HIGH);
flag2 = false;
break;
}
}
}
}
void show() {
total = c_A + c_B + c_C + c_D + c_E;
lcd.setCursor(3, 1);
lcd.print(c_A);
lcd.setCursor(13, 1);
lcd.print(c_B);
lcd.setCursor(3, 2);
lcd.print(c_C);
lcd.setCursor(13, 2);
lcd.print(c_D);
lcd.setCursor(3, 3);
lcd.print(c_E);
lcd.setCursor(15, 3);
lcd.print(total);
}
void stepper() {
for (int i = 0; i < 50; i++) {
digitalWrite(13, HIGH);
digitalWrite(13, LOW);
delay(10);
}
flag3 = false;
}