PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : M32 LED's mit Tastern steuern



Mario94
29.12.2010, 17:57
Ich habe die Beschreibung gelesen und das Beispielprogramm durchgearbeitet, jedoch verstehe ich nicht wie ich die einzelnen Tasten bezeichne.

Also wenn Taste 1 gedrückt wird dann soll LED 1 leuchten.

Denn momentan geht nur wenn ( irgendeine ) Taste gedrück dann soll LED 1 leuchten.

Ich hab auch schon ein Code geschrieben der mir anzeigt was die Taster für Signale senden, doch diese sind etwas unverständlich.
z.B sendet Taster 1 " i□Ÿ□§ "

Weiß jemand wie die einzelnen Tasten benannt werden ?

Mario94
29.12.2010, 20:14
Hat keiner eine Idee ??

Dirk
29.12.2010, 20:44
@Mario94:

Ich hab auch schon ein Code geschrieben der mir anzeigt was die Taster für Signale senden, ...
Die Tasten auf der M32 "senden" nichts.
Die Funktion getPressedKeyNumber() gibt dir die Nummer der gedrückten Taste aus. Darauf kann dein Programm dann reagieren.

Das Beispiel RP6Control_Button.c zeigt das genau. Da werden auch LEDs je nach gedrückter Taste eingeschaltet,- also genau das, was du willst.

Was fehlt dir noch?

Gruß Dirk

Mario94
29.12.2010, 20:51
Was ich an der Sache nicht verstehe ist, wenn getPressedKeyNumber() mir die Nummer der aktuell gedrückten taste gibt kann ich ja nicht sagen:


if(key1) // 1 jetzt nur als beispiel für taste 1
{
setLEDs(0b0001)
}


Ich muss ja schon beim Programm schreiben wissen wie ich auf eine bestimmte Taste reagiere.

Dirk
29.12.2010, 20:59
Genau so:

uint8_t key = getPressedKeyNumber();
if(key == 1) setLEDs(0b0001);
if(key == 2) setLEDs(0b0010);
....

Gruß Dirk

Mario94
29.12.2010, 21:02
Danke, ich werds mal ausprobiern ;)

EDIT: Es funktioniert, danke^^

Mario94
29.12.2010, 21:47
In verbindung mit dem RP6 klappt es allerdings nicht so gut...
Hier der Code:

#include "RP6ControlLib.h"
#include "RP6Control_I2CMasterLib.h"
#include "RP6I2CmasterTWI.h"


int main(void)
{
initRP6Control();

while(true)
{
uint8_t key = getPressedKeyNumber();

if(key == 1)
{
move(120,FWD,DIST_CM(25),true);
}

if(key == 2)
{
move(120,BWD,DIST_CM(25),true);
}
}

return 0;
}


Hier die Fehlermeldung:

C:\Users\Mario\Desktop\RP6 Loader\RP6-Programme\Tasten mit LED/TastenLED.c:15: undefined reference to `move'

Die Aufgabe ist :
- Wenn taste 1 gedrückt wird, fahr gerade aus ( 25 cm)
- Wenn taste 2 gedrückt wird, fahr rückwärts ( 25 cm)

Dirk
30.12.2010, 18:12
...undefined reference to `move'
Klar! Da an der M32 ja keine Motoren hängen, gibt es in der RP6ControlLib keinen Move-Befehl.

Also: So einfach geht es nicht.

Hast du dich schon mit dem I2C-Bus beschäftigt, der die Base und M32 verbindet?

Gruß Dirk

Mario94
31.12.2010, 11:41
nicht wirklich, was muss ich da lesen um zu verstehen wie es geht?
Oder brauche ich 2 Programme wo das eine sagt :

( M32 ) wenn taster 1 gedrückt sende befehl xy an Base
(RP6) wenn xy befehl von base kommt, fahre geradeaus

Dirk
31.12.2010, 15:52
Oder brauche ich 2 Programme wo das eine sagt :
( M32 ) wenn taster 1 gedrückt sende befehl xy an Base
(RP6) wenn xy befehl von base kommt, fahre geradeaus

Genau!

Gruß Dirk

Mario94
31.12.2010, 15:56
Wo steht wie man sowas programmiert, die Beispiele sind ja immer nur für den M32 oder für den RP6.

shedepe
31.12.2010, 16:06
Schau dir den Teil an wo es um den I2C Bus geht. Damit kannst du ziemlich einfach Daten von der m32 an die base senden.
Zudem würde ich dir den Artikel zum Thema I2C Bus im RN-Wiki anraten

Dirk
31.12.2010, 16:09
... die Beispiele sind ja immer nur für den M32 oder für den RP6.
Es gibt mehrere Beispiele für die "Fernbedienung" der Base durch die M32 und für das Lesen der Base-Sensoren durch die M32.
In die Base kommt dabei immer das RP6Base_I2CSlave Programm.
In die M32 kommt eines der Beispiele Example_06 bis Example_10 oder RP6Control_SELFTEST.

Wenn du dir die ansiehst, kannst du sehen, wie das geht.

Gruß Dirk

P.S.: Du brauchst also für die Base kein Programm zu schreiben, sondern nur für die M32! In der Base macht RP6Base_I2CSlave alles.