wo ist der unterschied zwischen static boolean und boolean.
static hat zwei Funktionen:
1.) In Klassen verwendet, ist die Variable für alle Instanzen gleich und existiert nicht getrennt für jede Instanz
2.) In Methoden behält sie ihren Wert von einem Aufruf zum nächsten und wird nicht jedes mal neu initialisiert. Die Initialisierung geschieht nur beim ersten Aufruf.
Hier geht es um den zweiten Fall
Wenn du innerhalb der loop das static weg lässt wird die Variable bei jedem Durchlauf auf false zurückgesetzt. Daher wird dann der Clock-Impuls für jedes Senden nur einmal gemacht. Das sollte aber auch mit der Deklaration außerhalb ohne static funktionieren.
Globale Variable nimmt man gewöhnlich nur wenn diese wirklich im ganzen Programm gelten müssen, z.B. die Pin-Belegung. Sonst hält man deren Geltungsbereich (Scope) so klein wie möglich. "char x" z.B. muss nicht global sein und wird in jeder loop-Iteration neu eingelesen. "clkEin" muss seinen Wert von einem loop-Aufruf zum nächsten behalten, aber da gibt es eben static als Alternative zur globalen Deklaration. Es ist aber nicht grundlegend falsch das global zu machen, wenn es für dich verständlicher ist.
3. aus 48 und 49, '0' und '1' zu machen hat funktioniert. Jetzt hab ich das Programm um die Drehrichtung erweitert und es läuft nicht mehr. Woran liegt dass?
char ist
ein Zeichen. Du kannst nicht 'xx" in einen char schreiben. Benutze dafür zwei getrennte chars, die du nacheinander einließt.
char x = Serial.read();
char y = Serial.read();
if(x == '1' && y == '0') //am besten hier mal bessere Variablen-Namen nehmen
{
}
Da ich mich gewundert habe wieso da der Compiler nicht meckert, habe ich das mal in Visual Studio ausprobiert. Wenn man das macht:
int character = '00';
schreibt er "0011 0000 0011 0000" rein. Der rechte Character steht dabei im niederwertigem Byte, wobei man das hier nicht sieht, da beide gleich sind.
"0011 0000" ist 48 = '0'. Wenn man das einem char zuweist, kommt eine Warnung "warning C4305: 'initializing' : truncation from 'int' to 'char'", und er weist den rechten Character zu und ignoriert den Rest. Es kompiliert also, aber durch die implizite Konversion gehen Daten verloren.