การเขียนไปยังข้อผิดพลาดมาตรฐาน

Arduino:
การเขียนไปยังข้อผิดพลาดมาตรฐาน

วิธีการ:

Arduino โดยพื้นฐานแล้วไม่มีการแยกแยะระหว่าง standard output และ standard error เหมือนกับระบบคอมพิวเตอร์แบบเดิม ทั้ง Serial.print() และ Serial.println() เขียนไปยัง serial output เดียวกัน ซึ่งโดยปกติจะดูได้ใน Arduino IDE Serial Monitor อย่างไรก็ตาม เราสามารถเลียนแบบการเขียนไปยัง stderr โดยการจัดรูปแบบข้อความแสดงข้อผิดพลาดอย่างเฉพาะเจาะจงหรือนำไปยังเอาท์พุตอื่น เช่น ไฟล์บน SD card หรือผ่านการเชื่อมต่อเครือข่าย

เพื่อเลียนแบบ stderr คุณสามารถเติมคำนำหน้าข้อความแสดงข้อผิดพลาดด้วยแท็กเช่น “ERROR:” เพื่อแยกความแตกต่างใน Serial Monitor:

void setup() {
  Serial.begin(9600); // เริ่มการสื่อสารแบบ serial ที่อัตราบอด 9600
}

void loop() {
  int result = someFunction();
  if (result == -1) {
    // การเลียนแบบ stderr โดยการเติมคำนำหน้าข้อความแสดงข้อผิดพลาด
    Serial.println("ERROR: ฟังก์ชันไม่สามารถปฏิบัติการได้.");
  } else {
    Serial.println("ฟังก์ชันปฏิบัติการสำเร็จ.");
  }
  delay(1000); // รอหนึ่งวินาทีก่อนเริ่ม loop ใหม่
}

int someFunction() {
  // ฟังก์ชันปลอมที่ส่งกลับ -1 ในกรณีข้อผิดพลาด
  return -1;
}

ตัวอย่างผลลัพธ์ใน Arduino IDE Serial Monitor อาจดูเช่นนี้:

ERROR: ฟังก์ชันไม่สามารถปฏิบัติการได้.

สำหรับโปรเจกต์ที่ต้องการวิธีการที่ซับซ้อนกว่า รวมถึงการเขียนไปยังเอาท์พุตทางกายภาพที่แตกต่างกัน อาจจำเป็นต้องใช้ไลบรารีของบุคคลที่สามหรือฮาร์ดแวร์เพิ่มเติม เช่น การบันทึกข้อความแสดงข้อผิดพลาดไปยัง SD card ต้องใช้ไลบรารี SD:

#include <SPI.h>
#include <SD.h>

File myFile;

void setup() {
  Serial.begin(9600);
  if (!SD.begin()) {
    Serial.println("ERROR: เริ่มต้น SD card ล้มเหลว!");
    return;
  }
  
  myFile = SD.open("error.log", FILE_WRITE);
  if (myFile) {
    myFile.println("ERROR: ฟังก์ชันไม่สามารถปฏิบัติการได้.");
    myFile.close(); // ตรวจสอบให้แน่ใจว่าปิดไฟล์เพื่อบันทึกเนื้อหา
  } else {
    Serial.println("ERROR: เปิดไฟล์ error.log ล้มเหลว!");
  }
}

void loop() {
  // โค้ดหลักของคุณจะอยู่ที่นี่
}

ด้วยวิธีนี้ คุณแยกผลลัพธ์ปกติของโปรแกรมและข้อความแสดงข้อผิดพลาดโดยสิ้นเชิงโดยการนำหลังคาไปยังไฟล์ error.log บน SD card ทำให้สามารถวิเคราะห์หลังเกิดเหตุได้โดยไม่ทำให้ช่องทางเอาท์พุตหลักเกะกะ