Hallo zusammen, ich hätte mal eine Frage zu div If Anweisungen. 1. Frage Ich habe z.B. 3 Taster wie kann ich abfragen ob einer der drei Taster gedrückt worden ist. Also z.B. Wenn Taster 1 gedrückt ist ODER Taster 2 gedrückt ist ODER Taster 3 gedrückt ist, dann schalte LED ein. 2. Frage Ist Taster 1 gedrückt und ist die Variable A = True, dann schalte LED ein. Sorry aber ich lerne noch ;-) Gruß Juppy
In dem du den Port abfragst, wo die LED dran hängt. Also welcher Pin vom IC, und dann im Datenblatt schauen welcher Port es ist. Meistens mit A,B,C usw. bezeichnet. Dann in einer Schleife schreiben, wenn PortA eins ist dann mache dies usw.
Det S. schrieb: > 2. Frage > Ist Taster 1 gedrückt und ist die Variable A = True, > dann schalte LED ein. Das hängt davon ab, wie der Taster angeschlossen ist. Es ist nicht Gott gegeben, dass ein gedrückter Taster zu einem True führt. Auf einem AVR ist es schaltungstechnisch sogar meistens genau anders rum. > > Sorry aber ich lerne noch ;-) Dann lernst du jetzt gleich mal, dass es verschiedene Programmiersprachen gibt und hier auf dieser Seite des Bildschirms keiner weiß, welche du benutzt.
Sorry, ich programmiere in C mit einem myAVR Board und einem Atmega8. zu Frage 1 habe folgende Anweisung probiert:
1 | if (!(PIND & (1<<Taster1))) || (!(PIND & (1<<Taster2))) |
2 | {
|
3 | ....
|
4 | }
|
hier kommt die Fehlermeldung vom Atmel Studio: Error 1 expected primary-expression before '||' token Error 2 expected ';' before '{' token zu Frage 2 folgende Anweisung
1 | if (!(PIND & (1<<Taster1))) && (bTaster1 == True) |
2 | {
|
3 | ...
|
4 | }
|
Error 1 expected identifier before '(' token Error 2 expected ';' before '(' token Hoffe jetzt wird es klarer Gruß Juppy
:
Bearbeitet durch User
Det S. schrieb: > Sorry, > ich programmiere in C mit einem myAVR Board und einem Atmega8. > > zu Frage 1 habe folgende Anweisung probiert: >
1 | > if (!(PIND & (1<<Taster1))) || (!(PIND & (1<<Taster2))) |
2 | >
|
> hier kommt die Fehlermeldung vom Atmel Studio: > Error 1 expected primary-expression before '||' token > Error 2 expected ';' before '{' token Na dann zähl mal die Klammern bzw. verfolge mit dem Finger, welche schliessende Klammer zu welcher öffnenden Klammer gehört. Und immer drann denken: der komplette Ausdruck, der die Bedingung der if-Abfrage ausmacht, muss in einer Klammer stehen.
1 | if (!(PIND & (1<<Taster1))) || (!(PIND & (1<<Taster2))) |
2 | | | | ||| |
3 | | | +----------+|| |
4 | | +-------------------+| |
5 | +----------------------+ |
Ooops. Nach der 3.ten schliessenden Klammer ist die Klammer des if-bedingungsteilss bereits geschlossen. Das || hängt 'in der Luft'. Die Syntax lautet
1 | if ( Ausdruck ) |
2 | Anweisung |
Wenn der Ausdruck aus mehreren Teilen besteht, dann ist das ok. Nichts desto trotz steht aber trotzdem der komplette Ausdruck innerhalb der Klammern.
1 | if( Ausdruck1 || Ausdruck2 || Ausdruck3 ) |
2 | Anweisung
|
Selbstverständlich kann jeder Teil-Ausdruck wieder für sich in einer Klammer stehen ...
1 | if( (Ausdruck1) || (Ausdruck2) || (Ausdruck3) ) |
2 | Anweisung
|
..., das ändert aber nichts daran, dass der komplette Ausdruck als ganzes geklammert wird.
:
Bearbeitet durch User
Det S. schrieb: > Hoffe jetzt wird es klare Und dir? C ist keine Programmiersprache, die selbst erklärende Fehlermeldungen liefert. Nur dem Kenner der Sprache wird klar, dass schlicht und einfach jeweils ein Klammernpaar fehlt. Vielleicht solltest du dir ein paar Grundlagen in C anlesen, z.B. http://de.wikibooks.org/wiki/C-Programmierung:_Sprachbeschreibung:_Anweisungen#if
Und aus dem bisherigen solltest du für die Zukunft ein paar Dinge mitnehmen. Der wichtigste lautet: * zeige immer deinen Code. Denn wie du selber gesehen hast, dreht sich deine Frage in Wirklichkeit gar nicht um die Abfrage eines Pins, sondern schlicht und ergreifend einfach nur um den syntaktischen Aufbau einer Anweisung - in diesem Fall: wie ist der genaue Aufbau einer if-Anweisung. Dein Problem hat nichts mit Tasterm und auch nicht mit Portpins zu tun (wie du angenommen hast), sondern dasselbe Problem hättest du auch gehabt, wenn du einen Wecker mit 3 Weckzeiten programmierst und feststellen willst, ob der Wecker klingeln soll oder nicht. * in diesem Fall hat es sich als nicht relevant heraus gestellt. Aber gib immer deine Hardware an. Ein AVR aus der AtMega oder AtTiny Serie programmiert sich nun mal ein wenig anders als ein 8051 Derivat oder gar ein PC. Zu wissen welche Hardware ist unter anderem auch deshalb wichtig, damit man weiß, wie genau zb Taster angeschlossen sind. Denn je nachdem lautet dann die Abfrage anders :-) * wenn du keinen Code zeigst, dann nenn wenigstens die Programmiersprache. Aber eigentlich ist es immer besser, Code zu zeigen. Und zwar möglichst vollständig * hast du Fehlermeldungen - dann immer her damit.
Hallo, alles klar. Wußte nicht, das der komplette Ausdruck innerhalb der Klammern stehen muss. Ist für mich noch alles relativ neu. Ich hatte schon im Netz danach geschaut, aber irgendwie habe ich immer nur Beispiele mit einer IF Anweisung gefunden nicht mit mehreren. Vielleicht habe ich es aber auch nur übersehen ;-) Gut das Problem bezog sich in der Tat nicht direkt auf die MC Programmierung. Es stand halt im Kontext zu meinem Problem. Daher der vielleicht etwas unglückliche Betreff :-) Trotzdem vielen Dank an alle für die ausführlichen Antworten. Gruß Juppy
Det S. schrieb: > Hallo, > alles klar. Wußte nicht, das der komplette Ausdruck innerhalb der > Klammern stehen muss. Ist für mich noch alles relativ neu. Sorry. Kann nicht anders. Jetzt muss mein Standardspruch kommen: Du brauchst ein C-Buch! Und zwar ganz schnell und ganz dringend. Denn all das und noch tausend andere Dinge, die du wissen musst, stehen da alle drinnen. > Ich hatte schon im Netz danach geschaut, aber irgendwie > habe ich immer nur Beispiele mit einer IF Anweisung gefunden nicht > mit mehreren. Vielleicht habe ich es aber auch nur übersehen ;-) Buchhandlung gehen. Die Bücher durchstöbern. Achte darauf, mit welche Schreibstil du zurecht kommst Buch aus dem Regal nehmen zur Kasse gehen -> ganz wichtig: Buch durcharbeiten. unter das Kopfkissen legen ist zu wenig. Noch nie hat irgendjemand auf dieser Erde durch ausschliessliches Stöbern im Internet die Sprache C ausreichend gut gelernt. Nicht umsonst hat ein ordentliches C-Buch mindestens 200 Seiten.
:
Bearbeitet durch User
Karl Heinz schrieb: > Du brauchst ein C-Buch! > Und zwar ganz schnell und ganz dringend. Hallo, ich weiß diese Frage wurde bestimmt schon oft gestellt, aber kennst Du ein gutes C Buch, welches neben den Grundlagen evt. MC Programmierung beinhaltet ? Denn bei mir in der Umgebung wüßte ich nicht, wo man sich mal mehrere Bücher zu C angucken kann um dann zu entscheiden welches man nimmt. Gruß Juppy
Juppy schrieb: > ich weiß diese Frage wurde bestimmt schon oft gestellt, > aber kennst Du ein gutes C Buch, welches neben den > Grundlagen evt. MC Programmierung beinhaltet ? imho blöde Idee. Erst die Grundlagen von C lernen, am PC, dann den µC dazunehmen...
Juppy schrieb: > Karl Heinz schrieb: >> Du brauchst ein C-Buch! >> Und zwar ganz schnell und ganz dringend. > > Hallo, > ich weiß diese Frage wurde bestimmt schon oft gestellt, > aber kennst Du ein gutes C Buch, welches neben den > Grundlagen evt. MC Programmierung beinhaltet ? Wie Justus schon sagte, funktioniert der Prozess am Besten 2-stufig Erst auf einem PC die Grundlagen der Programmierung unter Berücksichtigung der Sprache 'C' lernen. Wenn du dann ein wenig fit in C bist, erfolgt der Übergang zu einem MC. Der Grund dafür ist einfach: C ist zwar eine genormte Sprache, aber auf einem µC, wie zb einem AVR, fehlt einfach eine Menge 'Infrastruktur'. Auf einem PC hast du eine Konsole, auf der du Ausgaben machen kannst. Diese Konsole ist von Haus aus für dich mit Standardmitteln der Sprache ansprechbar. Auf deinem µC müsste man sich diese Dinge erst mal selber machen. Auch hast du auf dem PC wesentlich bessere Debug-Möglichkeiten. All das führt in Summe dazu, dass du das ca. erste Drittel des C-Buchs auf einem PC problemlos und schnell durcharbeiten kannst. Alles funktioniert in den Programmen genau so, wie es in der Literatur beschrieben ist. Die IDE ist dann ein anderes Thema, schon klar. Das erste Drittel eines Buches ist so ungefähr die Grundausstattung, die man minimal an Wissen braucht, ehe es Sinn macht, sich dann in die Feinheiten und Unterschiede in der AVR Programmierung einzuarbeiten. Diese Unterschiede sind nicht so wild. Da geht es hauptsächlich um Bitmanipulationen, die auf Desktopsystemen eher stiefmütterlich behandelt werden. Aber mit dem Grundstock ist das alles kein Problem mehr, vor allen Dingen weil du dann in der Syntax schon sattelfest bist und grundsätzlich weißt, wie die Sprache grundlegend funktioniert. Das große Problem auf einem AVR ist, dass die Infrastruktur anders funktioniert. Das ändert aber nichts an den Grundkonzepten der Sprache, wie zb Syntax, Datentypen, Umwandlungsregeln, Grundlagen in Pointern, Stringverarbeitung, etc. etc., und dabei hab ich noch gar nicht von grundlegenden Algorithmen gesprochen. Da ist ein weites Feld, das da wie dort identisch ist. Ein Vergleich wäre in etwa: Erst mal lernt man einen Grundstock an Englisch, ehe man dann die Spezialisierung auf technisches Englisch macht. Aber solange es Unklarheiten bei "I am, You are, He/She/It is" gibt, macht es keinen Sinn, sich über Details der Bezeichnungen in der Geodäsie zu unterhalten. Erst mal muss ein Grundstock da sein. Die restlichen 2 Drittel des Buches behandeln Dinge wie Dateiverarbeitung und dynamische Speicherverwaltung. Die sind auf einem AVR erst mal nicht wichtig, bleiben aber nicht aus, denn irgendwann wirst du in die Situation kommen, dass dein Projekt 2-gleisig fährt: ein Teil läuft auf dem AVR und ein Teil läuft auf dem PC, der als 'Sichtgerät' für den AVR dient. Mit dem Klassiker 'Kernighan & Ritchie Programmieren in C' macht man erst mal nichts falsch. Dazu noch eine der verfügbaren kostenlosen Entwicklungsumgebungen für den PC und dann auf dem PC die ersten Kapitel durcharbeiten. Ein ordentliches Buch hat am Ende eines Kapitels Übungsaufgaben. Wenn die gemeistert werden, dann kann man davon ausgehen, dass man den Kapitelinhalt so einigermassen intus hat. Probleme und Fragen werden natürlich auch weiterhin auftauchen - das ist schon klar. Aber eine Frage nach den vorgeschriebenen Syntaxelementen bei den Basis-Schlüsselwörtern ist indiskutabel - so weit müssen wir uns einig sein.
:
Bearbeitet durch User
Hallo Karl-Heinz, vielen Dank für Deine detaillierte Ausführung. Wenn Du mir jetzt noch sagen könntest, welche kostenlose IDE dafür am besten geeignet ist, wäre ich total happy ;-))) Was hälst du von video2Barin ? Jetzt lerne ich C++ Start ohne Vorwissen Gruß und vielen Dank Juppy
Juppy schrieb: > Wenn Du mir jetzt noch sagen könntest, welche kostenlose IDE dafür am > besten > geeignet ist, wäre ich total happy ;-))) Wenn mich jemand nach 'am besten' fragt (egal zu welchem Thema): dann lautet meine Antwort meistens: am Besten ist immer das, mit dem du umgehen kannst. Im Ernst. Das bischen C, dass du beim Durcharbeiten der Literatur brauchst, dass schaffen ALLE Entwicklungssysteme mit dem kleinen Finger. Die Unterschiede liegen an dieser Stelle in der Bedienung des Editors, wie man Projekte erzeugt und verwaltet - solche Dinge. Da gibt es aber kein 'am Besten'. 'am Besten' ist das, womit du klar kommst. Goggle nach freienb Entwicklungsumgebungen (die kommen sowieso inklusive Compiler) und probier sie aus. Wenn du dich damit nicht wohl fühlst, dann nimm die nächste. Du kannst zb auf allen Systemen, die du probierst das klassische 'Hello World' von 0 auf beginnend als Projekt anlegen (meist nach Handbuch oder Einführugnstutorial zum Umgangt mit der IDE). Dann siehst du schon, womit du klar kommst.
1 | #include <stdio.h> |
2 | |
3 | int main() |
4 | {
|
5 | printf( "Hello world!\n" ); |
6 | }
|
wenn du von diesem Programmtext ausgehend, deinem Gefühl nach komplizierte Klimmzüge machen musst oder gar kein Fenster mit der Ausgabe drinnen aufgeht (kann sein, dass das Fenster gleich wieder zu geht, das ist ok), dann nimm die nächste IDE > Was hälst du von video2Barin ? > > Jetzt lerne ich C++ > Start ohne Vorwissen Kenn ich nicht. Bei Buchtiteln, die suggerieren 'alles ist ganz einfach' bin ich immer vorsichtig. Denn Programmieren lernen ist nicht einfach. Grundsätzlich nicht.
Hallo Karl-Heinz, O.K. dann weiß ich da erstmal Bescheid und werd mal Onkel Google fragen ;-) Trotzdem Danke nochmal für Deine Hilfe. Gruß Juppy
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.