I'm currently working with a school project. What I need is to jump back to the 1-peso coin selection when the value of the inserted bill is not equal to the total of the selected 1-peso, 5-peso and 10-peso coins. I'm stuck here for a week now and I still don't know how to do this.
Here is my code.
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
#include <Keypad.h>
#include <Servo.h>
# define BOUNCE_DURATION 30; //20 ms
volatile unsigned long bouncetime = 0;
int money = 0;
const byte interruptPin=2;
LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);//RS,EN,D4,D5,D6,D7
const byte Rows= 4; //number of rows on the keypad i.e. 4
const byte Cols= 3; //number of columns on the keypad i,e, 3
//we will definne the key map as on the key pad:
char keymap[Rows][Cols]={
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rPins[Rows]= {3,4,5,6}; //Rows 0 to 3
byte cPins[Cols]= {7,8,9}; //Columns 0 to 2
Keypad kpd= Keypad(makeKeymap(keymap), rPins, cPins, Rows, Cols);
int onepeso = 300;
int fivepeso = 300;
int tenpeso = 300;
Servo servoOne;
Servo servoFive;
Servo servoTen;
String sharp="";
int piso=0;
int lima=0;
int sampu=0;
String input="";
String remlast = "";
int total=0;
void setup() {
lcd.begin(20,4);
servoOne.attach(10);
servoFive.attach(11);
servoTen.attach(12);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt (0, bill_value, CHANGE);
start_screen();
}
void loop() {
char key2 = kpd.getKey();
if (key2 != NO_KEY)
{
lcd.print(key2);
if (sharp == "")
{
input+=key2;
remlast = input;
remlast.replace("*","");
remlast.replace("#","");
piso = remlast.toInt();
}
else if (sharp == "five")
{
input+=key2;
remlast = input;
remlast.replace("*","");
remlast.replace("#","");
lima = remlast.toInt();
}
else if (sharp == "ten")
{
input+=key2;
remlast = input;
remlast.replace("*","");
remlast.replace("#","");
sampu = remlast.toInt();
}
if(key2=='*' && sharp!=NULL)
{
lcd.rightToLeft();
sharp="";
piso=0;
lima=0;
sampu=0;
input="";
remlast="";
}
if (sharp=="ten" && key2=='#')
{
total=((piso*1)+(lima*5)+(sampu*10));
if (total==money)
{
sharp = "out";
lcd.clear();
lcd.print("Please wait.");
lcd.setCursor(0,1);
lcd.print("Dispensing coins.");
servoPiso();
servoLima();
servoSampu();
}
else()
{
lcd.clear();
lcd.print("Sorry!Coins selected");
lcd.setCursor(0,1);
lcd.print(" and bill value not ");
lcd.setCursor(0,2);
lcd.print("equal.");
//insert code here to loop from the start
}
}
else if (sharp=="five" && key2=='#')
{
lcd.clear();
lcd.print("10-peso=");
lcd.setCursor(0,1);
lcd.print("(*)Erase (#)Enter");
lcd.setCursor(8,0);
sharp="ten";
input = 0;
}
else if (key2=='#')
{
lcd.clear();
lcd.print("5-peso=");
lcd.setCursor(0,1);
lcd.print("(*)Erase (#)Enter");
lcd.setCursor(7,0);
sharp="five";
input = 0;
}
if (key2=='*')
{
lcd.clear();
lcd.print("1-peso=");
lcd.setCursor(0,1);
lcd.print("(*)Erase (#)Enter");
lcd.setCursor(7,0);
}
}
}
//--------------------READS BILL VALUE--------------------//
void bill_value(){
if(millis() > bouncetime){
if(!digitalRead(2)){
money=money +10;
// lcd.print(money);
displayLCD();
}
bouncetime = millis() + BOUNCE_DURATION;
}
}
//--------------------DISPLAY LCD--------------------//
void displayLCD()
{
lcd.clear();
lcd.print("You inserted Php");
lcd.print(money);
lcd.setCursor(0,1);
lcd.print("Coins: ");
lcd.print(" 1Peso:");
lcd.print(onepeso);
lcd.setCursor(0,2);
lcd.print("5Peso:");
lcd.print(fivepeso);
lcd.print("10Peso:");
lcd.print(tenpeso);
lcd.setCursor(0,3);
lcd.print("Press * to continue");
}
//--------------------START SCREEN--------------------//
void start_screen()
{
lcd.print("********************");
lcd.setCursor(0,1);
lcd.print(" BILL O' COIN ");
lcd.setCursor(0,2);
lcd.print(" [ INSERT BILL ] ");
lcd.setCursor(0,3);
lcd.print("********************");
delay (2000);
} //end of start_screen
//--------------------SERVO FOR ONE--------------------//
void servoPiso()
{
servoOne.write(70);
delay(10);
int x = piso;
while(x>0)
{
servoOne.write(170);
delay(200);
servoOne.write(40);
delay(200);
x--;
}
}
//--------------------SERVO FOR FIVE--------------------//
void servoLima()
{
servoFive.write(70);
delay(10);
int x = lima;
while(x>0)
{
servoFive.write(170);
delay(200);
servoFive.write(40);
delay(200);
x--;
}
}
//--------------------SERVO FOR TEN--------------------//
void servoSampu()
{
servoTen.write(70);
delay(10);
int x = sampu;
while(x>0)
{
servoTen.write(170);
delay(200);
servoTen.write(40);
delay(200);
x--;
}
}
Please help me out. Thanks.