#include <stdio.h>
#include <avr/io.h>
#include <stdarg.h>
#include <util/delay.h>
#include <Arduino.h>
void adc_init() {
ADMUX = (1 << REFS0); // Referensi AVcc, pilih ADC0
ADCSRA = (1 << ADEN) | (1 << ADPS1) | (1 << ADPS0); // Enable ADC, prescaler 8
}
uint16_t read_adc(uint8_t channel) {
ADMUX = (ADMUX & 0xF0) | (channel & 0x0F); // Pilih channel ADC
ADCSRA |= (1 << ADSC); // Mulai konversi
while (ADCSRA & (1 << ADSC)); // Tunggu hingga konversi selesai
return ADC;
}
int main() {
Serial.begin(9600);
adc_init(); // Inisialisasi ADC
while (1) {
uint16_t adc_val = read_adc(0); // Baca dari ADC0
float voltage = (adc_val * 5.0) / 1023.0; // Konversi ke tegangan
char voltage_str[10];
dtostrf(voltage, 4, 2, voltage_str); // Konversi float ke string dengan 2 angka setelah koma
// Menyusun string dengan sprintf
char buffer[50];
sprintf(buffer, "ADC = %d, Tegangan = %s V", adc_val, voltage_str);
// Kirim string ke Serial Monitor
Serial.println(buffer); // Kirim data ke Serial Monitor
_delay_ms(500); // Delay 1 detik
}
return 0;
}