-
        

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 32

Thema: Asuro: Ein Motor langsamer

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    05.02.2006
    Beiträge
    14

    Asuro: Ein Motor langsamer

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo,
    ich habe gerade meinen Asuro fertig zusammen gebaut und habe ine kleines Problem: Eingenlich scheint alles zu klappen beim selftest, nur der linke Motor dreht aus irgend einem Grund langsamer. Die Kontakte sind eigentlich ganz ordentlich gelötet und beide Motore sind auch auch gleich leichtgängig zu drehen... wenn ich aber beide mit 255 anstuere macht der roboter eine doch recht beachtliche Linkskurve.... hat da jmd eine Idee?


    und dann habe ich mich mal an einer ersten Kleinigkeit probiert: Der ROboter fährt gerade aus (wenn die Motoren das machen würden ) und wenn ein Sensor gedrückt wird fährt er mit ner linkskurve zurück und nach ein paar Sek wieder geradeaus... so weit so gut nun fährt der roboter los und wenn ich nen Taster drücke fährt er auch zurück, aber danach macht er was er will, mal vor dann zurück.. woran kann das liegen? Hier mal der Code:

    Code:
    #include "asuro.h"
    
    int main(void)
    {
    	Init();
    	int i;
    	
    	
    while(1)
    {
    	MotorDir(FWD,FWD);
    	MotorSpeed(255,255);
    	StatusLED(GREEN);
    	
    	unsigned char taster;
    	taster = PollSwitch();
    	taster = PollSwitch();
    	taster = PollSwitch();
    
    	
    	if(taster>0)
    	{
    	
    		for (i=0; i<900; i++)
    		{
    		StatusLED(RED);
    		MotorDir(RWD,RWD);
    		MotorSpeed(100,200);
    		Sleep(216);
    		}
    	
    		MotorSpeed(0,0);
    	}
    }
       
    	while(1);
    	return 0;
    }
    wäre für Hilfe dankebar - gruß dennis

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.02.2006
    Ort
    Scheeßel
    Alter
    36
    Beiträge
    233
    Wenn das hier so ist, wie in echtem ANSI C, dann solltest du erstmal die verwendeten Variablen initialisieren.

    Code:
    int i = 0;
    .
    .
    .
    unsigned char taster = 0;
    Ob das allerdings dein Problem behebt, wage ich zu bezweifeln.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    05.02.2006
    Beiträge
    14
    ich initialisiere i doch ganz am amfang mit "int i;" und setzte dann i bei jedem schleifenaufruf auf 0 zurück, oder?

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.02.2006
    Ort
    Scheeßel
    Alter
    36
    Beiträge
    233
    Du deklarierst i mit
    Code:
    int i;
    Danach hat i aber einen undefinierten Wert. i initialisieren, also ihm einen definierten Anfangswert geben, tust du mit
    Code:
    int i = 0;
    Wobei i danach dann statt des undefinierten Zustands logischerweise den Wert 0 hat.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    05.02.2006
    Beiträge
    14
    ok, ich probiere es mal aus - kann ja nie schaden )

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.02.2006
    Ort
    Scheeßel
    Alter
    36
    Beiträge
    233
    Genau... Erwarte deinen Bericht.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    05.02.2006
    Beiträge
    14
    Hallo,
    hat leider nichts gebracht.. ((

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.02.2006
    Ort
    Scheeßel
    Alter
    36
    Beiträge
    233
    Hmm, aber wenigstens ist es jetzt programmatisch korrekt.

    Jetzt kann ich dir aber nicht weiterhelfen, da der Code für mich als reiner Programmierer zwar unsauber, aber doch lauffähig aussieht. Ich kenne mich mit den Funktionen des Asuro gar nicht aus. Deshalb kann ich dir auch nicht sagen, welchen Wert 'taster' haben müsste, nach dem der eigentliche Taster einmal gedrückt und einmal wieder losgelassen wurde. Hätte er - was nach meinem Verständnis so sein müsste - nach dem Loslassen wieder den Wert 0, müsste dein Programm funktionieren. Das scheint nicht der Fall zu sein. Hast du die Möglichkeit, dir den Wert von 'taster' ausgeben zu lassen? Irgendwie mit 'nem Display oder so? Oder gibt es eine Art "Simulator" oder Debugger für solche Zwecke?

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    28.07.2005
    Ort
    Garching b. München
    Beiträge
    62
    Hi, habe gerade meine Vermutung nochmal in der Praxis bestätigen lassen:
    es liegt an deiner Abfrage
    Code:
       
    unsigned char taster;
       taster = PollSwitch();
       taster = PollSwitch();
       taster = PollSwitch();
    
       
       if(taster>0)
       {
    stattdessen:

    Code:
       if(PollSwitch()>0)
       {
    Dann funktionierts

    Wieso hast du überhaupt drei Mal hintereinander den Wert übergeben?

    Also meiner Meinung nach müsste es am Typ "unsigned char" liegen - PollSwitch() gibt doch eine integer Wert zurück oder? Musste mal in die asuro.h oder asuro.c schaun

    EDIT: hm nach einer kleinen recherche käme ich auch auf deinen code wenn ich es ausformulieren müsste...versteh nicht, warum dein code nicht funktiniert, aber irgendwie liegt es trotzdem daran - bei mir zumindest
    "Die Matratze ist sehr Komfortabel und es ist mit kurtzen Handgriffen zusammenzuklappen keinen großen aufwand nur die zwei enden aneinanderklappen und einen rimen einsetzen, fertig."

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.02.2006
    Ort
    Scheeßel
    Alter
    36
    Beiträge
    233
    Drei mal hintereinander vermute ich mal zur Entprellung des Tasters.

    Und solange der von einer Funktion zurückgegebene Wert <= 255 (bei unsigned) ist, ist es kein Problem, einen int nach char zu casten. Bei Werten > 255 gibt es allerdings einen Überlauf.

Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •