ผมทำรถบังคับด้วย IR remote + L298n แต่ตัว IR remote รับสัญญาณแต่ไม่ทำงานตามคำสั่งเกิดจากอะไรครับ

อย่างที่บอกครับ ผมทำโครงงานหุ่นยนต์ดูดฝุ่นด้วย IR remote + L298n + sensor ultrasonic แต่ตอนนี้เอาแค่รถบังคับก่อนจึงยังไม่ใช้ sensor ultrasonic ตัว IR remote รับสัญญาณปกติไฟ feedback ขึ้นแล้ว เช็คกับโค้ดให้มันแสดงปุ่มที่กดไปในมอร์นิเตอร์แล้วขึ้นปกติ แต่ไม่ทำงานตามคำสั่งเกิดจากอะไรครับ ลองพยายามเองมาซักพักแล้ว พรุ่งนี้เดดไลน์เลยมาตั้งขอความเห็นไว้ก่อน ใครพอมีความรู้ช่วยแนะนำได้ไมครับ ขอบคุณครับ

โค้ดที่ใช้ครับ

#include <IRremote.h>
// กำหนดขาเชื่อมต่อ IR Receiver
const int recv_pin = 11;
// กำหนดขาเชื่อมต่อ L298N
#define PWM_ML 3                                         // กำหนดขา PWM_ML
#define in1_ML 2                                           // กำหนดขา in1_ML 
#define in2_ML 4                                           // กำหนดขา in2_ML 
#define in1_MR 5                                           // กำหนดขา in1_MR 
#define in2_MR 7                                           // กำหนดขา in2_MR 
#define PWM_MR 6                                        // กำหนดขา PWM_MR 
int SpeedR = 255;                                      // ความเร็วของมอเตอร์ด้านขวา
int SpeedL = 255;                                      // ความเร็วของมอเตอร์ด้านซ้าย //140
void setup() {
  Serial.begin(9600);  // เปิดการเชื่อมต่อ Serial Monitor
  IrReceiver.begin(recv_pin, ENABLE_LED_FEEDBACK);
  pinMode(PWM_ML, OUTPUT);                    // ตั้งค่า PWM_ML เป็น OUTPUT
  pinMode(in1_ML, OUTPUT);                    // ตั้งค่า in1_ML เป็น OUTPUT
  pinMode(in2_ML, OUTPUT);                    // ตั้งค่า in2_ML เป็น OUTPUT
  pinMode(in1_MR, OUTPUT);                    // ตั้งค่า in1_MR เป็น OUTPUT
  pinMode(in2_MR, OUTPUT);                    // ตั้งค่า in2_MR เป็น OUTPUT
  pinMode(PWM_MR, OUTPUT);                    // ตั้งค่า PWM_MR เป็น OUTPUT
}
void loop() {
 if (IrReceiver.decode())
  {
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
    IrReceiver.printIRResultShort(&Serial);
    switch(IrReceiver.decodedIRData.decodedRawData)
    {
      case 0xE718FF00: //รหัสปุ่ม moveForward
      moveForward();
      break;
    
    case 0xAD52FF00:  // รหัสปุ่ม Backward
      moveBackward();
      break;
    
    case 0xF708FF00:  // รหัสปุ่ม Left
      turnLeft();
      break;
    
    case 0xA55AFFF00:  // รหัสปุ่ม Right
      turnRight();
      break;
    
    case 0xE31FFF00:  // รหัสปุ่ม Stop
      stopMoving();
      break;
    }
    IrReceiver.resume();
  }
}
// สร้างฟังก์ชันสำหรับการเคลื่อนที่ไปข้างหน้า
void moveForward() {
  digitalWrite(in1_ML, LOW);                            // ตั้งค่า in1_ML เป็น LOW
  digitalWrite(in2_ML, HIGH);                            // ตั้งค่า in2_ML เป็น HIGH
  analogWrite(PWM_ML, SpeedL);                    // ตั้งค่า PWM_ML ให้มอเตอร์ทำงานด้วยความเร็ว SpeedL
  digitalWrite(in1_MR, LOW);                            // ตั้งค่า in1_MR เป็น LOW
  digitalWrite(in2_MR, HIGH);                            // ตั้งค่า in2_MR เป็น HIGH
  analogWrite(PWM_MR, SpeedR);                    // ตั้งค่า PWM_MR ให้มอเตอร์ทำงานด้วยความเร็ว SpeedR
}

// สร้างฟังก์ชันสำหรับการหยุดเคลื่อนที่
void stopMoving() {
  digitalWrite(in1_ML, HIGH);                           // ตั้งค่า in1_ML เป็น LOW
  digitalWrite(in2_ML, HIGH);                           // ตั้งค่า in2_ML เป็น LOW
  analogWrite(PWM_ML, 0);                            // ตั้งค่า PWM_ML ให้มอเตอร์หยุดทำงาน
  digitalWrite(in1_MR, HIGH);                           // ตั้งค่า in1_MR เป็น LOW
  digitalWrite(in2_MR, HIGH);                           // ตั้งค่า in2_MR เป็น LOW
  analogWrite(PWM_MR, 0);                            // ตั้งค่า PWM_MR ให้มอเตอร์หยุดทำงาน
}
// สร้างฟังก์ชันสำหรับการเลี้ยวซ้าย
void turnLeft() {
  digitalWrite(in1_ML, HIGH);                           // ตั้งค่า in1_ML เป็น HIGH
  digitalWrite(in2_ML, LOW);                           // ตั้งค่า in2_ML เป็น HIGH
  analogWrite(PWM_ML, 255);                            // ตั้งค่า PWM_ML ให้มอเตอร์หยุดทำงาน
  digitalWrite(in1_MR, LOW);                          // ตั้งค่า in1_MR เป็น LOW
  digitalWrite(in2_MR, HIGH);                             // ตั้งค่า in2_MR เป็น HIGH
  analogWrite(PWM_MR, 255);                          // ตั้งค่า PWM_MR ให้มอเตอร์ทำงานด้วยความเร็ว 170
  // รอ 250 มิลลิวินาทีก่อนหยุดหมุน
}

// สร้างฟังก์ชันสำหรับการเลี้ยวขวา
void turnRight() {
  digitalWrite(in1_ML, LOW);                         // ตั้งค่า in1_ML เป็น LOW
  digitalWrite(in2_ML, HIGH);                        // ตั้งค่า in2_ML เป็น HIGH
  analogWrite(PWM_ML, 255);                      // ตั้งค่า PWM_ML ให้มอเตอร์ทำงานด้วยความเร็ว 150
  digitalWrite(in1_MR, HIGH);                       // ตั้งค่า in1_MR เป็น HIGH
  digitalWrite(in2_MR, LOW);                       // ตั้งค่า in2_MR เป็น HIGH
  analogWrite(PWM_MR, 255);                        // ตั้งค่า PWM_MR ให้มอเตอร์หยุดทำงาน
}
void moveBackward() {
  digitalWrite(in1_ML, LOW);                         // ตั้งค่า in1_ML เป็น LOW
  digitalWrite(in2_ML, HIGH);                        // ตั้งค่า in2_ML เป็น HIGH
  analogWrite(PWM_ML, 255);                      // ตั้งค่า PWM_ML ให้มอเตอร์ทำงานด้วยความเร็ว 150
  digitalWrite(in1_MR, LOW);                       // ตั้งค่า in1_MR เป็น HIGH
  digitalWrite(in2_MR, HIGH);                       // ตั้งค่า in2_MR เป็น HIGH
  analogWrite(PWM_MR, 255);                        // ตั้งค่า PWM_MR ให้มอเตอร์หยุดทำงาน
}
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่