Input & output ESP32
Persiapan
persiapan.
Komponen
komponen
Skema rangkaian
skema rangkaian
Pemrograman
let's coding...
Penjelasan kode
How the code works
Hasil
the result
Modifikasi program
let's advance
Modifikasi kode
#include <Wire.h>
#include <WiFi.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Membuat LED blink dan buzzer menyala dengan dikontrol oleh dua tombol
// Tombol pertama untuk mengeset berapa kali led atau buzzer menyala (<10)
// Tombol kedua untuk mengatur apakah hanya led, buzzer atau kedua-duanya yang menyala
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
const int button1Pin = 4;
const int button2Pin = 2;
const int ledPin = 23;
const int buzzerPin = 27;
int button1State = 0;
int button2State = 0;
int modeState = 0;
int actionState = 0;
void setup(){
Serial.begin(115200);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)){
Serial.println("OLED tidak terkoneksi");
for(;;);
}
pinMode(button1Pin, INPUT);
pinMode(button2Pin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
// welcome message Smart-x di OLED
delay(2000);
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(25, 31);
display.print("SMART-X ITB");
display.display();
delay(5000);
display.clearDisplay();
delay(500);
}
// Fungsi untuk menyalakan led dan buzzer
void ledBlink(int t, int mode){
for (int i=1; i<=t; i++){
switch (mode){
case 0:
digitalWrite(ledPin,HIGH);
digitalWrite(buzzerPin,HIGH);
delay(100);
digitalWrite(ledPin,LOW);
digitalWrite(buzzerPin, LOW);
delay(100);
break;
case 1:
digitalWrite(ledPin,HIGH);
delay(100);
digitalWrite(ledPin,LOW);
delay(100);
break;
case 2:
digitalWrite(buzzerPin,HIGH);
delay(100);
digitalWrite(buzzerPin,LOW);
delay(100);
break;
}
}
}
// Fungsi untuk membunyikan buzzer
// Bunyi notifikasi selesai menyeting beep 3x
void beepSet(int times){
for (int i=1; i<=times; i++){
digitalWrite(buzzerPin, HIGH);
delay(50);
digitalWrite(buzzerPin, LOW);
delay(50);
}
}
// Fungsi untuk bunyi reset (beep panjang)
void beepReset(){
digitalWrite(buzzerPin, HIGH);
delay(1500);
digitalWrite(buzzerPin, LOW);
}
// Fungsi untuk menampilkan pesan di OLED
void pesanOled(int modeState, int actionState) {
display.clearDisplay();
display.setCursor(25, 0);
display.print("SMART-X ITB");
display.setCursor(0, 21);
display.print("Mode : ");
switch (modeState) {
case 0:
display.print("LED & BUZ");
break;
case 1:
display.print("LED");
break;
case 2:
display.print("BUZ");
}
display.setCursor(0,31);
display.print("Beep : ");
display.print(actionState + 1);
display.print("x");
display.display();
}
// Main program yang harus dijalankan
void loop(){
button1State = digitalRead(button1Pin);
button2State = digitalRead(button2Pin);
pesanOled(modeState, actionState);
if (button1State == HIGH){
Serial.println("Button 1: ditekan");
actionState ++;
delay(500);
ledBlink(actionState, modeState);
if (actionState >= 10){
actionState = 0;
}
}
// Mengubah value button2State untuk mengubah mode
if (button2State == HIGH) {
Serial.println("Button 2 : ditekan ");
modeState ++;
delay(500);
if (modeState == 1) {
beepSet(3);
}
if (modeState == 2) {
beepSet(3);
}
if (modeState == 3) {
modeState = 0;
beepReset();
}
}
}
Skema rangkaian