Hallo miteinander,
in einem Größeren Projekt kann ich per Serielle Schnittstelle Befehle absetzen, einer davon soll sein.
-- Sensoren_TEST --
Hierbei geht es darum das alle Hinterlegten Sensoren (im Array) mit der PIN Nummer in Spalten ausgegeben werden (mit Tab getrennt).
Wenn einer der Sensoren jetzt den Status ändern dann soll eine Neue Zeile mit dem zustand aller Sensoren ausgegeben werden.
Der Sensoren_TEST soll mit dem Befehl END auch wieder beendet werden.
Da das Projekt größer ist habe ich die Funktion in einem Separaten Sketch entwickelt.
Sprich Befehle über die Serielle Schnittstelle werden erst ein mal ignoriert.
Ich habe das auch alle hin bekommen was ich möchte, ich habe nur etwas Bauchschmerzen wie ich die verschiedenen Status der Sensoren Überwache bzw. auf Wechsel prüfe.
Mir kommt das sehr Kompliziert vor was ich da gemacht habe.
Daher meine Frage an euch, mache ich das so richtig oder macht man das auf ein andere weise eleganter?
Gruß Mücke
int Endstop_Pins[] = {22, 23, 24, 25, 26, 27, 28}; // PIN Nr. für die Induktive Sensoren (Endstop)
int Endstop_Status[]={ 0, 0, 0, 0, 0, 0, 0}; // Staus der PINS der Induktive Sensoren (Endstop)
void setup() {
// Installiren des Seriellen Schnittstelle
Serial.begin(9600);
// Endstop als Eingang definiren
for (byte i = 0; i < (sizeof(Endstop_Pins) / sizeof(Endstop_Pins[0])); i++)
{pinMode(Endstop_Pins[i], INPUT);}
// Kopfzeile für Induktive Sensoren (Endstop) TEST aufrufen
sensoren_test_kopf();
}
void loop() {
sensoren_test();
}
void sensoren_test() {
bool Ausgabe = false; // true = Sensor Status hat gewechselt or false = Sensor Status hat nicht gewechselt
// Sensoren eingang auf Status wechsel Prüfen
for (byte i = 0; i < (sizeof(Endstop_Pins) / sizeof(Endstop_Pins[0])); i++){
// Bei Status wechel merken das ausgabe erfeolgen soll
if (Endstop_Status[i] != digitalRead(Endstop_Pins[i])){ Ausgabe = true; }
// Aktuellen Status merken
Endstop_Status[i] = digitalRead(Endstop_Pins[i]);
}
// Ausgabe aller PIN Stause in einer neuen Zeile, nur wenn eine änderung vorlag
if (Ausgabe) {
for (byte i = 0; i < (sizeof(Endstop_Pins) / sizeof(Endstop_Pins[0])); i++){
Serial.print(digitalRead(Endstop_Pins[i])); // Status ausgabe
Serial.print("\t"); // Tab ausgeben
}
Serial.println(F("")); // Zeilenumbruch ausgeben
}
}
void sensoren_test_kopf() {
Serial.println(F("OK, Induktive Sensoren (Endstop) TEST wurde gestartet"));
Serial.println(F(" Beenden mit Befehl END"));
Serial.println(F(""));
Serial.println(F("Spalten: Sensoren PIN Nr."));
Serial.println(F("Neue Zeile: nur bei Statusänderung"));
for (byte i = 0; i < (sizeof(Endstop_Pins) / sizeof(Endstop_Pins[0])); i++){
Serial.print(Endstop_Pins[i]); // PIN Nummer ausgeben
Serial.print("\t"); // Tab ausgeben
}
Serial.println(F("")); // Zeilenumbruch ausgeben
}