nein, C hat ganz eigene Syntax und Verknüpfungs-Präferenzen (Operatorrangfolge).
Außerdem sind deine Variablentypen nicht C-typisch definiert.
Es ist für mich als C-Programmierer auch gar nicht klar, wie deine Richtungsvariablen verarbeitet werden.
Was die Verständlichkeit angeht: die Reihenfolge deiner Sx Variablen ist auch nicht sehr intuitiv.
setz doch mal als erstes Klammern um deine einzelnen && und || verknüpften Statements!
- - - Aktualisiert - - -
PS,
als C-Programmierer würde ich eine Variable für die Richtung definieren
int dir;
die dann verschiedene Richtungen als Wert annehmen kann:
#define vor 1
#define rueck -1
#define rechts 2
#define links 4
#define stop 0
if(S1==HIGH) && (S2==HIGH) && (S5==HIGH) {dir=?? } // was dann??
else
if (S3==HIGH) && (S4==HIGH) {dir=??} // was dann??
...usw...
- - - Aktualisiert - - -
PPS,
auch Timer wird man in C sicher ganz anders handhaben als bei dir:
Code:
#include <time.h>
#include <sys/time.h>
uint32_t ms;
uint32_t mstimer()
{
struct timeval now;
uint32_t ticks;
gettimeofday(&now, NULL);
ticks=now.tv_sec*1000+now.tv_usec/1000;
return(ticks);
}
dann im Steuer-Code:
bool Ecke=false;
bool Ecke_alt=false;
// Sensoren auswerten
// "intelligence"
// bisherigen Zustand der Eckbedingung speichern
Ecke_alt = Ecke;
// ermitteln, ob eine neue Eckebedingung eingetreten ist
Ecke=.... ??? // hier Ecke-Bedingung ermitteln, wschl über Sensordaten
if (Ecke && !Ecke_alt) { // beim 1.Mal, wenn eine neue Eck-Bedingung eintritt:
ms=mstimer(); // Zeit stoppen
}
// wiederholt Sensoren auswerten, wie du das machst verstehe ich bei deinem Code aber nicht
// "intelligence"
// dann überprüfen, ob ein ungewollter Richtungswechsel passiert ist;
if (dir==links && mstimer()-ms <=2000) { dir=rechts;} // falls ja, einfach wieder auf rechts zurückswitchen
Insgesamt ist mir aber deine Programmstruktur zu unverständlich, da unvollständig oder zumindest nicht C-typisch.
Lesezeichen