PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : brauche hilfte beim asuro mit den tastern/motorsteuerung



Night989
22.09.2006, 17:07
Hi,
ich hab mir vor 1 Woche einen asuro gekauft.
die anleitung hab ich mir durchgelesen und hab das auch fast schon gerafft. Ich hab ein Programm geschrieben, wo der asuro erst vorwärts und wenn er gegen eine wand kommt,dann rückwärts fährt. Leider fährt er nach ca 1ms gleich wieder nach vorne und ruckelt somit immer an der wand hin und her. Ich weiß nicht wie ich länger nach hinten fahren kann.
Ich glaube das geht irgentwie mit sleep, aber ich weiß nicht wie.
Ein beispiel programm wäre ganz hilfreich. Ich könnte es dann mit meinem vergleichen.

m.a.r.v.i.n
22.09.2006, 17:29
Hi,

Im AsuroWiki gibt es ein Beispiel (http://www.asurowiki.de/pmwiki/pmwiki.php/Main/KollisionsTestC) dazu.
Allerdings wird hier die Msleep Funktion der erweiterten Asuro Lib (http://sourceforge.net/projects/asuro) verwendet.

Gruß m.a.r.v.i.n

Night989
22.09.2006, 22:05
ich habe dieses asuro lip runtergeladen wie kann ich es "installieren" ???
wie funktioniert es ?

m.a.r.v.i.n
22.09.2006, 23:35
Einfach in ein beliebiges Verzeichnis auspacken.
Die Lib ist nur ein Quellcode Paket mit einigen Beispielen. Im Prinzip wie die Asuro_src von der Asuro CD.

Gruß m.a.r.v.i.n

Night989
23.09.2006, 16:56
ich habe hier ein paar fragen zum code. Was bedeutet "unsigned char t1, t2"und was bedeutet t1 und t2. t1 und t2 sind ja die tasten aber wie hast du die zu den 8 tasten zugeordnet? ich weiß nicht wie man die 8 tasten zuordnen kann, wie man sagen kann das wenn eine taste gedrückt wird das dann was bestimmtes passiert.
was soll z.b. "if(t1 == 0 && t2 == 0)" und "else if (t1 && t2 && t1 == t2)" und "if(t1 & 0x07)" und "if (t1 & 0x38)" heißen ? ich weiß noch nicht wie ich die tasten programmieren kann...
was bedeutet den void ? hier z.b. "void MotorFwd(void)". Warum steht einmal void draußen und einmal in der klammer ? ich weiß nur das du motorfwd da eine bedeutung gegeben hast aber ich versteh nicht wie.

hier ist der code wozu ich die fragen habe:

/************************************************** ************************
*
* File Name: kollisiontest.c
* Project : ASURO
*
* Description: Kollisionstest mit Hilfe der Tastensensoren
*
* Ver. Date Author Comments
* ------- ---------- ----------------- -----------------------------
* 1.0 10.09.2005 Peter initial build
* 1.1 08.01.2006 Peter 2x PollSwitch + Vergleich,
anstelle 8x PollSwitch
*
* benoetigt die modifizierte Asuro Bibliothek 'asuro.c'
* von waste, stochri und andun. Zu finden bei www.roboternetz.de
*/
/************************************************** *************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* any later version. *
************************************************** *************************/

#include "asuro.h"

/* Um eventuelle Unterschiede zwischen linken und rechtem Motor auszugleichen
* definieren wir 2 Werte für fullspedd links und rechts
*/
#define FULL_L 250 /* Fullspeed linker Motot */
#define FULL_R 220 /* Fullspeed rechter Motor */

/* Motor vorwärts */
void MotorFwd(void)
{
MotorDir(FWD,FWD);
MotorSpeed(FULL_L,FULL_R);
}

/* Motor rückwärts */
void MotorRwd(void)
{
MotorDir(RWD,RWD);
MotorSpeed(FULL_L,FULL_R);
}

/* Motor rückwärts Links */
void MotorRwdL(void)
{
MotorDir(RWD,RWD);
MotorSpeed(FULL_L,0);
}

/* Motor rückwärts Rechts */
void MotorRwdR(void)
{
MotorDir(RWD,RWD);
MotorSpeed(0, FULL_R);
}

/* Motor stop */
void MotorStop(void)
{
MotorSpeed(0,0);
}

int main(void)
{
unsigned char t1, t2;

Init();
while(1)
{
t1 = PollSwitch();
t2 = PollSwitch();
if(t1 == 0 && t2 == 0) /* keine Taste */
{
MotorFwd(); /* vorwärts fahren */
FrontLED(ON);
BackLED(OFF,OFF);
}
else if (t1 && t2 && t1 == t2)
{
MotorStop();
if(t1 & 0x07) /* Tasten links gedrückt? */
{
MotorRwdL(); /* Rückwärtskurve links fahren */
FrontLED(OFF);
BackLED(ON,OFF);
}
if (t1 & 0x38) /* Tasten rechts gedrückt? */
{
MotorRwdR(); /* Rückwärtskurve rechts fahren */
FrontLED(OFF);
BackLED(OFF,ON);
}
Msleep(1000); /* 1 Sekunde fahren */
}
}
return 0;
}

thx für die antworten
night989

m.a.r.v.i.n
24.09.2006, 00:21
Hi,
in den Variablen t1 und t2 werden die Tasterwerte abgelegt (Rückgabewert der Funktion PolSwitch) und diese beiden Werte verglichen. Nur wenn 2x der selbe Wert gelesen wurde, wird der Wert akzeptiert. Ist leider notwendig, da manchmal falsche Werte gelesen werden.
Die Taster selbst sind bit-orientiert. In einem Character stecken also die Werte für alle 6 Taster. 1 bedeutet Taster gedrückt, 0 bedeutet nicht gedrückt. Die 3 linken Tasten werden mit Binär 00000111, Hexadezimal 0x07 maskiert, die 3 rechten Taster mit 00111000, Hexadezimal 0x38. Ist der Vergleich ungleich 0 ist eine der Tasten gedrückt.

Void bedeutet übersetzt Null, nichts, ungültig, ohne. Die Funktion
void MotorFwd(void)
benötigt keine Übergabe Parameter und liefert auch keinen Rückgabewert zurück.

Ich empfehle dir erst mal die Grundlagen in C zu erlernen. Entweder ein Tutorial oder ein Buch.

Gruß m.a.r.v.i.n