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
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.
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.
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.
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
intmain()
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.