Skip to main content

Input & output ESP32

Persiapan

persiapan.

Komponen

komponen

Skema rangkaian

skema rangkaian

Skematik Basics.png

Pemrograman

let's coding...

const int buttonPin = 4;
const int ledPin = 23;

int buttonState = 0;
int iter = 0;

void setup(){
  Serial.begin(115200);
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

void loop(){
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }
}

 

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

Skematik Advance.png