PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : asuros taster



toni123
22.11.2006, 18:34
hallo,
ich wollte frage, wie man beim Asuro die Taster Programmieren kann! in der Anleitung steht darüber nichts genaueres!!!
danke schon im vorraus
t

Andrew7
22.11.2006, 19:09
Die Taster sind sehr einfach auszuwerten. Am besten verwendest du die if Funktion.
Bsp. if (PollSwitch>0) {Anwendung}
wenn Taster >0 soll er dieses oder jenes tun.
sehr simple :cheesy:
Wenn dir dies nicht weiter hilft, solltest du am besten einige Beispielprogramme von der Asuro CD anschauen.

toni123
23.11.2006, 13:54
ja hab ich aber da wurde ich nicht recht schlau draus! aber danke!!!
mfg
t

EDH
23.11.2006, 14:16
wenn du die erweiterte lib hernimmst kannst du auch einfach
if (!switched) {
}

schreiben.
das geht einfacher, weil switched über ein interrupt gesetzt wird.

damaltor
23.11.2006, 14:21
Du kannst nicht direkt eine Funktion auf einen der Taster legen. Das einzige was du machen kannst ist folgendes:

Mit der Funktion PollSwitch() kannst du abfragen, ob ein taster gedrückt wurde. Die Funktion gibt einen Wert Zurück, also eine einzige Zahl. Was diese Zahl bedeutet, steht in der Anleitung, du muss mithilfe dieser Zahl "ausrechen" welche/r taster gedrückt wurde/n. Wenn du das herausgefunden hast, dann kannst du mit dieser Information arbeiten und z.B. durch eine If-prüfung eine funktion ausführen lassen.

odysee_2002
28.11.2006, 21:36
Hallo

Pollswitch liefert bitweise den Zustand der Schalter.
In Demo.c ist eine einfache Abfrage:

sw = PollSwitch();
if (sw == 0x01) LineDemo();
if (sw == 0x02) RechteckDemo();
if (sw == 0x04) PCDemo();
if (sw == 0x08) IRDemo();

Nach dieser Methode darf man nur einzelne Schalter drücken, sonst geht es nicht. Will man mehrere Schalter gleichzeitig abfragen, muß man schreiben:

sw & 0x01, ...
Gruß

EDH
28.11.2006, 21:42
aber diese hex zahlen bringen doch gar nix oder?
man kann genauso gut die zwei nullen un das x weglassen. das müsste genauso gehen.

mrroboto
28.11.2006, 22:01
@EDH:

Doch, die 0x vor den Zahlen bringt was. Auch wenn nicht auf den ersten Blick. Wenn man mit Bitoperationen arbeitet, ist es für die Lesbarkeit von Programmen vorteilhaft Zahlen im Quellcode in Binär oder Hexadezimalschreibweise zu benutzen. Auch führende Nullen zu verwenden hilft ungemein.

In diesem Beispiel waren die Zahlen alle kleiner als dezimal 10 , so dass mit 0x und ohne keinen Unterschied macht. Aber man sollte sich angewöhnen, die Zahlensysteme nicht innerhalb eines logischen Blocks zu mischen. Am besten sogar innerhalb des gesamten Codes nicht.

Andere Leute, die Deinen Code lesen, werden es Dir danken. Du selbst auch, wenn Du mal nach 6 Monaten Deinen eigenen Code wieder liest.

izaseba
28.11.2006, 22:14
Doch, die 0x vor den Zahlen bringt was.
Den Vorteil sieht man an besten bei gepackten BCD Zahlen.

Gruß Sebastian

damaltor
28.11.2006, 22:37
also um das mal alles zusammenzufassen:

dezimalzahlen schreibt man so:
12345
Hexadeziamlzahlen so:
0x12FF3
Binäre zahlen so:
0b10100101001

um die taster abzufragen kann man also folgendes machen:
Taster eins gedrückt in binär ist 000001 = 0x01 = 1
Taster zwei gedrückt in binär ist 000010 = 0x02 = 2
Taster drei gedrückt in binär ist 000100 = 0x04 = 4
Taster vier gedrückt in binär ist 001000 = 0x08 = 8
Taster fünf gedrückt in binär ist 010000 = 0x10 (nicht 0x0F) = 16
Taster sechs gedrückt in binär ist 100000 = 0x20 = 32

pollswitch gibt die SUMME aller gedrückten taster zurück. wenn taster 1,3 und 4 gedrückt werden dann wird 1+4+8=13=0x0D=0b001101 zurückgegeben. was man damit macht muss man selbst überlegen. möglichkeiten sind:

Ist Genau dieser eine Taster bzw diese Tastenkombination gedrückt worden?
--> if(PollSwitch()==[gewünschte tastenkombination]){...
wobei die gewünschte tastenkombination als dezimal, hexadezimal und ich glaub auch als binäre zahl angegeben werden darf.

Ist diese Taste (unter anderem oder auch allein) gedrückt worden?
--> if((PollSwitch()&[gew.Taste])){...
Wobei wieder die Taste Als Hex, dez, oder binäre zahl angegeben werden muss. Hintergrund:
Beispielsweise Gibt Pollswitch 0b110011 zurück.
geprüft soll werden ob die taste 0b010000 gedrückt wurde.
Es wird bitweise verglichen, aus PollSwitch()&0b010000 wird also 0b010000.
0b010000 ist ungleich 0, und alle werte ungleich 0 gelten als "WAHR". also ist die if-bedingung erfüllt.
PollSwitch()&0b001000 würde in diesem falle 0b000000 zurückgeben, und 0b000000 ist gleich 0 und damit "FALSCH".

Ebenso wird verfahren, wenn gefragt wird ob eine von Mehreren bestimmten tasten gedrückt wurde, unabhängig davon ob noch mehr gedrückt sind:
--> if((PollSwitch()&[Summe aller gew. Tasten])){...

und wenn man rausfinden will ob überhaupt irgend eine taste gedrückt wurde, muss man nur fragen on PollSwitch größer als 0 ist.
--> if(PollSwitch()>0){...

abschliessend ist zu sagen:
Da man (aufgrund der kürzeren schreibweise) meist nur dezi-oder hexadezimalzahlen nutzt, sollte man immer 0x davorschreiben wenn es hex zahlen sind.

für alle zahlen < 10 ist das zwar völlig egal, hilft aber dem verständnis doch sehr.

davon abgesehen sollten hexzahlen immer zweistellig angegeben werden, bei dezimalen ist das egal, und bei binärzahlen werden eigentlich immer 8 ziffern verwendet (weil 2 hex- und 8 bin-zahlen genau ein byte abdecken). der übersicht halber (es gibt ja nur 6 tasten) habe ich die führenden nullen oben weggelassen.
Auch das dient nur dem verständnis und ist (meist) für den Programmablauf unerheblich.