// Task 2
// Pin definitions
const int LED_PIN = 28; // External LED
const int POT_PIN = 26; // Potentiometer
// Timing variables
unsigned long lastBlink = 0;
unsigned long lastBeat = 0;
// State variables
bool blinkMode = false;
bool ledState = false;
// Blink interval
int blinkInterval = 500;
void setup() {
// Pin modes
pinMode(LED_PIN, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
// UART setup
Serial1.setTX(0); // GP0 = TX
Serial1.setRX(1); // GP1 = RX
Serial1.begin(115200);
Serial1.println("READY ! TYPE ON/OFF/BLINK/NOBLINK/STATUS ");
}
void loop() {
unsigned long currentMillis = millis();
// TODO 1: Heartbeat – onboard LED blinken (millis)
if (currentMillis - lastBeat > 500) {
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
lastBeat = currentMillis;
}
// TODO 2: Poti lesen, Blinkintervall berechnen
int potValue = analogRead(POT_PIN);
blinkInterval = map(potValue, 0, 4095, 50, 1000);
// TODO 3: Blink – externe LED mit Poti-Speed
if (blinkMode) {
if (currentMillis - lastBlink >= blinkInterval) {
ledState = !ledState;
digitalWrite(LED_PIN, ledState);
lastBlink = currentMillis;
}
}
// TODO 4: UART parsen (ON|OFF|BLINK|NOBLINK|STATUS)
if (Serial1.available()) {
String cmd = Serial1.readStringUntil('\n');
cmd.trim();
if (cmd == "ON") {
blinkMode = false;
ledState = true;
digitalWrite(LED_PIN, HIGH);
Serial1.println("ACK:ON");
}
else if (cmd == "OFF") {
blinkMode = false;
ledState = false;
digitalWrite(LED_PIN, LOW);
Serial1.println("ACK:OFF");
}
else if (cmd == "BLINK") {
blinkMode = true;
Serial1.println("ACK:BLINK");
}
else if (cmd == "NOBLINK") {
blinkMode = false;
Serial1.println("ACK:NOBLINK");
}
else if (cmd == "STATUS") {
Serial1.print("ACK:STATUS LED=");
Serial1.print(ledState ? "ON" : "OFF");
Serial1.print(" BLINK=");
Serial1.print(blinkMode ? "YES" : "NO");
Serial1.print(" INTERVAL=");
Serial1.print(blinkInterval);
Serial1.println("ms");
}
else {
Serial1.println("Unknown Error , Try again !");
}
}
}Loading
pi-pico-w
pi-pico-w