const int rs = 12; //Register Select Выбор регистра. Управляет выбором между командами и данными.
const int en = 11; //Enable Включение. Инициирует чтение или запись данных.
const int d4 = 5; //Data Lines Шина данных. Передача информации между дисплеем и Arduino.
const int d5 = 4; //Data Lines Шина данных. Передача информации между дисплеем и Arduino.
const int d6 = 3; //Data Lines Шина данных. Передача информации между дисплеем и Arduino.
const int d7 = 2; //Data Lines Шина данных. Передача информации между дисплеем и Arduino.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3 , 2); // Инициализация библиотеки с номерами пинов
const int CoinCash = 25; // Пин, к которому подключена монетник, подтягиваюший резисторидёт на +
const int ledPin = 23; // Пин, к которому подключен контрольный светодиод отслеживающий импульсы
const int Motor = 27; // Пин, к которому подключён светодиод-мотор
const int SensorDispenser = 29; // Пин, к которому подключён датчик выдачи
int CoinCashState = LOW; // Текущее состояние пина монетника
int lastCoinCashState = HIGH; // Предыдущее состояние пина монетника
int counter = 0; // Счётчик импульсов монетника
int SensorDispenserState = LOW; // Текущее состояние пина датчика выдачи
int LastSensorDispenser = HIGH; // Предыдущее состояние пина датчика выдачи
const float impulseValue = 0.05; // Стоимость одного импульса 5 центов
float Price = 0.5; // Цена на товар 0.5$
void setup() {
pinMode(ledPin, OUTPUT); // Инициализируем цифровой пин 23 как выход для контрольного светодиода
pinMode(CoinCash, INPUT); // Инициализируем цифровой пин 25 как вход монетоприёмника
pinMode(Motor, OUTPUT); // Инициализируем цифровой пин 27 как выход для мотор-светодиода
pinMode(SensorDispenser, INPUT_PULLUP); // Инициализируем цифровой пин 29 как вход датчика
Serial.begin(9600); // Инициализация последовательного соединения для вывода данных
lcd.begin(16, 2); // Устанавливаем количество столбцов и строк дисплея
lcd.print(" MAKE PAYMENT"); // Выводим текст на дисплей
lcd.setCursor(3,1); // Устанавливаем курсор на вторую строку, 3 символа отступаем
lcd.print("PRICE $"); // Выводим текст на дисплей
lcd.print(Price); // Выводим значение цены на товар
}
void loop() {
int CoinCashState = digitalRead(CoinCash); // Считываем текущее состояние монетоприёмника
if (CoinCashState == LOW) { // Проверяем, изменилось ли состояние пина монетника?
digitalWrite(ledPin, LOW); // Если LOW то контрольный светодиод включен
} else {
digitalWrite(ledPin, HIGH); //Иначе выключаем контрольняй светодиод
}
if (CoinCashState != lastCoinCashState) { // Если CoinCashState не равно lastCoinCashState т.е изменился уровень пина монетника с HIGH на LOW
if (CoinCashState == HIGH) { // CoinCashState присваиваем высокий уровень. Увеличиваем счётчик
counter++; // Увеличиваем счётчик импульсов.
float totalValue = counter * impulseValue; // Вычисляем общую сумму денег внесенных монетами.
lcd.clear(); // Очистка дисплея перед выводом новой информации
lcd.setCursor(3,0); // Возвращаем курсор на начало второй строки, отступ 3 символа
lcd.print("Count: "); // Выводим текст "Count: "
lcd.print(counter); // Выводим значение счётчика
lcd.setCursor(2, 1); // Перемещаем курсор на вторую строку, отступ 2 символа
lcd.print("Total: $"); // Выводим текст "Total: $"
lcd.print(totalValue); // Выводим общую стоимость
if (totalValue < Price) { // Eсли сумма внесённых денег меньше чем цена на товар
digitalWrite(Motor, LOW); // То Мотор выключен.
} else { digitalWrite(Motor, HIGH); } // Если сумма внесённых денег равна или выше, то мотор включён.
}
lastCoinCashState = CoinCashState; // Обновляем предыдущее состояние кнопки
}
int SensorDispenserState = digitalRead(SensorDispenser); // Считываем текущее состояние датчика выдачи
Serial.println (SensorDispenserState);
if (SensorDispenserState == LOW) { // Если датчик выдачи LOW
digitalWrite (Motor, LOW); // Выключаем мотор
counter = 0;
lcd.clear(); // Очистить дисплей
lcd.setCursor(0,0); // Установить курсор в начало дисплея
lcd.print(" MAKE PAYMENT"); // Вывести текст на дисплей
lcd.setCursor(3,1); // Установить курсор на вторую строку, 3 символа отступаем
lcd.print("PRICE $"); // Вывести текст на дисплей
lcd.print(Price); // Вывести значение цены на товар
}
}