#include <Stepper.h>
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Keypad.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
int STEP[] = {15,2,0,4,16};
int DIR[] = {18,19,21,22,23};
struct Itemas {
int nomor;
int harga;
};
Itemas itemssssss[] = {
{1, 3},
{2, 6},
{3, 1},
{4, 2},
{5, 6}
};
const byte KEYPAD_ROWS = 4;
const byte KEYPAD_COLS = 3;
byte rowPins[KEYPAD_ROWS] = {5, 32, 33, 25};
byte colPins[KEYPAD_COLS] = {26, 27, 14};
char keys[KEYPAD_ROWS][KEYPAD_COLS] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'X', '0', '>'}
};
byte cursor_char[] = {
B00000,
B00000,
B00000,
B00000,
B00000,
B00000,
B00000,
B11111
};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, KEYPAD_ROWS, KEYPAD_COLS);
void setup() {
Serial.begin(9600);
pinMode(17, INPUT_PULLUP);
for (int i = 0; i < sizeof(STEP) / sizeof(STEP[0]); i++) { pinMode(STEP[i], OUTPUT); }
for (int i = 0; i < sizeof(DIR) / sizeof(DIR[0]); i++) { pinMode(DIR[i], OUTPUT); }
LCD_setup();
}
void motor_rotate(int revolusi, int speed, String dir_mode, int step_pin, int dir_pin){
if (dir_mode == "CW") {
digitalWrite(dir_pin, HIGH);// jika DIR bernilai HIGH maka stepper akan berputar searah jarum jam
//Serial.println("Spinning Clockwise...");
}
else if (dir_mode == "CCW") {
digitalWrite(dir_pin, LOW);// jika DIR bernilai LOW maka stepper akan berputar berlawanan arah jarum jam
//Serial.println("Spinning Counter Clockwise...");
}
for(int i = 0; i<revolusi; i++)
{
digitalWrite(step_pin, HIGH);
delayMicroseconds(speed); // SEMAKIN KECIL NILAI NYA AKAN SEMAKIN CEPAT
digitalWrite(step_pin, LOW);
delayMicroseconds(speed); // SEMAKIN KECIL NILAI NYA AKAN SEMAKIN CEPAT
}
}
void LCD_setup() {
Wire.begin(12, 13); // SDA, SCL
lcd.begin(40, 4);
lcd.backlight();
lcd.createChar(0, cursor_char);
}
int cursor_pos = 2;
String nomor_item_asd = "";
void pilih_menu_makanan() {
lcd.setCursor(0, 0);
lcd.print(" PILIH NOMOR ITEM ");
lcd.setCursor(0, 2);
lcd.print("=>");
lcd.setCursor(11, 2);
lcd.print("> : Enter");
lcd.setCursor(11, 3);
lcd.print("X : Hapus");
char key = keypad.getKey();
lcd.setCursor((cursor_pos),2);
lcd.write(0);
if (key != NO_KEY) {
if (String(key) == "X"){
lcd.setCursor(cursor_pos,2);
lcd.print(" ");
lcd.setCursor((cursor_pos - 1),2);
lcd.print(" ");
cursor_pos -= 1;
if (cursor_pos == 1){
cursor_pos = 2;
}
nomor_item_asd.remove(nomor_item_asd.length() - 1);
//Serial.println(cursor_pos);
}
else if (String(key) == ">"){
if (nomor_item_asd.toInt() <= sizeof(itemssssss) / sizeof(itemssssss[0]) && nomor_item_asd.toInt() > 0){
//Serial.println("kurang dari item");
//Serial.println(nomor_item_asd.toInt());
minta_koin(itemssssss[(nomor_item_asd.toInt() - 1)].harga, itemssssss[(nomor_item_asd.toInt() - 1)].nomor);
cursor_pos = 2;
}else{
lcd.setCursor(0,3);
lcd.print("Salah!");
}
}
else{
//Serial.println(key);
lcd.setCursor(cursor_pos,2);
lcd.print(key);
cursor_pos += 1;
//Serial.println(cursor_pos);
nomor_item_asd = String(nomor_item_asd) + String(key);
}
}
}
void jumlah_item() {
}
void minta_koin(int jumlah, int nomor_item){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Masukkan Koin");
lcd.setCursor(0, 3);
lcd.print("Item " + String(nomor_item) + " : " + String(jumlah) + " Coin");
delay(1000);
int koin = 0;
int startMillis = millis();
lcd.setCursor(0, 1);
lcd.print(String(koin) + "/" + String(jumlah));
while ((koin < jumlah) && (millis() - startMillis < 10000)){
//Serial.println(millis() - startMillis);
if (digitalRead(17) == LOW){
startMillis = millis();
lcd.setCursor(0, 1);
//Serial.println("button pressed");
koin += 1;
lcd.print(String(koin) + "/" + String(jumlah));
//Serial.println(koin);
delay(500);
}
}
if (koin >= jumlah){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Silahkan Mengambil");
lcd.setCursor(0, 1);
lcd.print("Barang Anda!");
motor_rotate(200, 4000, "CW", STEP[(nomor_item - 1)], DIR[(nomor_item - 1)]);
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Terimakasih Telah");
lcd.setCursor(0, 1);
lcd.print("Membeli");
delay(3000);
lcd.clear();
nomor_item_asd = "";
}else{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pembelian");
lcd.setCursor(0, 1);
lcd.print("Di Batalkan");
delay(3000);
lcd.clear();
nomor_item_asd = "";
}
}
void loop() {
pilih_menu_makanan();
}