#include <LiquidCrystal.h>
#include <Servo.h>
#define JOY_X PA1
#define JOY_Y PA0
#define JOY_SW PA2
#define LED_PIN PB1
#define SERVO_PIN PA8 // <-- Moved to a proper PWM-capable pin
#define BUTTON_PIN PA7
Servo myServo;
bool ledState = false;
bool lastButtonState = HIGH;
// RS, EN, D4, D5, D6, D7
LiquidCrystal lcd(PB10, PB11, PB12, PB13, PB14, PB15);
void setup() {
Serial.begin(115200);
pinMode(JOY_SW, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
myServo.attach(SERVO_PIN); // Now works
lcd.begin(16, 2);
lcd.print("Hello Bluepill");
delay(1000);
lcd.clear();
}
void loop() {
int xVal = analogRead(JOY_X);
int yVal = analogRead(JOY_Y);
bool buttonState = digitalRead(JOY_SW);
// Map joystick X to servo angle
int angle = map(xVal, 0, 1023, 0, 180);
for(int i = 0;i<=angle;i++){
myServo.write(i);
delayMicroseconds(15);
}
//myServo.write(angle);
// Toggle LED on button press
if (lastButtonState == HIGH && buttonState == LOW) {
ledState = !ledState;
digitalWrite(LED_PIN, ledState);
}
lastButtonState = buttonState;
// Print values on LCD
lcd.setCursor(0, 0);
lcd.print("X: "); lcd.print(xVal);
lcd.print(" Y: "); lcd.print(yVal);
lcd.setCursor(0, 1);
lcd.print("Servo: "); lcd.print(angle);
lcd.print(" LED: "); lcd.print(ledState ? "ON " : "OFF");
delay(100);
}