Hi all,
Firstly I am new here and have been trying to get some code working for 2 weeks now! I only started coding on Arduino 2 weeks ago.
In short, I am using a coin acceptor to accept coins (working fine) which uses an interrupt pin to detect impulses from the acceptor. The basis of the thing is a money changer.
The coin hopper then pays out coins, but either theres something wrong with my code, or its getting random impulses probably caused by grounding issues I assume.
I just wanted to check first that my code all makes sense before I start going down other routes. The code is probably not very good, and could do with some improvements. I've read through many other posts, and taken tips from lots of them to add to my code, but I'm still seeing strange results.
Code posted below.
#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal_SI2C.h>
#include <Wire.h>
// variable use to measure the intervals inbetween impulses
int i = 0;
// Number of impulses detected
int impulsCount = 0;
// Sum of all the coins inserted
float coin_inserted = 0.00;
int coins_paid = 0;
int coins_to_pay = 0;
const int hopperInt = 10;
byte hopperDebounceDelay = 100;
long lastHopperDebounceTime = 0;
int previousMillis;
int interval = 500;
const byte interruptPin = 2;
volatile byte state = LOW;
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
void setup() {
digitalWrite (8,HIGH);
Serial.begin(9600);
pinMode(10, INPUT_PULLUP);
pinMode(8, OUTPUT);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), incomingImpuls, RISING);
lcd.begin(16, 2);
lcd.setCursor(1,0);
lcd.print("CHANGE MACHINE");
lcd.setCursor(1,1);
delay(1000);
lcd.print("MAGGA'S ARCADE");
delay(3000);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("INITIALISING...");
delay(3000);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("INSERT COIN(S)");
lcd.setCursor(1,1);
lcd.print("FOR 2P CHANGE");
}
void incomingImpuls()
{
impulsCount=impulsCount+1;
Serial.println("Impulse Detected");
i=0;
}
void loop() {
if (coins_to_pay == 0)
{
i=i+1;
Serial.print("i=");
Serial.print(i);
Serial.print(" Impulses:");
Serial.println(impulsCount);
if (impulsCount==1){
coin_inserted=0.10;
coins_to_pay=5;
impulsCount=0;
Serial.print(" Impulses During Loop: ");
Serial.println(impulsCount);
}
if (impulsCount==2){
coin_inserted=0.20;
coins_to_pay=10;
impulsCount=0;
Serial.print(" Impulses During Loop: ");
Serial.println(impulsCount);
}
if (impulsCount==3){
coin_inserted=0.50;
coins_to_pay=25;
impulsCount=0;
Serial.print(" Impulses During Loop: ");
Serial.println(impulsCount);
}
if (impulsCount==4){
coin_inserted=1.00;
coins_to_pay=50;
impulsCount=0;
Serial.print(" Impulses During Loop: ");
Serial.println(impulsCount);
}
if (impulsCount==5){
coin_inserted=2.00;
coins_to_pay=100;
impulsCount=0;
Serial.print("Impulses During Loop: ");
Serial.println(impulsCount);
}
if (coins_to_pay>0)
{
Serial.print("Coin Inserted: ");
Serial.println(coin_inserted);
Serial.print("Impulses After Coin Insert: ");
Serial.println(impulsCount);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Inserted:");
lcd.setCursor(10,0);
lcd.print(coin_inserted);
}
}
else
{
// Coins still to pay, so activate hopper
Serial.print("Impulses Before Payout: ");
Serial.println(impulsCount);
digitalWrite(8, LOW);
int HopperSense = digitalRead(7);
if (digitalRead(hopperInt) == LOW && ((millis() - lastHopperDebounceTime) > hopperDebounceDelay))
{
lastHopperDebounceTime = millis();
Serial.println("2p Paid");
Serial.print("Impulses After Payout: ");
Serial.println(impulsCount);
coins_paid = coins_paid+1;
//Serial.println(coins_paid);
lcd.setCursor(2,1);
lcd.print("2ps Paid: ");
lcd.setCursor(12,1);
lcd.print(coins_paid);
if(coins_paid == coins_to_pay)
{
coin_inserted = 0.00;
coins_paid = 0;
coins_to_pay = 0;
impulsCount=0;
delay(150);
digitalWrite(8, HIGH);
delay(3000);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("INSERT COIN(S)");
lcd.setCursor(1,1);
lcd.print("FOR 2P CHANGE");
}
}
}
}
And readout from serial goes something like this...
i=98 Impulses:0
i=99 Impulses:0
i=10I Impulses:2
Coin Inserted: 0.20
Impulses After Coin Insert: 0
Impulses Before Payout: 0
ImpuIses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
Impulses Before Payout: 1
ImpuIses Before Payout: 3
Impulses Before Payout: 3
Impulses Before Payout: 3
Impulses Before Payout: 3
Impulses Before Payout: 3
Impulses Before Payout: 3
Impulses Before Payout: 3
Impulses Before Payout: 3
Impulses Before Payout: 3
Impulses Before Payout: 3
Impulses Before Payout: 3
Impulses Before Payout: 3
Impulses Before Payout: 3