Arduino with keypad, servo, I2C, Seven segment, oled, buzzer, led
Program must do
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <TM1637Display.h>
#include <Servo.h>
#define CLK 7
#define DIO 6
#define RED 53
#define YELLOW 51
#define GREEN 49
#define BUZZER 47
int potpin = 0; // analog pin used to connect the potentiometer
int val,out; // variable to read the value from the analog pin
TM1637Display display(CLK, DIO);
Servo myservo;
LiquidCrystal_I2C lcd(0x27, 20, 4);
const byte ROWS = 4; //4 baris
const byte COLS = 4; //4 kolom
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte colPins[COLS] = {31, 33, 35, 37}; // pin 2,3,4,5 untuk pin kolom keypad (lihat gambar)
byte rowPins[ROWS] = {23, 25, 27, 29}; // pin 6,7,8,9 untuk pin baris keypad (lihat gambar)
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int kondisi=0,a=0,b=0,c=0,d=0,total=0,e;
String inpass,password="2013";
void setup() {
// put your setup code here, to run once:
lcd.begin(20, 4);
lcd.init();
lcd.backlight();
lcd.setCursor(6, 1);
lcd.print("WELCOME");
//delay (2000);
for (int f=0;f<3;f++)
{
digitalWrite(53,HIGH);
digitalWrite(51,HIGH);
digitalWrite(49,HIGH);
delay(1000);
digitalWrite(53,LOW);
digitalWrite(51,LOW);
digitalWrite(49,LOW);
delay(1000);
}
lcd.clear();
myservo.attach(5);
//SEVENSEGMENT TM1637
display.showNumberDec(0, true);
total = 0000;
display.setBrightness(4);
pinMode(53,OUTPUT);
pinMode(51,OUTPUT);
pinMode(49,OUTPUT);
pinMode(47,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
while (kondisi == 0)
{
char key = keypad.getKey();
lcd.setCursor (0,0);
lcd.print("INPUT PASSWORD :");
if (key)
{
if (key != 'A' && key != 'B' && key != 'C' && key != 'D' && key != '*' && key != '#')
{
if (key == '0')
{
a = b;
b = c;
c = d;
d = 0;
total = (a*1000) + (b*100) + (c*10) + d;
}
else if (key == '1')
{
a = b;
b = c;
c = d;
d = 1;
total = (a*1000) + (b*100) + (c*10) + d;
}
else if (key == '2')
{
a = b;
b = c;
c = d;
d = 2;
total = (a*1000) + (b*100) + (c*10) + d;
}
else if (key == '3')
{
a = b;
b = c;
c = d;
d = 3;
total = (a*1000) + (b*100) + (c*10) + d;
}
else if (key == '4')
{
a = b;
b = c;
c = d;
d = 4;
total = (a*1000) + (b*100) + (c*10) + d;
}
else if (key == '5')
{
a = b;
b = c;
c = d;
d = 5;
total = (a*1000) + (b*100) + (c*10) + d;
}
else if (key == '6')
{
a = b;
b = c;
c = d;
d = 6;
total = (a*1000) + (b*100) + (c*10) + d;
}
else if (key == '7')
{
a = b;
b = c;
c = d;
d = 7;
total = (a*1000) + (b*100) + (c*10) + d;
}
else if (key == '8')
{
a = b;
b = c;
c = d;
d = 8;
total = (a*1000) + (b*100) + (c*10) + d;
}
else if (key == '9')
{
a = b;
b = c;
c = d;
d = 9;
total = (a*1000) + (b*100) + (c*10) + d;
}
inpass += key;
/*e++;
if (e>4)
{
total=0;
inpass="";
}*/
}
else if (key == 'C')
{
a = b = c = d = total = 0;
inpass = "";
}
else if (key == '#')
{
kondisi = 1;
lcd.clear();
}
}
display.showNumberDec(total, true);
}
while(kondisi ==1 )
{
if (inpass== password)
{
lcd.setCursor (0,0);
lcd.print("PASSWORD BENAR");
a = b = c = d = total = 0;
inpass = "";
display.showNumberDec(total, true);
delay (1000);
kondisi=2;
lcd.clear();
}
else
{
lcd.setCursor (0,0);
lcd.print("PASSWORD SALAH !!!");
a = b = c = d = total = 0;
inpass = "";
delay (1000);
kondisi=-0;
lcd.clear();
}
}
while (kondisi==2)
{
char key = keypad.getKey();
lcd.setCursor (0,0);
lcd.print("MENU PILIHAN :");
lcd.setCursor (0,1);
lcd.print("1. SERVO");
lcd.setCursor (10,1);
lcd.print("4. C UP");
lcd.setCursor (0,2);
lcd.print("2. POT");
lcd.setCursor (10,2);
lcd.print("5. C DOWN");
lcd.setCursor (0,3);
lcd.print("3. OLED");
lcd.setCursor (10,3);
lcd.print("6. BUZZER");
if (key=='1')
{
lcd.clear();
kondisi=3;
}
else if (key=='2')
{
lcd.clear();
kondisi=4;
}
else if (key=='3')
{
lcd.clear();
kondisi=5;
}
else if (key=='4')
{
lcd.clear();
kondisi=6;
}
else if (key=='5')
{
lcd.clear();
kondisi=7;
}
else if (key=='6')
{
lcd.clear();
kondisi=8;
}
}
while (kondisi==3)
{
char key = keypad.getKey();
lcd.setCursor (0,0);
lcd.print("Servo Jalan");
myservo.write(0);
//delay(1000);
for (int g=0;g<1000;g++)
{
delay(1);
if (key=='*')
{
lcd.clear();
kondisi=2;
}
}
myservo.write(90);
//delay(1000);
for (int h=0;h<1000;h++)
{
delay(1);
if (key=='*')
{
lcd.clear();
kondisi=2;
}
}
myservo.write(180);
//delay(1000);
for (int i=0;i<1000;i++)
{
delay(1);
if (key=='*')
{
lcd.clear();
kondisi=2;
}
}
}
while (kondisi==4)
{
char key = keypad.getKey();
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
out = map(val, 0, 1023, 0, 100); // scale it to use it with the servo (value between 0 and 180)
lcd.setCursor (0,0);
lcd.print("POTENSIO");
lcd.setCursor (0,2);
lcd.print("ANALOG:");
lcd.setCursor (7,2);
lcd.print(val);
lcd.setCursor (0,3);
lcd.print("PERSEN:");
lcd.setCursor (7,3);
lcd.print(out);
if (key=='*')
{
lcd.clear();
kondisi=2;
}
}
while (kondisi==5)
{
}
while (kondisi==6)
{
}
while (kondisi==7)
{
}
while (kondisi==8)
{
char key = keypad.getKey();
lcd.setCursor (0,0);
lcd.print("BUZZER AKTIF");
digitalWrite(47, HIGH);
if (key=='*')
{
lcd.clear();
kondisi=2;
}
}
}