Skip to content

Instantly share code, notes, and snippets.

@Sevenmojoe
Last active June 23, 2022 06:58
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save Sevenmojoe/e456be5fb79ad2630e88424d6e7c40d7 to your computer and use it in GitHub Desktop.
Save Sevenmojoe/e456be5fb79ad2630e88424d6e7c40d7 to your computer and use it in GitHub Desktop.
const byte SIAP = 0;
const byte KOIN_MASUK1 = 1;
const byte KOIN_MASUK2 = 2;
const byte KOIN_MASUK3 = 3;
const byte KOIN_MASUK4 = 4;
const byte KOIN_MASUK5 = 5;
const byte KOIN_MASUK6 = 6;
const byte KOIN_MASUK7 = 7;
const byte SALDO_500 = 8;
const byte SALDO_500500 = 9;
const byte SALDO_500500500 = 10;
const byte SALDO_500500500500 = 11;
const byte SALDO_5005005001000 = 12;
const byte SALDO_5001000 = 13;
const byte SALDO_5001000500 = 14;
const byte SALDO_50010001000 = 15;
const byte SALDO_5005001000 = 16;
const byte SALDO_1000 = 17;
const byte SALDO_10001000 = 18;
const byte SALDO_1000500 = 19;
const byte SALDO_1000500500 = 20;
const byte SALDO_10005001000 = 21;
const byte KOIN_KELUAR = 22;
byte state = SIAP;
const float jeda_waktu = 876;
unsigned long time1;
unsigned long time2;
unsigned long time3;
unsigned long time4;
unsigned long time5;
unsigned long time6;
unsigned long time7;
#define PIN_SCE 7
#define PIN_RESET 6
#define PIN_DC 5
#define PIN_SDIN 4
#define PIN_SCLK 3
#define LCD_C LOW
#define LCD_D HIGH
#define LCD_X 84
#define LCD_Y 48
static const byte ASCII[][5] =
{
{0x00, 0x00, 0x00, 0x00, 0x00} // 20
, {0x00, 0x00, 0x5f, 0x00, 0x00} // 21 !
, {0x00, 0x07, 0x00, 0x07, 0x00} // 22 "
, {0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 #
, {0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $
, {0x23, 0x13, 0x08, 0x64, 0x62} // 25 %
, {0x36, 0x49, 0x55, 0x22, 0x50} // 26 &
, {0x00, 0x05, 0x03, 0x00, 0x00} // 27 '
, {0x00, 0x1c, 0x22, 0x41, 0x00} // 28 (
, {0x00, 0x41, 0x22, 0x1c, 0x00} // 29 )
, {0x14, 0x08, 0x3e, 0x08, 0x14} // 2a *
, {0x08, 0x08, 0x3e, 0x08, 0x08} // 2b +
, {0x00, 0x50, 0x30, 0x00, 0x00} // 2c ,
, {0x08, 0x08, 0x08, 0x08, 0x08} // 2d -
, {0x00, 0x60, 0x60, 0x00, 0x00} // 2e .
, {0x20, 0x10, 0x08, 0x04, 0x02} // 2f /
, {0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0
, {0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1
, {0x42, 0x61, 0x51, 0x49, 0x46} // 32 2
, {0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3
, {0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4
, {0x27, 0x45, 0x45, 0x45, 0x39} // 35 5
, {0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6
, {0x01, 0x71, 0x09, 0x05, 0x03} // 37 7
, {0x36, 0x49, 0x49, 0x49, 0x36} // 38 8
, {0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9
, {0x00, 0x36, 0x36, 0x00, 0x00} // 3a :
, {0x00, 0x56, 0x36, 0x00, 0x00} // 3b ;
, {0x08, 0x14, 0x22, 0x41, 0x00} // 3c <
, {0x14, 0x14, 0x14, 0x14, 0x14} // 3d =
, {0x00, 0x41, 0x22, 0x14, 0x08} // 3e >
, {0x02, 0x01, 0x51, 0x09, 0x06} // 3f ?
, {0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @
, {0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A
, {0x7f, 0x49, 0x49, 0x49, 0x36} // 42 B
, {0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C
, {0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D
, {0x7f, 0x49, 0x49, 0x49, 0x41} // 45 E
, {0x7f, 0x09, 0x09, 0x09, 0x01} // 46 F
, {0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G
, {0x7f, 0x08, 0x08, 0x08, 0x7f} // 48 H
, {0x00, 0x41, 0x7f, 0x41, 0x00} // 49 I
, {0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J
, {0x7f, 0x08, 0x14, 0x22, 0x41} // 4b K
, {0x7f, 0x40, 0x40, 0x40, 0x40} // 4c L
, {0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M
, {0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N
, {0x3e, 0x41, 0x41, 0x41, 0x3e} // 4f O
, {0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P
, {0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q
, {0x7f, 0x09, 0x19, 0x29, 0x46} // 52 R
, {0x46, 0x49, 0x49, 0x49, 0x31} // 53 S
, {0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T
, {0x3f, 0x40, 0x40, 0x40, 0x3f} // 55 U
, {0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V
, {0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W
, {0x63, 0x14, 0x08, 0x14, 0x63} // 58 X
, {0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y
, {0x61, 0x51, 0x49, 0x45, 0x43} // 5a Z
, {0x00, 0x7f, 0x41, 0x41, 0x00} // 5b [
, {0x02, 0x04, 0x08, 0x10, 0x20} // 5c ¥
, {0x00, 0x41, 0x41, 0x7f, 0x00} // 5d ]
, {0x04, 0x02, 0x01, 0x02, 0x04} // 5e ^
, {0x40, 0x40, 0x40, 0x40, 0x40} // 5f _
, {0x00, 0x01, 0x02, 0x04, 0x00} // 60 `
, {0x20, 0x54, 0x54, 0x54, 0x78} // 61 a
, {0x7f, 0x48, 0x44, 0x44, 0x38} // 62 b
, {0x38, 0x44, 0x44, 0x44, 0x20} // 63 c
, {0x38, 0x44, 0x44, 0x48, 0x7f} // 64 d
, {0x38, 0x54, 0x54, 0x54, 0x18} // 65 e
, {0x08, 0x7e, 0x09, 0x01, 0x02} // 66 f
, {0x0c, 0x52, 0x52, 0x52, 0x3e} // 67 g
, {0x7f, 0x08, 0x04, 0x04, 0x78} // 68 h
, {0x00, 0x44, 0x7d, 0x40, 0x00} // 69 i
, {0x20, 0x40, 0x44, 0x3d, 0x00} // 6a j
, {0x7f, 0x10, 0x28, 0x44, 0x00} // 6b k
, {0x00, 0x41, 0x7f, 0x40, 0x00} // 6c l
, {0x7c, 0x04, 0x18, 0x04, 0x78} // 6d m
, {0x7c, 0x08, 0x04, 0x04, 0x78} // 6e n
, {0x38, 0x44, 0x44, 0x44, 0x38} // 6f o
, {0x7c, 0x14, 0x14, 0x14, 0x08} // 70 p
, {0x08, 0x14, 0x14, 0x18, 0x7c} // 71 q
, {0x7c, 0x08, 0x04, 0x04, 0x08} // 72 r
, {0x48, 0x54, 0x54, 0x54, 0x20} // 73 s
, {0x04, 0x3f, 0x44, 0x40, 0x20} // 74 t
, {0x3c, 0x40, 0x40, 0x20, 0x7c} // 75 u
, {0x1c, 0x20, 0x40, 0x20, 0x1c} // 76 v
, {0x3c, 0x40, 0x30, 0x40, 0x3c} // 77 w
, {0x44, 0x28, 0x10, 0x28, 0x44} // 78 x
, {0x0c, 0x50, 0x50, 0x50, 0x3c} // 79 y
, {0x44, 0x64, 0x54, 0x4c, 0x44} // 7a z
, {0x00, 0x08, 0x36, 0x41, 0x00} // 7b {
, {0x00, 0x00, 0x7f, 0x00, 0x00} // 7c |
, {0x00, 0x41, 0x36, 0x08, 0x00} // 7d }
, {0x10, 0x08, 0x08, 0x10, 0x08} // 7e �
, {0x78, 0x46, 0x41, 0x46, 0x78} // 7f →
};
void LcdWrite(byte dc, byte data)
{
digitalWrite(PIN_DC, dc);
digitalWrite(PIN_SCE, LOW);
shiftOut(PIN_SDIN, PIN_SCLK, MSBFIRST, data);
digitalWrite(PIN_SCE, HIGH);
}
void LcdCharacter(char character)
{
LcdWrite(LCD_D, 0x00);
for (int index = 0; index < 5; index++)
{
LcdWrite(LCD_D, ASCII[character - 0x20][index]);
}
LcdWrite(LCD_D, 0x00);
}
void LcdClear(void)
{
for (int index = 0; index < LCD_X * LCD_Y / 8; index++)
{
LcdWrite(LCD_D, 0x00);
}
}
void LcdInitialise(void)
{
pinMode(PIN_SCE, OUTPUT);
pinMode(PIN_RESET, OUTPUT);
pinMode(PIN_DC, OUTPUT);
pinMode(PIN_SDIN, OUTPUT);
pinMode(PIN_SCLK, OUTPUT);
digitalWrite(PIN_RESET, LOW);
digitalWrite(PIN_RESET, HIGH);
LcdWrite(LCD_C, 0x21 );
LcdWrite(LCD_C, 0xB1 );
LcdWrite(LCD_C, 0x04 );
LcdWrite(LCD_C, 0x14 );
LcdWrite(LCD_C, 0x20 );
LcdWrite(LCD_C, 0x0C );
}
void LcdString(char *characters)
{
while (*characters)
{
LcdCharacter(*characters++);
}
}
void setup() {
//enable output on the digital pins
pinMode( 11, INPUT);
pinMode( 12, INPUT);
pinMode( 14, INPUT);
pinMode( 15, INPUT);
pinMode( 16, INPUT);
pinMode( 17, INPUT);
pinMode( 18, INPUT);
pinMode( 19, INPUT);
pinMode( 13 , OUTPUT);
pinMode( 8 , OUTPUT);
pinMode( 9 , OUTPUT);
pinMode( 10 , OUTPUT);
pinMode( 2 , OUTPUT);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(13, LOW);
Serial.begin(9600);
Serial.println("=> Siap");
LcdInitialise();
LcdClear();
LcdString(" Masukkan Koin Rp500 atau Koin Rp1000 @ Rp2000");
delay(500);
}
void loop() {
int x = analogRead(14);
if (state == SIAP) {
if (x >= 33) {
state = KOIN_MASUK1;
time1 = millis();
tone(2, 4200, 40);
Serial.println("snsr1,");
Serial.println("start wkt");
}
}
else if ((state == KOIN_MASUK1) && (!(digitalRead(13)))) {
if ((digitalRead(12)) && (state == KOIN_MASUK1)) {
unsigned long diff1 = (millis() - time1);
Serial.println("snsr2,");
Serial.println("stop wkt");
Serial.print("jeda wkt: ");
Serial.print(diff1);
Serial.println(" ms");
if (diff1 > jeda_waktu) {
state = SALDO_1000;
LcdInitialise();
LcdClear();
LcdString(" diterima Saldo=Rp1000 Tambah Koin Koin Rp1000");
digitalWrite (13, HIGH);
Serial.println("koin=Rp 1000, Saldo: Rp1000");
tone(2, 4200, 299);
}
else if (diff1 < jeda_waktu) {
state = SALDO_500;
digitalWrite (13, HIGH);
LcdInitialise();
LcdClear();
LcdString(" diterima Saldo= Rp500 Tambah Koin Koin Rp500");
Serial.println("koin=Rp 500, Saldo: Rp500");
tone(2, 4200, 299);
}
}
}
if (state == SALDO_500) {
if (x >= 33) {
state = KOIN_MASUK2;
time2 = millis();
tone(2, 4200, 40);
Serial.println("snsr1,");
Serial.println("start wkt");
}
}
else if ((state == KOIN_MASUK2) && ((digitalRead(13)))) {
if ((digitalRead(12)) && (state == KOIN_MASUK2)) {
unsigned long diff2 = (millis() - time2);
Serial.println("snsr2,");
Serial.println("stop wkt");
Serial.print("jeda wkt: ");
Serial.print(diff2);
Serial.println(" ms");
if (diff2 > jeda_waktu) {
state = SALDO_5001000;
LcdInitialise();
LcdClear();
LcdString(" diterima Saldo=Rp1500 Tambah Koin Koin Rp1000");
tone(2, 4200, 299);
Serial.println("koin=Rp 1000, Saldo: Rp1500");
}
else if (diff2 < jeda_waktu) {
state = SALDO_500500;
LcdInitialise();
LcdClear();
LcdString(" diterima Saldo=Rp1000 Tambah Koin Koin Rp500");
tone(2, 4200, 299);
Serial.println("koin=Rp 500, Saldo: Rp1000");
}
}
}
if (state == SALDO_500500) {
if (x >= 33) {
state = KOIN_MASUK3;
time3 = millis();
tone(2, 4200, 40);
Serial.println("snsr1,");
Serial.println("start wkt");
}
}
else if ((state == KOIN_MASUK3) && ((digitalRead(13)))) {
if ((digitalRead(12)) && (state == KOIN_MASUK3)) {
unsigned long diff3 = (millis() - time3);
Serial.println("snsr2,");
Serial.println("stop wkt");
Serial.print("jeda wkt: ");
Serial.print(diff3);
Serial.println(" ms");
if (diff3 > jeda_waktu) {
state = SALDO_5005001000;
LcdInitialise();
LcdClear();
LcdString(" diterima Saldo=Rp2000 Pilih Produk Koin Rp1000");
Serial.println("koin=Rp 1000, Saldo: Rp2000");
tone(2, 4200, 799);
}
else if (diff3 < jeda_waktu) {
state = SALDO_500500500;
LcdInitialise();
LcdClear();
LcdString(" diterima Saldo=Rp1500 Tambah Koin Koin Rp500");
Serial.println("koin=Rp 500, Saldo: Rp1500");
tone(2, 4200, 299);
}
}
}
if (state == SALDO_500500500) {
if (x >= 33) {
state = KOIN_MASUK4;
time4 = millis();
tone(2, 4200, 40);
Serial.println("snsr1,");
Serial.println("start wkt");
}
}
else if ((state == KOIN_MASUK4) && ((digitalRead(13)))) {
if ((digitalRead(12)) && (state == KOIN_MASUK4)) {
unsigned long diff4 = (millis() - time4);
Serial.println("snsr2,");
Serial.println("stop wkt");
Serial.print("jeda wkt: ");
Serial.print(diff4);
Serial.println(" ms");
if (diff4 > jeda_waktu) {
state = SALDO_5005005001000;
LcdInitialise();
LcdClear();
LcdString(" diterima Saldo=Rp2500 Pilih Produk Koin Rp1000");
Serial.println("koin=Rp 1000, Saldo: Rp2500");
tone(2, 4200, 799);
}
else if (diff4 < jeda_waktu) {
state = SALDO_500500500500;
LcdInitialise();
LcdClear();
LcdString(" diterima Saldo=Rp2000 Pilih Produk Koin Rp500");
Serial.println("koin=Rp 500, Saldo: Rp2000");
tone(2, 4200, 799);
}
}
}
if (state == SALDO_5001000) {
if (x >= 33) {
state = KOIN_MASUK5;
time5 = millis();
tone(2, 4200, 40);
Serial.println("snsr1,");
Serial.println("start wkt");
}
}
else if ((state == KOIN_MASUK5) && ((digitalRead(13)))) {
if ((digitalRead(12)) && (state == KOIN_MASUK5)) {
unsigned long diff5 = (millis() - time5);
Serial.println("snsr2,");
Serial.println("stop wkt");
Serial.print("jeda wkt: ");
Serial.print(diff5);
Serial.println(" ms");
if (diff5 > jeda_waktu) {
state = SALDO_50010001000;
LcdInitialise();
LcdClear();
LcdString(" diterima Saldo=Rp2500 Pilih Produk Koin Rp1000");
Serial.println("koin=Rp 1000, Saldo: Rp2500");
tone(2, 4200, 799);
}
else if (diff5 < jeda_waktu) {
state = SALDO_5001000500;
LcdInitialise();
LcdClear();
LcdString(" diterima Saldo=Rp2000 Pilih Produk Koin Rp500");
Serial.println("koin=Rp 500, Saldo: Rp2000");
tone(2, 4200, 799);
}
}
}
if (state == SALDO_1000) {
if (x >= 33) {
state = KOIN_MASUK6;
time6 = millis();
tone(2, 4200, 40);
Serial.println("snsr1,");
Serial.println("start wkt");
}
}
else if ((state == KOIN_MASUK6) && ((digitalRead(13)))) {
if ((digitalRead(12)) && (state == KOIN_MASUK6)) {
unsigned long diff6 = (millis() - time6);
Serial.println("snsr2,");
Serial.println("stop wkt");
Serial.print("jeda wkt: ");
Serial.print(diff6);
Serial.println(" ms");
if (diff6 > jeda_waktu) {
state = SALDO_10001000;
LcdInitialise();
LcdClear();
LcdString(" diterima Saldo=Rp2000 Pilih Produk Koin Rp1000");
Serial.println("koin=Rp 1000, Saldo: Rp2000");
tone(2, 4200, 799);
}
else if (diff6 < jeda_waktu) {
state = SALDO_1000500;
LcdInitialise();
LcdClear();
LcdString(" diterima Saldo=Rp1500 Tambah Koin Koin Rp500");
Serial.println("koin=Rp 500, Saldo: Rp1500");
tone(2, 4200, 299);
}
}
}
if (state == SALDO_1000500) {
if (x >= 33) {
state = KOIN_MASUK7;
time7 = millis();
tone(2, 4200, 40);
Serial.println("snsr1,");
Serial.println("start wkt");
}
}
else if ((state == KOIN_MASUK7) && ((digitalRead(13)))) {
if ((digitalRead(12)) && (state == KOIN_MASUK7)) {
unsigned long diff7 = (millis() - time7);
Serial.println("snsr2,");
Serial.println("stop wkt");
Serial.print("jeda wkt: ");
Serial.print(diff7);
Serial.println(" ms");
if (diff7 > jeda_waktu) {
state = SALDO_10005001000;
LcdInitialise();
LcdClear();
LcdString(" diterima Saldo=Rp2500 Pilih Produk Koin Rp1000");
Serial.println("koin=Rp 1000, Saldo: Rp2500");
tone(2, 4200, 799);
}
else if (diff7 < jeda_waktu) {
state = SALDO_1000500500;
LcdInitialise();
LcdClear();
LcdString(" diterima Saldo=Rp2000 Pilih Produk Koin Rp500");
Serial.println("koin=Rp 500, Saldo: Rp2000");
tone(2, 4200, 799);
}
}
}
else if ((state == SALDO_500500500500)||(state == SALDO_5005005001000)||(state == SALDO_5001000500)||(state == SALDO_50010001000)||(state == SALDO_5005001000)||(state == SALDO_10001000)||(state == SALDO_1000500500)||(state == SALDO_10005001000)) {
if (((( digitalRead(13) && ( ( digitalRead(9) ) && ( digitalRead(10) ) ) ) && digitalRead(17) )) && ((digitalRead(8)))) {
LcdInitialise();
LcdClear();
LcdString(" Mohon Menunggu");
Serial.println("pb1");
tone(2, 4200, 200);
delay( 2500 );
digitalWrite( 8 , LOW );
Serial.println("motor1");
}
else {
if ( (!(digitalRead(8)) && (!(digitalRead(11)) ))) {
digitalWrite( 8 , HIGH );
LcdInitialise();
LcdClear();
LcdString(" Terima Kasih");
tone(2, 4200, 100);
delay( 150 );
tone(2, 4200, 100);
Serial.println("produk1 jatuh");
delay( 4000 );
digitalWrite( 13 , LOW );
state = KOIN_KELUAR;
}
else {
}
}
if (((( ( digitalRead(13) && ( ( digitalRead(8) ) && ( digitalRead(10) ) ) ) && digitalRead(18) )) && ((digitalRead(9))))) {
LcdInitialise();
LcdClear();
LcdString(" Mohon Menunggu");
Serial.println("pb2");
tone(2, 4200, 200);
delay( 2500 );
digitalWrite( 9 , LOW );
Serial.println("motor2");
}
else {
if ( (!(digitalRead(9)) && (!(digitalRead(15)) ))) {
digitalWrite( 9 , HIGH );
LcdInitialise();
LcdClear();
LcdString(" Terima Kasih");
tone(2, 4200, 100);
delay( 150 );
tone(2, 4200, 100);
Serial.println("produk2 jatuh");
delay( 4000 );
digitalWrite( 13 , LOW );
state = KOIN_KELUAR;
}
else {
}
}
if (((( ( digitalRead(13) && ( ( digitalRead(8) ) && ( digitalRead(9) ) ) ) && digitalRead(19) )) && ((digitalRead(10))))) {
LcdInitialise();
LcdClear();
LcdString(" Mohon Menunggu");
Serial.println("pb3");
tone(2, 4200, 200);
delay( 2500 );
digitalWrite( 10 , LOW );
Serial.println("motor3");
}
else {
if ( (!(digitalRead(10)) && (!(digitalRead(16)) ))) {
digitalWrite( 10 , HIGH );
LcdInitialise();
LcdClear();
LcdString(" Terima Kasih");
tone(2, 4200, 100);
delay( 150 );
tone(2, 4200, 100);
Serial.println("produk3 jatuh");
delay( 4000 );
digitalWrite( 13 , LOW );
state = KOIN_KELUAR;
}
else {
}
}
}
else if ((state == KOIN_KELUAR)) {
if (((x <= 33) && !digitalRead(12)) && (!digitalRead(13))) {
state = SIAP;
LcdInitialise();
LcdClear();
LcdString(" Masukkan Koin Rp500 atau Koin Rp1000 @ Rp2000");
Serial.println("=> Siap");
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment