Arduino:
Pisanie do standardowego błędu
Jak to zrobić:
Arduino domyślnie nie rozróżnia między standardowym wyjściem a wyjściem błędu, jak to robią konwencjonalne systemy komputerowe. Zarówno metody Serial.print()
jak i Serial.println()
zapisują do tego samego wyjścia szeregowego, które zwykle jest wyświetlane w Monitorze Szeregowym Arduino IDE. Jednak możemy emulować zapis na stderr, specjalnie formatując komunikaty o błędach lub kierując je do alternatywnego wyjścia, takiego jak plik na karcie SD lub przez połączenie sieciowe.
Aby emulować stderr, możesz dodać do komunikatów o błędach etykietę typu “ERROR:”, aby odróżnić je w Monitorze Szeregowym:
void setup() {
Serial.begin(9600); // Inicjalizacja komunikacji szeregowej z prędkością 9600 bodów
}
void loop() {
int result = someFunction();
if (result == -1) {
// Emulowanie stderr przez dodanie przed komunikatem o błędzie
Serial.println("ERROR: Funkcja nie została wykonana.");
} else {
Serial.println("Funkcja została wykonana pomyślnie.");
}
delay(1000); // Oczekuj sekundę przed ponownym rozpoczęciem pętli
}
int someFunction() {
// Fikcyjna funkcja, która zwraca -1 w przypadku błędu
return -1;
}
Przykładowe wyjście w Monitorze Szeregowym Arduino IDE może wyglądać tak:
ERROR: Funkcja nie została wykonana.
Dla projektów wymagających bardziej zaawansowanego podejścia, w tym zapisu na różne fizyczne wyjścia, konieczne może być korzystanie z bibliotek stron trzecich lub dodatkowego sprzętu. Na przykład, zapisywanie komunikatów o błędach na karcie SD wymaga biblioteki SD
:
#include <SPI.h>
#include <SD.h>
File myFile;
void setup() {
Serial.begin(9600);
if (!SD.begin()) {
Serial.println("ERROR: Inicjalizacja karty SD nie powiodła się!");
return;
}
myFile = SD.open("error.log", FILE_WRITE);
if (myFile) {
myFile.println("ERROR: Funkcja nie została wykonana.");
myFile.close(); // Pamiętaj, aby zamknąć plik, aby zapisać zawartość
} else {
Serial.println("ERROR: Otwarcie error.log nie powiodło się!");
}
}
void loop() {
// Tu znajdowałby się Twój główny kod
}
Z takim podejściem fizycznie oddzielasz normalne wyjście programu i komunikaty o błędach, kierując te ostatnie do pliku error.log
na karcie SD, co umożliwia analizę post mortem bez zaciemniania głównego kanału wyjściowego.