Arduino:
Kirjoittaminen standardivirheeseen
Kuinka:
Arduino ei natiivisti erota standarditulostetta ja standardivirhettä kuten tavalliset tietokonejärjestelmät tekevät. Sekä Serial.print()
että Serial.println()
-metodit kirjoittavat samaan sarjatulosteeseen, jota tyypillisesti katsellaan Arduino IDE:n sarjamonitorista. Voimme kuitenkin emuloida kirjoittamista stderr:iin erityisesti muotoilemalla virheilmoituksia tai ohjaamalla ne vaihtoehtoiseen tulosteeseen, kuten tiedostoon SD-kortilla tai verkkoyhteyden kautta.
Stderr:n emuloimiseksi voit etuliittää virheilmoitukset tunnisteella kuten “VIRHE:” erottaaksesi ne sarjamonitorissa:
void setup() {
Serial.begin(9600); // Alusta sarjaviestintä 9600 bittinopeudella
}
void loop() {
int tulos = jokuFunktio();
if (tulos == -1) {
// Emuloidaan stderr:iä etuliittämällä virheilmoitus
Serial.println("VIRHE: Funktion suoritus epäonnistui.");
} else {
Serial.println("Funktio suoritettiin onnistuneesti.");
}
delay(1000); // Odota sekunti ennen silmukan uudelleenaloitusta
}
int jokuFunktio() {
// Esimerkkifunktio, joka palauttaa -1 virheessä
return -1;
}
Esimerkkituloste Arduino IDE:n sarjamonitorissa saattaisi näyttää tältä:
VIRHE: Funktion suoritus epäonnistui.
Projekteissa, jotka vaativat monimutkaisempaa lähestymistapaa, mukaan lukien kirjoittaminen eri fyysisiin tulosteisiin, kolmannen osapuolen kirjastojen tai lisälaitteiston käyttö saattaa olla tarpeen. Esimerkiksi virheilmoitusten kirjaaminen SD-kortille vaatii SD
-kirjaston:
#include <SPI.h>
#include <SD.h>
File tiedostoni;
void setup() {
Serial.begin(9600);
if (!SD.begin()) {
Serial.println("VIRHE: SD-kortin alustus epäonnistui!");
return;
}
tiedostoni = SD.open("error.log", FILE_WRITE);
if (tiedostoni) {
tiedostoni.println("VIRHE: Funktion suoritus epäonnistui.");
tiedostoni.close(); // Varmista, että suljet tiedoston sisällön tallentamiseksi
} else {
Serial.println("VIRHE: error.log-tiedoston avaaminen epäonnistui!");
}
}
void loop() {
// Pääkoodisi menisi tähän
}
Tällä lähestymistavalla fyysisesti erotat normaalit ohjelman tulosteet ja virheilmoitukset ohjaamalla jälkimmäiset error.log
-tiedostoon SD-kortilla, mahdollistaen jälkikäteisanalyysit ilman, että pääkanava sotkeentuu.