hi, ich habe auch mal ne frage zum Tut. Und zwar hänge ich an der stelle: if ( ! (*port & (1 << pin)) ) hier geht der aktuelle zustand des Pins doch garnicht ein oder? was heist die Zeile ausgeschrieben. überprüft es durch das "!" ob ein wert ungleich 0 geliefert wird? wenn es so wäre könnte man ja höcgstens auf Änderungen am Pin überprüfen. Ich versteh nur Bahnhof.
> if ( ! (*port & (1 << pin)) )
heißt:
wenn das Port-Pin pin 0 ist, dann...
(1) *port holt alle Bits aus dem Port
(2) (1 << pin) ergibt eine 1 an der Position pin
*port & (1 << pin) gibt die bitweise Undverknüpfung von (1) mit (2),
d.h. einen Wert != 0, wenn der pin eine 1 sieht
! negiert alles logisch: 0, wenn das Argument != 0 ist; 1, wenn es null
ist.
ok das verknüpfen habe ich verstanden...aber was genau ist jetzt die bedingeung? durch was wird sie ausgedrückt?
Wenn der Port-Pin pin 0 ist, wird das bedingte Statement ausgeführt.
ja das ist mir nun auch klar...aber womit ist die bedingung in dem befehhla ausgedrückt? Wenn der port 1 ist also die taste nicht gedrückt ergibt sich ja das Schema: 1 and 1 -> 1 -> ! --> 0 und wenn sie Gedrückt ist: 0 and 1 -> 0 -> ! --> 1 wo steht jetzt das wenn das Ergebnis 1 ist fortgefahren wird oder ist das in der If schon enthalten, das eine eins im Ergebnis automatisch als wahr anerkannt wird.? Und somit eine Bedingung weg fällt?
naja ist ja eher ne Algemeine Frage. ich machs am besten nochmal verständlicher: if (1) { //bedingung erfüllt --> diese stelle wird als nächstes ausgeführt } if (0) { //bedingung nicht erfüllt --> diese Stelle wird nie erreicht } ist das so korrekt?
If heißt 'wenn'... Also: wenn die Bedingung erfüllt ist, dann führe den Befehl nach der schließenden Klammer aus.
Florentin Schirmer wrote:
> ist das so korrekt?
Genau so ist es.
ich glub wir reden aneinander vorbei. Mit der Bedingung ist mir ja klar nur zählt die Bedingung als war, wenn eine 1 zurück gegeben wird oder muss das extra noch definiert werden? €dit: ok dann haben wir's doch ^^ ich bin die ganze Zeit davon ausgegangen, das das extra noch festgelegt werden muss. Vielen Dank für deine Hilfe!
Wenn die Bedingung != 0 ist, wird der Befehl ausgeführt; wenn sie 0 ist, nicht. Das ist in die Sprache eingebaut.
noch ne frage: hier erstmal der Link zum Tut: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#.28Tasten-.29Entprellung was bringen return 0 bzw. 1 und wie funktioniert das überhaupt mit dem Funktions aufruf... if (debounce(&PINB, PB0)) /* Falls Taster an PIN PB0 gedrueckt.. */ hier werden ja die Aktuellen Werte bzw. die Portnamen an die Funkton übergeben. und was macht die zeile: inline uint8_t debounce(volatile uint8_t *port, uint8_t pin) ?
Vielleicht solltest du dir doch mal die Grundlagen von C einverleiben. Recht gut ist das hier: http://www.roboternetz.de/wissen/index.php/C-Tutorial
ja das habe ich mir auch schon überlegt vlt. werde ich mir auch mal ein Buch dazu kaufen ich habe an das hier gedacht: http://www.galileocomputing.de/openbook/c_von_a_bis_z/c_001_004.htm den ich finde es echt bemerkenswert das es auch online angeboten wird und man sollte sowas unterstützen...
ich les jetzt erstmal das tut auf Roboternetz! Das scheint ganz gut zu sein. Danke für den Tipp!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.