// Standard bahasa pemrograman di Mikrokontroler C/C++
// apa itu tipe data?
// apa itu variabel?
// apa itu konstanta?
// apa itu function?
#include <Wire.h> //ini adalah contoh pemanggilan library untuk mengaktifkan komunikasi i2c
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h> //ini adalah contoh pemanggilan library
#define LEBAR_LAYAR 128 //ini adalah contoh lain penggunaan konstanta menggunakan MACRO
#define TINGGI_LAYAR 64
#define GND 0
#define VCC 1
#define MAX_LED 10
Adafruit_SSD1306 oled(LEBAR_LAYAR, TINGGI_LAYAR, &Wire, -1); //ini contoh pemanggilan class yang ada di library
const int8_t pinLED1 = 32; //ini adalah contoh penggunaan konstanta
const int8_t pinLED2 = 33;
const int8_t pinLED3 = 25;
const int8_t pinLED4 = 26;
const int8_t pinLED5 = 27;
const int8_t pinLED6 = 14;
const int8_t pinLED7 = 12;
const int8_t pinLED8 = 13;
const int8_t pinLED9 = 2;
const int8_t pinLED10 = 3;
const int8_t pinLED[MAX_LED] = {pinLED1, pinLED2, pinLED3, pinLED4, pinLED5, pinLED6, pinLED7, pinLED8, pinLED9, pinLED10}; //ini contoh penggunaan array
const int8_t pinPotensio = 34; //ini adalah contoh penggunaan konstanta
uint16_t dataPotensio = 0; //ini adalah contoh penggunaan variabel dengan tipe data integer 16 bit
void setup() {
Serial.begin(115200);
Serial.println("Hello, ESP32!");
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("failed to start SSD1306 OLED"));
while (1);
}
for(int x = 0; x < MAX_LED; x++){
pinMode(pinLED[0], OUTPUT);
}
// pinMode(pinLED1, OUTPUT);
// pinMode(pinLED2, OUTPUT);
// pinMode(pinLED3, OUTPUT);
// pinMode(pinLED4, OUTPUT);
// pinMode(pinLED5, OUTPUT);
// pinMode(pinLED6, OUTPUT);
// pinMode(pinLED7, OUTPUT);
// pinMode(pinLED8, OUTPUT);
// pinMode(pinLED9, OUTPUT);
// pinMode(pinLED10, OUTPUT);
oled.setTextSize(1); // Atur ukuran text
oled.setTextColor(WHITE); // Atur warna text
}
void loop() {
// digitalWrite(pinLED, HIGH);
// delay(200);
// digitalWrite(pinLED, LOW);
// delay(200);
dataPotensio = analogRead(pinPotensio);
int8_t volume = map(dataPotensio, 0, 4095, 0, 100);
oled.clearDisplay(); // clear display
oled.setCursor(0, 0); // Atur posisi text pada display
oled.println("Kuliah Mikro"); // Text yang dicetak
oled.setCursor(0, 30); // Atur posisi text pada display
oled.print(dataPotensio);
oled.setCursor(0, 40); // Atur posisi text pada display
oled.print("Volume : "); // Text yang dicetak
oled.print(volume);
oled.display(); // menampilkan display OLED
kendaliLED(VCC);
tampilanOLED();
}
void kendaliLED(){
if(dataPotensio > 2900){
digitalWrite(pinLED1, HIGH);
} else{
digitalWrite(pinLED1, LOW);
}
// tambahkan jadi 10LED atau boleh pakai LED Bar Graph
Serial.print(dataPotensio);
Serial.print(" ");
Serial.println(analogRead(pinPotensio));
delay(100);
}
void kendaliLED(bool pilihSumber){
if(pilihSumber == 0){
digitalWrite(pinLED1, HIGH);
} else{
if(dataPotensio > 2000){
digitalWrite(pinLED1, LOW);
} else{
digitalWrite(pinLED1, HIGH);
}
}
}
void tampilanOLED(){
// buat tampilan status Potensio seolah olah adalah data volume(suara) satuan % (persen)
// buat tampilan tulisan tugas mikro di baris atas
// buat tulisan Nama Mahasiswa di baris selanjutnya
// buat tulisan "Data Pot:(Nilai Datanya)"
// buat tulisan Status Volume(suara)
}