#include <U8g2lib.h>
#include <Servo.h>
// Use software I2C with correct pins for your Nucleo board
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* SCL=*/ PB6, /* SDA=*/ PB7, /* RESET=*/ U8X8_PIN_NONE);
#define JOY_X A0 // PA0
#define JOY_Y A1 // PA1
#define JOY_BTN PA2 // PA2
#define LED_PIN PB4 // PB4
#define SERVO_PIN PA6 // PA6
Servo myServo;
void setup() {
pinMode(JOY_BTN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
myServo.attach(SERVO_PIN);
u8g2.begin();
}
void loop() {
int xVal = analogRead(JOY_X);
int yVal = analogRead(JOY_Y);
int btnState = digitalRead(JOY_BTN);
// Map 12-bit ADC (0-4095) to servo angle (0-180)
int angle = map(xVal, 0, 4095, 0, 180);
myServo.write(angle);
// LED control thresholds (adjust if needed)
if (yVal > 3000) {
digitalWrite(LED_PIN, HIGH);
} else if (yVal < 1000) {
digitalWrite(LED_PIN, LOW);
}
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_6x10_tf);
u8g2.setCursor(0, 10);
u8g2.print("Angle: ");
u8g2.print(angle);
u8g2.setCursor(0, 25);
u8g2.print("LED: ");
u8g2.print((digitalRead(LED_PIN)) ? "ON" : "OFF");
u8g2.setCursor(0, 40);
u8g2.print("Button: ");
u8g2.print((btnState == LOW) ? "Pressed" : "Released");
u8g2.sendBuffer();
delay(100);
}