-         

Ergebnis 1 bis 4 von 4

Thema: vorrangig programmieren in C++

  1. #1

    vorrangig programmieren in C++

    Anzeige

    Hallo,
    ich hab ein kleines Programm für meinen Asuro geschrieben. Dabei fährt dieser bei betätigen eines Kollisionstaster 5s geradeaus.
    Ich möchte diesen jetzt so programmieren das wenn in dieser Zeit (5s) ein anderer Taster gedrückt wird dieser anhält.
    Wie kann ich das in c++ lösen. denn wenn ich den ersten Taster gedrückt habe fährt der Asuro ja 5s und ich kann nicht auf das Programm in dieser Zeit zugreifen oder??

    int main(void)
    {

    Init ();
    while(1)
    {
    switch (PollSwitch())
    {
    case 0x02:
    MotorDir(FWD,FWD);MotorSpeed(120,120);Msleep(1000) ;
    break;
    }
    }
    return 0;
    }

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    31.08.2005
    Ort
    bei Graz
    Alter
    27
    Beiträge
    225
    Hallo,

    erste Frage: ich seh das ++ von C++ in deinem Code nicht! Wo isses denn?

    Lösung:
    Wenn eine Betätigung des Kollisionstasters erkannt wird, könnten die Motoren für das geradeausfahren aktiviert werden, gleichzeitg aber auch ein Timer gestartet werden der genau nach 5 Sekunden einen Interrupt auslöst welcher die Motoren wieder stoppt.

    So wird der Code
    Code:
    while(1)
    {
    switch (PollSwitch())
    {
    case 0x02:
    MotorDir(FWD,FWD);MotorSpeed(120,120);Msleep(1000);
    break;
    }
    }
    ausgeführt wärend die Motoren laufen.



    Jaja, Timer sind eine feine Sache

    lg und viel Glück, MoFe

  3. #3
    ja ist schon klar.
    ich möchte aber in dem Zeitraum in dem der Timer läuft die Motoren stoppen. Ich kenns eben nur z.B. von einer S7-Steuerung in der ich RS-glieder benutzen kann und wenn beide gedrückt sind soll z.B. der Motor stoppen.
    ?????????????

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    48
    Beiträge
    524
    Hi,

    die Funktionen, die du in deinem Code benutzt, kenne ich nicht.
    Ich vermute, dass Msleep (1000) den Controler 5 sek. lang mit nichts beschäftigt und dann den Motor abschaltet. So, diese Funktion löscht du jetzt einfach und löscht danach den Papierkorb, damit sie nicht wieder raus krabbeln kann.
    Code:
    volatile unit8_t uiMotorAus = 0;
    
    void InitTimer (){
    	WichtigeRegister |= InterruptAn|5SekEinstellen;
    }
    
    ISR (TIMERn_Dein_vector)
    {
    	uiMotorAus = 1;
    }
    
    int main(void) 
    { 
    
    InitTimer (); 
    sei();
    while(1) 
    { 
    	if (Taster_ist_gedrückt){
    		StartTimer();
    		StartMotor();
    	}
    	if (uiMotorAus == 1){
    		StopMotor();
    		StopTimer();
    		uiMotorAus = 0;
    	}
    	if (StopTasterIstGedrückt){
    		uiMotorAus = 1;		
    	}		
    
    return 0; 
    }
    Vermutlich meinte FoFe ein Programm nach diesem Gerüst. Ob der Ablauf jetzt genau das ist was du meist, weiß ich nicht.
    Das schöne daran ist, der Controller kann noch diverse andere Sachen neben der Motorsteuerung erledigen.

    Gruß

    Jens

    ps. Bitte die Codetags in deinen Postings verwenden.

Berechtigungen

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