4.4.6   Hindernis ausweichen mit dem ASURO
    
Problembeschreibung
Schriftliche Problemlösung
Technische Aspekte zur Problemlösung                           <= zurück zur
Technische Informatik
Grafische Problemlösung                                                
Ausblicke                                                        <= zurück zum vorherigen Projekt    Tasten unterscheiden am ASURO  
Informationen zum Thema                               
Schülerprojektdokumentationen                        weiter zum nächsten Projekt =>   An das Hyperterminal senden mit ASURO

 
an den
 Anfang
Problembeschreibung

Der Asuro fährt langsam gerade aus und fährt dabei gegen ein Hindernis.
Um dieses zu umfahren, setzt er zurück und fährt eine 90° Kurve.
Dann startet er einen neuen Anlauf.
 
  Asuro Test Video




© S.H., D.M.

   

Abgeschlossene Schülerprojekte:





Stand:
01.11.2007

 <= zurück zur Technische Informatik


 
an den
 Anfang
Schriftliche Problemlösung


 

 
 
an den
 Anfang
Technische Aspekte zur Problemlösung



zum Vergrößern auf die Abbildung klicken

Simulation mit PSPICE



PSPICE-Projektordner (.zip)

 
  
an den
 Anfang
Grafische Problemlösung mit ASURO-Funktionen  - der Programmablaufplan


 

Das erste Symbol benutzt man, um den Start einer Funktion darzustellen. Hier wird die Main-Funktion begonnen.

Um ein Unterprogramm darzustellen benutzt man ein dreigeteiltes Rechteck.   Hier wird die Initialisierung gestartet.

Die "normalen" Rechtecke beschreiben ein Hauptprogramm. In diesem Fall wird der Befehlt zum Vorwärtsfahren erteilt.

Rauten beschreiben eine Bedingung die erfüllt werden muss. In diesem Fall ob ein Taster gedrückt ist oder nicht.
Wenn die Bedingung des gedrückten Tasters erfüllt ist wird der Asuro ein Ausweichprogramm ausführen sobald der Taster keinen Druck mehr erhält wird erneut die Bedingung geprüft.
Wenn dieser Taster nicht mehr gedrückt ist wird wieder das Hauptprogramm zum Vorwärtsfahren gestartet.


Programmablaufplan als Dateityp *.dia

dia Datei noch zum Download anbieten!!!!

 


                                                                                                 
 

   
an den
 Anfang
Umsetzung in den Quelltext mit ASURO-Funktionen

 
#include "avr/asuro.h"                                         //ausro.h datei einbinden

void main()
{
int zaehler;                                       

   Init();                                                     // Funktion definieren
    while(1)
    {
        if (PollSwitch() == 1)                                 // Berührung des Tasters
        {
            if(PollSwitch() == 1)
            {
                if(PollSwitch() == 1)
                {

                    StatusLED (YELLOW);                        // Status LED gelb leuchten
                    MotorDir(RWD,RWD);                         // Motorrichtung Rückwärts
                    MotorSpeed(100,200);                       // MotorSpeed 100,200  
                    
                    for( zaehler=0; zaehler < 800; zaehler++ ) // for - Schleife
                    {                                          // 800 mal durchlaufen 
                   
                        Sleep(255);                            // ~ 3 ms Sleep-Funktion
                    }
                }
            }
         }      
 
         else                                                  // else = sonstige Funktion
         {
             StatusLED (GREEN);                                // Status LED grün leuchten
             MotorDir(FWD,FWD);                                // Motorrichtung Vorwärts
             MotorSpeed(120,120);                              // MotorSpeed 120,120
         }      
    }              
}

                                 

   

 
 

 
    

an den
 Anfang
Grafische Problemlösung "ganz dicht am Mikrocontroller"

 

                                                                                                 
 

   

 

 

an den
 Anfang
Umsetzung in den Quelltext "ganz dicht am Mikrocontroller"


#include <avr/asuro.h>

int main ( void )
{
    unsigned char taste;
    long zaehler;
    Init ( );

    while ( 1 )
    {
        taste = PollSwitch();

        if( taste == 0)                                       // wenn keine taste gedrückt, dann:
        {

            StatusLED ( GREEN );                              // Status LED gruen (Vorwaertsfahrt)
            MotorDir ( FWD, FWD );                            // Motorrichtung vorwaerts
            MotorSpeed ( 100, 100 );                          // vorwaerts fahren

            for ( zaehler=0 ; zaehler < 800 ; zaehler++ )
            {
                asm volatile ( "nop":: ) ;

            }

         }

         else                                                 // wenn taste gedrückt wurde:
         {

             StatusLED ( YELLOW );                            // Status LED gruen (Vorwaertsfahrt)
             MotorDir(RWD,FWD);                               // Motorrichtung Rückwärts
             MotorSpeed(80,80);                               // MotorSpeed 120,120

             for ( zaehler=0 ; zaehler<=125000 ; zaehler++ )  // for-Schleife 125000 mal durchlaufen
             {                                                // ein Schleifendurchlauf 4,38 µs
                 asm volatile ( "nop":: ) ;                   // "tue nichts", no Operation

             }                                                // ergibt 4,38 µs x 125000 ~ 0,603  s
         }
    }
}



 

   
an den
 Anfang

Informationen zum Thema





   

Abgeschlossene Schülerprojekte:





Stand:
27.11.2007

 <= zurück zur Technische Informatik