// 腳位定義(使用 L/R 命名更直觀) #define L_SPEED 3 // D3:左馬達速度(原 ENA) #define R_SPEED 11 // D11:右馬達速度(原 ENB) #define L_IN1 5 // D5:左馬達 IN1 #define L_IN2 6 // D6:左馬達 IN2 #define R_IN1 9 // D9:右馬達 IN3 #define R_IN2 10 // D10:右馬達 IN4 char command; int speedValue = 150; // 初始速度值(範圍 0~255) void setup() { Serial.begin(9600); pinMode(L_IN1, OUTPUT); pinMode(L_IN2, OUTPUT); pinMode(R_IN1, OUTPUT); pinMode(R_IN2, OUTPUT); pinMode(L_SPEED, OUTPUT); pinMode(R_SPEED, OUTPUT); stopCar(); } void loop() { if (Serial.available()) { command = Serial.read(); // 處理 Vxxx 速度指令 if (command == 'V') { while (Serial.available() < 3); char s1 = Serial.read(); char s2 = Serial.read(); char s3 = Serial.read(); speedValue = (s1 - '0') * 100 + (s2 - '0') * 10 + (s3 - '0'); speedValue = constrain(speedValue, 0, 255); } switch (command) { case 'F': forward(); break; case 'B': backward(); break; case 'L': turnLeft(); break; case 'R': turnRight(); break; case 'S': stopCar(); break; } } } void forward() { analogWrite(L_SPEED, speedValue); analogWrite(R_SPEED, speedValue); digitalWrite(L_IN1, HIGH); digitalWrite(L_IN2, LOW); digitalWrite(R_IN1, HIGH); digitalWrite(R_IN2, LOW); } void backward() { analogWrite(L_SPEED, speedValue); analogWrite(R_SPEED, speedValue); digitalWrite(L_IN1, LOW); digitalWrite(L_IN2, HIGH); digitalWrite(R_IN1, LOW); digitalWrite(R_IN2, HIGH); } void turnLeft() { analogWrite(L_SPEED, speedValue); analogWrite(R_SPEED, speedValue); digitalWrite(L_IN1, LOW); digitalWrite(L_IN2, HIGH); digitalWrite(R_IN1, HIGH); digitalWrite(R_IN2, LOW); } void turnRight() { analogWrite(L_SPEED, speedValue); analogWrite(R_SPEED, speedValue); digitalWrite(L_IN1, HIGH); digitalWrite(L_IN2, LOW); digitalWrite(R_IN1, LOW); digitalWrite(R_IN2, HIGH); } void stopCar() { analogWrite(L_SPEED, 0); analogWrite(R_SPEED, 0); digitalWrite(L_IN1, LOW); digitalWrite(L_IN2, LOW); digitalWrite(R_IN1, LOW); digitalWrite(R_IN2, LOW); }