#include <avr/io.h>
#include <util/delay.h>
#include "./lib/adc.h" // Include the ADC library
#include <stdio.h> // For using sprintf and printf
#define JOYSTICK_HOR 2 // ADC Channel for Joystick Horizontal
#define JOYSTICK_VER 1 // ADC Channel for Joystick Vertical
#define BUTTON_PIN 38 // Digital Pin 38 (D38) for Push Button
// Initialize ADC
void adc_init(void) {
ADCSRA = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // set ADC prescaler to 128
ADMUX = (1 << REFS0); // Use internal Vcc AREF
ADCSRB = 0; // ADC0 source, single conversion mode
ADCSRA |= (1 << ADEN); // Enable ADC
}
// ADC Read function
uint16_t adc_read(uint8_t channel) {
if ((channel >= 0) && (channel <= 7)) { // Fixed logical AND
ADCSRB &= ~(1 << MUX5); // Clear MUX5
ADMUX = (ADMUX & 0xE0) | (channel & 0x07); // Set remaining MUX bits
} else if ((channel >= 8) && (channel <= 15)) {
ADCSRB |= (1 << MUX5); // Set MUX5
ADMUX = (ADMUX & 0xE0) | (channel & 0x07); // Set remaining MUX bits
}
ADCSRA |= (1 << ADSC); // Start conversion
while (ADCSRA & (1 << ADSC)) {} // Wait for conversion to finish
return ADC;
}
void blink_right_to_left() {
for (int i = 7; i >= 0; i--) {
PORTA = (1 << i); // Light up one LED at a time
_delay_ms(500);
}
}
int main() {
DDRA = 0xFF; // Set PORTA as output
PORTA = 0; // Initialize PORTA to LOW
adc_init(); // Initialize ADC
while (1) {
uint16_t horz = adc_read(JOYSTICK_HOR);
uint16_t vert = adc_read(JOYSTICK_VER);
char buffer[50]; // Buffer for holding the strin
// Joystick logic (existing code for joystick movements)
if (horz = 512 & vert = 1023) { // Joystick moved TOP
PORTA = (1 << 0);
}
else if (horz = 0 & vert = 1023) { // Joystick moved TOP-RIGHT
PORTA = (1 << 1);
}
else if (horz = 0 & vert = 512) { // Joystick moved RIGHT
PORTA = (1 << 2);
}
else if (horz = 0 & vert = 0) { // Joystick moved BOTTOM-Right
PORTA = (1 << 3);
}
else if (horz = 512 & vert = 0) { // Joystick moved BOTTOM
PORTA = (1 << 4);
}
else if (horz = 1023 & vert = 0) { // Joystick moved BOTTOM_LEFT
PORTA = (1 << 5);
}
else if (horz = 1023 & vert = 512) { // Joystick moved LEFT
PORTA = (1 << 6);
}
else if (horz = 1023 & vert = 1023) { // Joystick moved TOP-LEFT
PORTA = (1 << 7);
}
}
return 0;
}