PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : erstes programm funktioniert nicht



Dakrat
13.11.2007, 21:15
Hi,
heute hab ich zum ersten mal meinen asuro "programmiert". da meine programmierkenntnisse noch ziemlich beschränkt sind bin ich auch schnell an meine grenzen gestoßen :(.

das programm sollte folgendes machen:
asuro fährt geradeaus bis er irgendwo dagegenfährt,
dann fährt er ein stück gerade zurück und dreht sich um, danach fährt er wieder normal weiter.

aber bei mir fährt er immer geradeaus egal was passiert :(

kann mir da bitte jemand helfen?



#include "asuro.h"
#define TASTER PollSwitch()


void taster (void)
{
TASTER;
TASTER;
TASTER;
TASTER;
TASTER;
TASTER;

if(TASTER>0&&TASTER<8)
{
MotorDir(RWD,RWD);
MotorSpeed(170,170);
Sleep(255);
MotorDir(RWD,BREAK);
MotorSpeed(140,0);
Sleep(255);
}
else if(TASTER>7)
{
MotorDir(RWD,RWD);
MotorSpeed(170,170);
Sleep(255);
MotorDir(BREAK,RWD);
MotorSpeed(0,140);
Sleep(255);
}
}
int main(void)
{
Init();
MotorDir(FWD,FWD);
MotorSpeed(140,140);
while(1);
}

radbruch
13.11.2007, 22:11
Hallo Dakrat

Du must deine Funktion taster() im Hauptprogramm aufrufen:


int main(void)
{
Init();
MotorDir(FWD,FWD);
MotorSpeed(140,140);
while(1) taster();
return(0);
}

In der while-Schleife damit die Funktion endlos aufgerufen wird. (return(0) darf er nie erreichen weil nicht definiert ist, wohin zurück er dann springen soll. Es gehört aber rein, weil main() eine Funktion mit Rückgabewert (int) ist und die Compliler das normalerweise erwarten.)

Dies

if(TASTER>0&&TASTER<8)

würde ich mit Klammern schreiben:

if((TASTER>0) && (TASTER<8))

(... und die Mehrfachabfrage von PollSwitch() halte ich nur für bedingt sinnvoll)

Sleep(255) dauert nur ein Zwinkern, besser mehrfach oder in einer Schleife aufrufen um merkbare Zeiten zu verzögern.

Das ist natürlich eine Quälerei für's Getriebe und als Dauerlösung nicht zu empfehlen:

MotorDir(RWD,RWD);
MotorSpeed(170,170);

Allerdings ist die ganze Kollisiongeschichte kritisch, weil der asuro jedesmal gegen das Hinderniss knallt, weil er nicht mehr rechtzeitig bremsen kann, wenn ein Taster gedrückt wird.

(TASTER würde ich klein schreiben, weil schonender für die Augen.)

Das war's mal was mir so auf Anhieb zu deinem ersten Programm einfällt. Sieht doch für den Anfang ganz gut aus, weiter so.

Gruß

mic

Dakrat
14.11.2007, 19:50
danke für deine hilfe!
also das ausweich programm geht jetzt, aber ich wollte .asuro so wie in diesem beitrag beschrieben umbauenhttps://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=99791#99791 und jetzt funktioniert das senden/empfangen von daten nicht mehr! ich hab extra darauf geachtet die teile nicht zu "überhitzen" und den IC2 hab ich auch schon ausgetauscht (mit dem vom transceiver)! die IR-led müsste eigentlich auch funktionieren weil ich eine andere (neue) verwendet habe. :?: :?: :?:

liggi
14.11.2007, 20:10
Hast du irgendwie vieleicht die Drähte verwechselt?

mfg liggi

Dakrat
14.11.2007, 20:14
also die drähte sind das einzige wo ich mir zu 100% sicher bin dass sie stimmen

edit:

ich hab jetzt mal im inet geschaut wo es diese beiden bauteile zu kaufen gäbe (IR-empfänger und IR-led) aber ich hab keinen shop gefunden der BEIDE anbietet? ... und eigentlich hab ich keine lust für ca 1€ bestellwert 20€ versandkosten zu zahlen. gibt es bei www.conrad.at einen ir-empfänger der den gleichen zweck wie der vom asuro erfüllt und auch funktioniert??

damaltor
15.11.2007, 00:21
müsste eigentlich alles bei reichelt zu finden sein --> www.reichelt.de

wenn du den empfänger vom transceiver ausgelötet hast um ihn zu ersetzen, hast du ihn vermutlich dabei sschon gegrillt. das teil ist sehr empfindlich.