Hi Ich bekomme es nicht hin.... Wie kann ich in einer If Bedingung ein Pin mit high und den anderen mit low vom selben Port abfragen z.B Wenn Taster 1 und nicht Taster 2 dann True. Algemein habe ich es noch nicht verstanden wie man zwei Pins in einer if abfrägt also auch wenn zwei verOdert oder verUndet werden. Das verstehe ich noch: if (PIND &(1<<PIND5)) wenn PIND5 high if (!(PIND &(1<<PIND5))) wenn PIND5 low Gruß und Danke Thomas
Pseudocode
1 | if( ( PIN1 == 1) && ( PIN2 == 0 ) ){ |
2 | TuWas(); |
3 | }
|
4 | else{ |
5 | tuWasAnderes(); |
6 | }
|
Thomas Webster schrieb: > Algemein habe ich es noch nicht verstanden wie man zwei Pins in einer if > abfrägt also auch wenn zwei verOdert oder verUndet werden. Du willst dir also ein C-Buch oder -Tutorial durchlesen? Das ist genau das, was du hier sagst ^^ z.B.: http://www.c-plusplus.de/tuts/c/c_Informatik_und_C_Skript_Release_2_4_IOE.pdf
Thomas Webster schrieb: > Algemein habe ich es noch nicht verstanden wie man zwei Pins in einer if > abfrägt also auch wenn zwei verOdert oder verUndet werden. Die Operatoren stehen in jeder C-Referenz. Die muß man griffbereit haben, wenn man die Operatoren (noch) nicht auswendig kennt. Man kann aber auch IFs beliebig schachteln.
Mark schrieb: > if( ( PIN1 == 1) && ( PIN2 == 0 ) ){ Es ist zwar nur Pseudocode, aber an den TO gerichtet: Das soll nicht bedeutet, dass der explizite Vergleich mit 0 bzw. (schlimmer) 1 erstrebenswert wäre. Diese expliziten Vergleiche sind es nicht. Ganz im Gegenteil können die gefährlich sein - man schiesst sich da ganz schnell ins Knie. > Das verstehe ich noch: > if (PIND &(1<<PIND5)) wenn PIND5 high > if (!(PIND &(1<<PIND5))) wenn PIND5 low wo liegt dann jetzt das Problem? Wieder als Pseudocode ausgedrückt steht doch da if ( Pin_5_ist_high ) if ( Pin_5_ist_low ) wenn du dir jetzt noch überlegst, was denn der 'Textbaustein' für 'Pin_5_ist_high' bzw. 'Pin_5_ist_low' ist, dann kann es doch nun wirklich kein Problem sein, mehrere dieser Textbausteine mittels logischem Und bzw. logischem Oder je nach Anforderung zu kombinieren. if( Pin_5_ist_high UND Pin_7_ist_high ) .... in den then Pfad kommt man ofensichtlich daher nur dann, wenn beide Pins high sind. Anstatt der umgangssprachlichen Bausteine setzt du wieder die C-Entsprechung dafür ein, nimmst noch den richtigen C-Operator für UND, und du hast deine Abfrage. Das ist so einfach wie das 'Lösen' dieser 8-Teile Puzzles für 3-jährige. Sobald man begriffen hat, das man für das jeweilige Loch nur ein Puzzleteil mit genau dieser Form suchen muss, ist die Sache gegessen.
Okay, hatte heute morgen um 6.23 (ohne schlaf) einen Denkfehler. Mein Code musste in die else Bedingung und ich habe es irgendwie versucht in der if zu lassen und hinzubiegen. @michael_h45 Danke für den Link - kann ich gut gebrauchen Danke
Eine Frage habe ich aber noch: if(!(PIND &(1<<PIND5))) oder if(!(PIND & 0x20)) in Hex - Führe aus wenn PIND5 = Low Wie muss das aussehen wenn ich das Binär Codiert machen möchte? if(PIND & 1011111) ?? if(PIND = 1011111) ?? wie ist die Syntax ?? Gruß
Thomas Webster schrieb: > wie ist die Syntax ?? Wofür? Willst Du nur 2 Pins testen oder alle 8 Pins des Ports? Dadurch, daß Du eine 6-stellige Binärzahl hinschreibst, verschwinden nicht magisch irgendwelche Pins. Du mußt unerwünschte Bits maskieren (AND) und dann auf den gewünschten Wert vergleichen.
Peter Dannegger schrieb: > Thomas Webster schrieb: >> wie ist die Syntax ?? > > Wofür? > Willst Du nur 2 Pins testen oder alle 8 Pins des Ports? > > Dadurch, daß Du eine 6-stellige Binärzahl hinschreibst, verschwinden > nicht magisch irgendwelche Pins. > Du mußt unerwünschte Bits maskieren (AND) und dann auf den gewünschten > Wert vergleichen. Magisch wäre toll... In dem Fall wollte ich den gesamten Port testen!
Thomas Webster schrieb: > if(PIND & 1011111) ?? > if(PIND = 1011111) ?? wie ist die Syntax ?? Thomas Webster schrieb: > @michael_h45 > > Danke für den Link - kann ich gut gebrauchen jetzt aber nicht einstauben lassen. die anzahl der operatoren in C ist wirklich überschaubar und intuitiv...
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.