String input;
bool isPwmPin(int pin) {
return (pin == 3 || pin == 5 || pin == 6 || pin == 9 || pin == 10 || pin == 11);
}
void setup() {
Serial.begin(9600);
while (!Serial) {} // Wait for serial on some boards
Serial.println("Ready.");
Serial.println("Commands:");
Serial.println(" mode <pin> <input|output>");
Serial.println(" write <pin> <0|1>");
Serial.println(" read <pin>");
Serial.println(" aread <pin>");
Serial.println(" awrite <pin> <0-255>");
}
void loop() {
if (Serial.available()) {
String input = Serial.readStringUntil('\n');
input.trim(); // Remove whitespace
if (input.startsWith("mode")) {
int pin;
char modeStr[10];
sscanf(input.c_str(), "mode %d %s", &pin, modeStr);
if (String(modeStr) == "input") {
pinMode(pin, INPUT);
Serial.print("Pin ");
Serial.print(pin);
Serial.println(" set as INPUT");
} else if (String(modeStr) == "output") {
pinMode(pin, OUTPUT);
Serial.print("Pin ");
Serial.print(pin);
Serial.println(" set as OUTPUT");
} else {
Serial.println("Invalid mode. Use 'input' or 'output'");
}
} else if (input.startsWith("write")) {
int pin, val;
sscanf(input.c_str(), "write %d %d", &pin, &val);
digitalWrite(pin, val ? HIGH : LOW);
Serial.print("Pin ");
Serial.print(pin);
Serial.print(" set to ");
Serial.println(val ? "HIGH" : "LOW");
} else if (input.startsWith("read")) {
int pin;
sscanf(input.c_str(), "read %d", &pin);
int val = digitalRead(pin);
Serial.print("Pin ");
Serial.print(pin);
Serial.print(" value: ");
Serial.println(val);
} else if (input.startsWith("aread")) {
int pin;
sscanf(input.c_str(), "aread %d", &pin);
int val = analogRead(pin);
Serial.print("Analog read pin ");
Serial.print(pin);
Serial.print(": ");
Serial.println(val);
} else if (input.startsWith("awrite")) {
int pin, val;
sscanf(input.c_str(), "awrite %d %d", &pin, &val);
if (val < 0) val = 0;
if (val > 255) val = 255;
if (!isPwmPin(pin)) {
Serial.print("Warning: Pin ");
Serial.print(pin);
Serial.println(" does not support PWM. Analog write will behave like digital write.");
}
analogWrite(pin, val);
Serial.print("Analog write pin ");
Serial.print(pin);
Serial.print(" set to ");
Serial.println(val);
} else {
Serial.println("Unknown command");
}
}
}