ich versuche gerade ein Programm aufzubauen habe aber Schwierigkeiten meine gewollte Struktur hinzubekommen.
Anbei einmal ein Ablaufplan wie es sich verhalten soll und wo es hinspringen soll. Zusätzlich mal meinen Code womit ich es versuche, aber im Endeffekt sehe ich nur noch die Lösung goto wovon ich absolut kein Fan bin.
Hat von euch jemand eine Idee?
int Relai3 = 2;
int Relai1 = 3;
int Relai2 = 4;
int Sensor1 = 5;
int Sensor2 = 6;
int Sensor3 = 7;
int Schalter = 8;
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(Relai3, OUTPUT);//Relai3
pinMode(Relai1,OUTPUT);//Relai1
pinMode(Relai2,OUTPUT);//Relai2
pinMode(Sensor1,INPUT);//Sensor1
pinMode(Sensor2,INPUT);//Sensor2
pinMode(Sensor3,INPUT);//Sensor3
pinMode(Schalter,INPUT);//Schalter
}
// the loop function runs over and over again forever
void loop() {
if (digitalRead(Schalter)==HIGH) {//wenn Schalter=1
if (digitalRead(Sensor1) == HIGH) {
//ruhezustand
//warte 3sekunden
//
}
else
//Lösen
}
else
if (digitalRead(Sensor1) == LOW ) {
//ruhe
//warte 3sekunden
//
}
else
//anziehen
//
}
Du konntest funktionen verwenden die aussagekräftige Namen haben und die dann aufgerufen werden , eventuell mit if.. entsprechend deinen Wünschen. Vorteil zurück gehts von selber an die richtige Stelle. Damit wird ein Programm dann schon üersichtlich, im besten Fall stehen dann im loop nur noch Funktionsaufrufe.
z.B
loop{
leseTemperatur();
Anzeige();
if ( Ist < soll Heizen());
else (Kuelen());
}
Den Vorschlag von my_xy_projekt verstehe ich nicht wirklich was das macht da fehlt mir einfach zu viel wissen.
Rentner wenn ich mich noch recht entsinne gibt es überhaupt richtig Funktionen bei Arduino? weil ich glaube ich hatte das mal so gemacht und das hat eben nicht geklappt weil diese im Prinzip nur interrups waren?
Ist schon lange her mit dem letzten Arduino Projekt
Hallo ,
da verwechselst Du sicher etwas. setup und loop sind ja auch funktionen, halt nur ohne Rückgabewert und ohne Parameter. Der Arduino läuft mit c++ damit gilt fast alles hier. https://de.wikibooks.org/wiki/C%2B%2B-Programmierung/_Inhaltsverzeichnis
und ein paar spezielle Dinge aus der Arduino Referenz.
Beim Bau von endlichen Automaten, wie z.B. dein Problem, oder Parsern, ist goto oftmals ein probates Mittel, um das anzugehen.
Es gibt allerdings auch einen kleinen Berg von Alternativen.
wenn ich dir ein paar Tipps geben darf:
Variablen und Funktionsnamen mit kleinem Buchstaben beginnen lassen.
Den Code mal mit STRG-T in der IDE formatieren, dann sieht man die Einrückungen besser.
Zum Debuggen die Serialle Ausgabe verwenden - damit kannst du exakt nachverfolgen, was dein Code zur Laufzeit macht und wie er auf Eingangsänderungen reagiert.
jedes int überprüfen ob das wirklich 2 byte groß sein muss
Konstant machen, was Konstant sein kann.
constexpr byte relais3 = 2;
constexpr byte relais1 = 3;
constexpr byte relais2 = 4;
constexpr byte sensor1 = 5;
constexpr byte sensor2 = 6;
constexpr byte sensor3 = 7;
constexpr byte schalter = 8;
// the setup function runs once when you press reset or power the board
void setup() {
Serial.begin(115200);
pinMode(relais3, OUTPUT);//Relai3
pinMode(relais1, OUTPUT); //Relai1
pinMode(relais2, OUTPUT); //Relai2
pinMode(sensor1, INPUT); //Sensor1
pinMode(sensor2, INPUT); //Sensor2
pinMode(sensor3, INPUT); //Sensor3
pinMode(schalter, INPUT); //Schalter
}
// the loop function runs over and over again forever
void loop() {
if (digitalRead(schalter) == HIGH)
{
if (digitalRead(sensor1) == HIGH)
{
Serial.println(F("schalter H, sensor1 H"));
//warte 3sekunden
//
}
else
{
Serial.println(F("lösen"));
}
}
else
{
if (digitalRead(sensor1) == LOW ) {
Serial.println(F("ruhe"));
//warte 3sekunden
//
}
else
{
Serial.println(F("anziehen"));
//
}
}
}
(ich habe mir deine Ifs nicht angesehen, nur Klammern gesetzt so dass es kompiliert...)
Hallo,
ob da logisch das ist was Du willst weiß ich nicht. Die Struktur mit den beiden Funktionen ist ok. Du fragst den Schalter ab und verzweigst in zwei Funktionen die je für sich komplex sein können. Nur das mit den Kommentaren macht keinen Sinn.
Doch schon Ich verwirrkliche dabei einen Umpoler und wenn ich umpole und der Verbraucher hat die Spannung noch nicht runtergezogen habe ich einen Potenzialunterschied und das ist erstmal solange ich kein Heizdrat will schlecht. Deshalb lass ich den Verbraucher erstmal Zeit das er die Spannung "verbraucht hat" und somit 0V vorherrscht bevor ich umpole.
Aber ja von Außen betrachtet hast du Recht man könnte denken ich meinte den Schalter
Auf jeden Fall vielen dank das Funktioniert ähnlich wie bei Python =)
Da ist so einiges durchnummeriert.
Das ist meist ein Fehler, oder besser: Unsauber.
Dann sehe ich herzlich wenig Übereinstimmung mit dem Programmlaufplan/Zustandsdiagramm.
Alles klar!
Was versteht man unter dem Begriff Umpolung?
Umpolung nennt man in der Organischen Chemie die Modifikation einer funktionellen Gruppe mit dem Ziel, ihre Polarität umzukehren. ... An einem Kohlenstoffgerüst entstehen dadurch alternierend Donor- und Akzeptor-Zentren, die zu einem normalen Reaktionsmuster in polaren Reaktionen führen.
Eigentlich könnte ich ja auch Vorschläge machen......
Aber leider verstehe ich zu wenig von dem, was du da vor hast.
Mir kommt das vor, als hättest du konkrete Vorstellungen, würdest aber nur jedes 5te Wort davon verraten.
Gut, wenn deine Entwicklung wirklich so geheim sein muss, wie du sie hier vertrittst, will ich nix gesagt haben, dann ignoriere meine Worte bitte.
Nein, das ist C++!
Vergiss, was du vorher gelernt hast.
Hatten wir doch schon beim goto.
Das hat seinen schlechten Ruf auch nicht aus C++, sondern aus ganz uralten Basic und Fortran Varianten.
Bitte keinen Ballast von Fehlannahmen einschleppen, damit stehst du dir selber im Wege rum.