-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Kollisionsprogramm

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    03.04.2008
    Ort
    Kulmbach
    Beiträge
    6

    Kollisionsprogramm

    Anzeige

    Hallo Programmiergemeinde

    ich habe seit 1 woche mit dem programmieren des asuros begonnen und wollte heute ein programm entwerfen

    der asuro soll vorwärts fahren bis er anstößt und dann etwa 2 sec rückwärts fahren um dann erneut nach vorne zu fahren

    das programm von mir sieht so aus

    Code:
    #include "asuro.h"  
    
    void warten(unsigned char zeit);
    
    int main(void)
    {
    	//unsigned int i;
    	unsigned char taste;
    	unsigned int asd = 0;
    	
    	Init();
    	MotorDir(FWD,FWD);
    	MotorSpeed(150,150);
    	warten(250);
    	while(1)
    	{
    	
    		taste = PollSwitch();
    		
    		if (taste!=0)
    		{
    			StatusLED(YELLOW);
    			warten(100);
    			asd = 1;
    		}
    		
    		if(asd == 1)
    		{
    			StatusLED(GREEN);
    			MotorDir(RWD,RWD);
    			MotorSpeed(150,150);
    			warten(500);
    			MotorSpeed(0,0);
    			asd = 0;
    		}
    		else 
    		{
    			StatusLED(RED);
    			MotorDir(FWD,FWD);
    			MotorSpeed(150,150);
    		}
    	}
    	return(0);
    }
    
    void warten(unsigned char zeit)
    {
    	unsigned int i;
    	for (i = 0; i < zeit; i++) 
    	{
    		Sleep(255);
    	}
    }
    jedoch der asuro fährt nach vorne und beginnt dann nur noch rücktwärts zufahren und das compilieren zeigt keine weitern fehler mehr an

    mfg

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.07.2004
    Ort
    bei Stuttgart
    Alter
    35
    Beiträge
    760
    hallo,
    eigentlich sieht das ganz gut aus, ka woran das liegt. aber warum machst du 2 if abfragen? waum nicht den inhalt vov if asd==1 direkt da hin schreiben, wo asd=1 gesetzt wiird, und das else,zum ersten if.
    mfg jeffrey

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.11.2006
    Ort
    Hamburg
    Alter
    25
    Beiträge
    384
    Probier mal aus dem if(asd == 1), else if (...) zu machen. Vielleicht liegt es daran.

    mfg
    Erik

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    03.04.2008
    Ort
    Kulmbach
    Beiträge
    6
    danke
    @jeffrey das 2 mal if war nur dazu da um die led direkt zu testen

    ok und ich werd das ganze mal morgen durchgehen im praktikum

    cout

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    08.07.2007
    Beiträge
    18
    den fehler kenn ich du musst Pollswitch ungefähr 10 mal hintereinander in einer schleife abspielen und die ergebnisse speichern
    und wenn sie alle gleich sind erst den befehl zum ausweichen geben

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    08.07.2007
    Beiträge
    18
    so in etwa:

    for(i=0;i<10;i++)
    taste[i]=PollSwitch();

    if(taste[0] > 0 && taste[1] > 0 && taste[2] > 0 && taste[3] > 0 && taste[3] > 0 && taste[4] > 0 && taste[5] > 0 && taste[6] > 0 && taste[7] > 0 && taste[8] > 0 && taste[9] > 0){
    ... Source Code
    }

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.01.2008
    Alter
    26
    Beiträge
    239
    ich glaube 10 mal ist etwas übertieben, 2-3 mal müssten genügen

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    29.07.2005
    Alter
    26
    Beiträge
    128
    anstatt:
    Code:
     
          taste = PollSwitch();
          
          if (taste!=0)
          {
             StatusLED(YELLOW);
             warten(100);
             asd = 1;
    würde ich so machen:

    Code:
    taste = PollSwitch();
          
          if (taste!=0) && (PollSwitch()!=0))
          {
             StatusLED(YELLOW);
             warten(100);
             asd = 1;
    da du die pollswitch funktion öfters aufrufen solltest!!!

    so sollte es funktionieren!!



    EDIT:
    da war wohl hail schneller :P JA, 2 - 3 mal sollte reichen!! (bei 3 mal. einfach eine weitere Variable deklarieren, sie mit pollswitch gleichstellen und in der IF-Bedingung auffähren!)

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    08.04.2008
    Beiträge
    16
    Der grund warum ein button öfters ausgeführt werden muss ist der, weil der Kondensator einwenig braucht bis er volläuft richtig?=

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.01.2008
    Alter
    26
    Beiträge
    239
    hallo Hardest

    ob der Kondensator auch eine so wichtige Rolle spielt weiß ich nicht, aber in einem anderen Tread (weiß leider nicht mehr welchem), steht, dass es hauptsächlich durch Spannungsspitzen, die von den Motoren verursacht werden, zu diesen falschen Werten bei PollSwitch() kommt

    mfg hai1991

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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