Schönen guten Morgen,
ich bin Anfänge in sachen C Programmieren und habe jetz ein paar kleine
Aufgaben gemacht. Ich habe Blinklichter programmiert und Lauflichter.
Diese Codes habe ich dann versucht so weit wie geht zu stauchen.
Jetz sitz ich gerade an meiner neuen Übung und möchte wenn ich einen
Taster drücke das lauflicht anfängt zu "laufen" und wenn ich los lasse
soll das Lauflciht auch aus sein. Ich habe ein code geschrieben wo ich
nicht weiß ob der funktioniert, da ich auf arbeit bin und keinen
Programmierer gerade bei mir habe, kann ich das gerade nicht testen.
Wäre nett wenn ihr ma schaun könnt ob das so grundlegend richtig ist
oder wenn nicht was falsch ist und wie man es anders machen kann bzw
muss.
#include<avr/io.h>
#include<util/delay.h>
int main()
{
int i;
DDRB=0xFF;
DDRD=0x00;
while(1)
{
if(PORTD=0x01)
{
for (i=0; i < 8; i++)
{
PORTB = 1 << i;
_delay_ms(500);
}
}
else (PORTD=0)
{
DDRB=0;
}
}
return1;
}
Vielen Dank im vorraus!
Liebe Grüße
Rob
Der Vergleichsoperator bei Vergleich heißt übrigens ==
und zum Port einlesen PIN benutzen.
meinen Code kannste außerdem wiederbenutzen, wenn der knopf mal woanders
hinkommt.
mfg mf
Rob schrieb:> else (PORTD=0)
der else-Zweig braucht keine Bedingung. er wird bei nicht-eintreten der
Bedingung des if(Bedingung) ausgeführt.
Rob schrieb:> da ich auf arbeit bin und keinen> Programmierer gerade bei mir habe, kann ich das gerade nicht testen.
kompilieren kannst du es aber. Der wird eine Menge Errors schmeißen.
Die kannst du dann Korrigieren.
Nebenbei: if(PORTD = 0x01) ist immer "true", da eine Zuweisung erfolgt
und der Wert "0x01" bewertet wird. der ist eben ungleich 0 und somit
"true".
solche Fehler bereiten einem oft stundenlange Fehlersuche im Code, nur
weil ein == aus Versehen zu einem = verkommen ist.
mfg mf
Mini Float schrieb:> !(Bedingung) dreht die Bedeutung von "true" und "false" um
Naja, hört sich seltsam an, diese Beschreibung einer simplen
Negierung. Das "Nicht" ist eigentlich die allereinfachste logische
Operation...
1
// Zuhause mache ich den Kaffee selber
2
if(BinZuhause)
3
MacheKaffeeSelber();
4
5
// Wenn ich nicht zuhause bin, kaufe ich den fertig
Lothar Miller schrieb:> Das "Nicht" ist eigentlich die allereinfachste logische> Operation
Ja, aber es ist die "logische" Negation "!(Ausdruck)" und nicht die
Bitweise Negation "~(Ausdruck)".
Wenn man aber an "logisches Irgendwas" denkt, denkt man meist an
CMOS-/TTL-Logikschaltungen(was Bitoperationen entspräche). Viele
Anfänger kommen so mit den Begrifflichkeiten ins Schleudern. Deswegen
meine umständliche, komische Erklärung. Du hast natürlich recht :). In
diesem Sinne
mfg mf
Ich würde dazu raten, sich das Thema Entprellen erstmal völlig
unabhängig von einem Projekt zu erarbeiten:
1.
Eine Taste + eine LED.
Bei jedem Drücken wechselt die LED.
Wichtig: Die Dauer des Drückens darf keine Rolle spielen!
2.
2 .. 8 Tasten + 2 .. 8 LEDs.
Bei jedem Drücken wechselt die zur Taste gehörende LED.
Wichtig: Jede LED muß unabhängig von jeder anderen Taste funktionieren,
also auch wenn diese gedrückt gehalten bleibt!
Und wenn man das geschafft hat, schmeißt man alles weg und nimmt eine
bewährte Lösung:
http://www.mikrocontroller.net/articles/Entprellung#Komfortroutine_.28C_f.C3.BCr_AVR.29
Es programmiert sich nämlich deutlich entspannter, wenn man das
Entprellen einmal verstanden und gelöst hat. Vorherige riesige Probleme
werden plötzlich ganz einfach und in wenigen Zeilen zu erschlagen.
Ich verstehe nicht, warum viele bei jedem Projekt immer wieder neu
anfangen, irgendwelche abenteuerlichen Entprellkonstrukte in das Projekt
hinein zu verweben.
Man erspart sich enorm Zeit, wenn man das Entprellen als eigenständige
Routine implementiert, die man dann nur noch aufrufen muß. Und die
keinerlei störende Delays in das Programm mit einbaut.
Peter
Ich bin sehr dafür, dass jedenmal, wenn Peter auf seine
(zugegebenermaßen sehr gute) Entprellroutine hinweist, ihm 10 ct
überwiesen werden. :-P
Von Deiner ersten Million kannst Du mir dann ja was abgeben, Peter. :-)
Peter Dannegger schrieb:> Thema Entprellen3.141592653589793238462643383279 schrieb:> wenn Peter auf seine> (zugegebenermaßen sehr gute) Entprellroutine hinweist, ihm 10 ct> überwiesen werden
Ich bin dafür, dass wenn Peter als erster im Thread seine eigene
Entprellroutine vorschlägt, π(3,1416) keine Prozente bekommt.
Außerdem wird Peter dir für deine Idee, auch wenn sie gut ist und Geld
bringt, keine Prozente abdrücken, da die Entprellroutine seine Arbeit
war/ist.
mf
da ich auf arbeit bin und keinen Programmierer gerade bei mir habe, kann
ich das gerade nicht testen.
naja, sooo schlecht ist der Emulator im AVR Studio auch nicht.