#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const int ledPin = 3; // Pin LED
const int buttonPin = 2; // Pin Tombol untuk mengubah baud rate
long baudRates[] = {4800, 9600, 19200, 38400, 57600, 115200}; // Pilihan Baud Rate
unsigned int baudIndex = 0; // Index Baud Rate saat ini (mulai dari 4800)
int buttonState = 0; // Status tombol
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP); // Gunakan resistor pull-up internal
Serial.begin(baudRates[baudIndex]); // Inisialisasi dengan baud rate pertama
Serial.println("Serial Initialized");
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.display();
delay(2000); // Display the initial splash screen for 2 seconds
display.clearDisplay();
display.setTextSize(1); // Ukuran teks kecil
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("Baud Rate: ");
display.println(baudRates[baudIndex]);
display.display();
}
void loop() {
// Cek perubahan tombol baud rate
buttonState = digitalRead(buttonPin);
if (buttonState == LOW) { // Tombol ditekan
delay(50); // Debounce delay
if (digitalRead(buttonPin) == LOW) {
baudIndex = (baudIndex + 1) % 6; // Ganti ke baud rate berikutnya
Serial.begin(baudRates[baudIndex]);
display.clearDisplay();
display.setCursor(0, 0);
display.print("Baud Rate: ");
display.println(baudRates[baudIndex]);
display.display();
while (digitalRead(buttonPin) == LOW); // Tunggu tombol dilepas
delay(50); // Debounce delay
}
}
// Baca data dari serial port dan tampilkan di OLED, serta kontrol LED
if (Serial.available() > 0) {
display.clearDisplay();
display.setCursor(0, 0);
display.print("Baud Rate: ");
display.println(baudRates[baudIndex]);
display.setCursor(0, 16);
String dataString = ""; // Buffer untuk data yang diterima
while (Serial.available() > 0) {
char receivedChar = Serial.read(); // Baca karakter yang diterima
dataString += receivedChar; // Tambahkan ke buffer
}
display.print("Data: ");
display.print(dataString); // Tampilkan data di OLED
display.display();
digitalWrite(ledPin, HIGH); // Nyalakan LED
delay(100); // Tunda sebentar untuk menandakan LED menyala
digitalWrite(ledPin, LOW); // Matikan LED
}
}