Einfaches C Programm (Taster als Schalter) Problem

Gast #4255015
Lesenswert?

Hallo mikrocontroller Community,

hab ihr ein einfaches programm um ein paar LEDs zu steuern mit ein 
ablauf so wie ein LED würfel 5x5x5....

Also Ich habe PD0 als Eingang für ein Taster. Hab schon die entprellung 
usw. kein problem.

Ich habe jetzt eine variable "RS" der gesetzt und zurück gesetzt wird 
wenn der Programm fertig ist. also ein taster als ein und aus schalter.

Ich weiss es ist ein einfaches programm, bin ja nur am lernen und am rum 
probieren.

also bei mir ist das problem das des programm ohne taster druck einfach 
los geht. ob wohl ich ein if befehl um den ganzen programm hab.

> was mach ich falsch?

-Oxycotton
Angehängte Dateien:
#4255029
Lesenswert?

if((RS = 0xFF))

ist kein Vergleich, sondern eine Zuweisung.
Du brauchst "==" für einen Vergleich.

Du solltest DDRD auch noch auf 0 setzen, bevor du die einzelnen Bits 
setzt.

Das hier:
      RS = ~RS;
      RS=0;
ist auch ziemlich unsinnig.

Deine "Entprellung" wird auch nicht so wirklich funktionieren, das flag 
RS wird immer hin- und her toggeln, solange du den Taster drückst.
Gast #4255037
Lesenswert?

Joe F. schrieb:
> if((RS = 0xFF))
>
> ist kein Vergleich, sondern eine Zuweisung.
> Du brauchst "==" für einen Vergleich.
>
> Du solltest DDRD auch noch auf 0 setzen, bevor du die einzelnen Bits
> setzt.
>
> Das hier:
>       RS = ~RS;
>       RS=0;
> ist auch ziemlich unsinnig.
>
> Deine "Entprellung" wird auch nicht so wirklich funktionieren, das flag
> RS wird immer hin- und her toggeln, solange du den Taster drückst.

danke für die schnelle antwort,
ja hab vergessen diese fehler raus zu nehmen, war am rum probieren, bin 
halt noch fresh mit C.
 Danke,

ich habe die änderungen gemacht aber jetzt geht überhaupt nichts, hab 
auch die RS = 0; im programm selber rausgenommen und es geht nichts.
#4255817
Lesenswert?

Ich würde zum Testen deine Entprellung auskommentieren.
Wenn dein Programm weiterhin nicht so funktioniert wie du möchtest, muss 
man weiter sehen.
Achja, stell mal die "richtige" Version des Codes hier ein, nicht die 
"was ich eben noch ausprobiert habe"-Variante, sondern die von der du 
meinst, dass sie funktionieren sollte
#4255884
Lesenswert?

Frank schrieb:
> Deshalb gewöhnt man sich an die Konstante links zu schreiben:
>
1
> if((0xFF = RS)) //Fehler
2
> {
3
> ...
4
> }
5
>
> Dann bekommt man definitiv einen Fehler.


Es würde auch schon reichen, sich zu überlegen was mir der Compiler mit 
einer Warnung sagen will. Wenn der Compiler (wörtlich) vorschlägt, den 
Ausdruck zu klammern, dann kann das eine Lösung sein - aber nur unter 
der Voraussetzung dass man wirklich auch eine Zuweisung meinte. Im 
anderen (häufigeren) Fall, wenn man sich fragt "was zum Teufel faselt 
der da von einer Zuweisung", sieht man dann auch das Problem und das der 
Vorschlag mit der zusätzlichen Klammerung nicht die Lösung ist.

Mit wachsender Erfahrung wird dieses "Problem" immer kleiner, bis es 
sich praktisch im Nichts auflöst. Diesen Fehler macht man am Anfang 
seiner Karriere ein paar mal, aber das wird schnell immer seltener. Und 
wenn, dann sieht man das vergessene = spätestens im Debugger sofotrt.
Die Umkehrung der Operanden hingegen hat das dauerhafte Problem, das 
Menschen meistens nicht so denken. Wir denken nun mal nicht "Wenn es 
wahr ist, dass 5 die Anzahl der Eier ist", sondern wir benennen den 
variablen Teil meistens zuerst. "Wenn es wahr ist, dass die Anzahl der 
Eier gleich 5 ist".
Obowhl ich natürlich auch zugebe, dass man sich an alles gewöhnen kann 
und dann auch die Umkehrung der Reihenfolge gegenüber der natürlichen 
Denkweise irgendwann völlig normal ist.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren