- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: Kollisionsprogramm über interrupt

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    29.10.2008
    Beiträge
    6
    Anzeige

    E-Bike
    hai1991 hat das erkannt: ich ha bne skizze gemacht damit das ganz klar ersichtlich wird

    er soll prinzipiell zwischen rechts und linkskurve unterscheiden können.

    die skizze ist im anhang zum download frei


    Bild hier  

  2. #12
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    Hi, zusammen,

    ja, bei dieser Konstellation, muss ich euch Recht geben.
    Na, dann bleibt ja noch der Timer-Interrupt, der so lustig vor sich hinzählt.

    Da Msleep() benutzt wird, sehe ich, dass die Asuro-LIB benutzt wird.
    Dort gibt es eine Funktion á la "HoleZeitInMSSekunden".
    Hier ein ganz, ganz grober Rahmen. (Ich muss noch Arbeiten. hoffe es sieht jetzt kein Chef rein )
    Code:
    long letzter_kontakt = 0;
    long vor_letzter_kontakt;
    
    if (switched == 1)
    {
      vor_letzter_kontakt = letzter_kontakt;
      letzter_kontakt = "HoleZeitInMSSekunden";
      if (letzter_kontakt > (ODER <??) vor_letzter_kontakt + (ODER -??) 100bisNochMehrMillisekunden)
         variable_fuer_grad = 90; (Oder besser hier 180)
      else
         variable_fuer_grad = 180; (und dafuer hier nur 90?? ;-))
    
       ...
       ...
    }
    Gruß Sternthaler

    P.S.: Schöne Zeichnung sebär. Nun schaffe ich es auch dein Problem zu 'sehen'. Hab leider nur schlamperlich deinen Text gelesen.
    Lieber Asuro programieren als arbeiten gehen.

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    29.10.2008
    Beiträge
    6
    wir haben das problem anders lösen können
    werde morgen den quelltext posten, damit ihr auch was davon habt, hab ihn aktuell nur aufm laptop in der schule und nicht hier zuhause

    danke für die viele hilfe!!
    lg

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    29.10.2008
    Beiträge
    6
    sooo, hier unser finaler quellcode!
    einige extras (z.b. Disco-funktion) haben wir zusätzlich noch eingebaut.

    Code:
    ############################################################################################
    ###       -    FloBa Productions Inc. proudly presents: ASURO Parcourprogramm    -       ###
    ###       -             Ausgelegt für Parcours mit rechten Winkeln               -       ###
    ###       - Asuro sollte auf einer hellen Fläche fahren um Ziellinie zu erkennen -       ###
    ###       -    Programm zur öffentlichen Verwendung, Missbrauch* wird geahndet   -       ###
    ###       -                 * zum Beispiel schlechte Kritik                      -       ###
    ###       - Fehler sind ausschliesslich auf Hardware und Batterie zurückzuführen -       ###
    ###       -       Viel Vergnügen beim Spielspass wünscht das Asuro-Care-Team     -       ###
    ############################################################################################
    
    
    
    
    #include "asuro.h"
    
    #define FULL_L 200
    #define FULL_R 202
    
    
    volatile unsigned int i;
    
    void Fahren(void)                        	    /* Vorwärts fahren */
    {
      StatusLED(GREEN);
      BackLED(OFF,OFF);
      MotorDir(FWD,FWD);
      MotorSpeed(FULL_L,FULL_R);
    }
    
    void Anhalten(void)					        	/* Anhalten */
    {
      StatusLED(RED);
      BackLED(OFF,OFF);
      MotorDir(BREAK,BREAK);
    }
    
    void Zurueck(void)				           		/* Zurück fahren */
    {
      StatusLED(YELLOW);
      BackLED(ON,ON);
      MotorDir(RWD,RWD);
      MotorSpeed(FULL_L,FULL_R);
    }
    
    
    void KurveLR(void)				    	    	/* Kurve rückwärts Links */
    {
      StatusLED(YELLOW);
      BackLED(ON,OFF);
      MotorDir(RWD,RWD);
      MotorSpeed(FULL_L,0);
    }
    
    
    void KurveRR(void)			        	    	/* Kurve rückwärts Rechts */
    {
      StatusLED(YELLOW);
      BackLED(OFF,ON);
      MotorDir(RWD,RWD);
      MotorSpeed(0, FULL_R);
    }
    
    void KurveRF(void)								/* Kurve vorwärts Rechts */
    {
      StatusLED(YELLOW);
      BackLED(OFF,OFF);
      MotorDir(BREAK,FWD);
      MotorSpeed(0,FULL_R);
    }
    
    void Firstcol(void)								/* Programm Rechtskurve im Parcour 1. Kollision */
    {
      Anhalten();									
      Msleep(250);
    	  
      Zurueck();
      Msleep(15);
    	  
      Anhalten(); 
      Msleep(10);
    	  
      KurveRR();
      Msleep(400);
    	  
      Anhalten();
      Msleep(250);
    	  
      switched = 0;
      StartSwitch ();
    }
    
    void Secondcol(void)							/* Programm Linkskurve im Parcour, 2. Kollision */
    {
      Anhalten();
      Msleep(250);
       
      Zurueck();
      Msleep(10);
    	  
      Anhalten();
      Msleep(250);
    	  
      KurveLR();
      Msleep(355);			
    	  
      Anhalten();
      Msleep(250);
    	  
      KurveRF();
      Msleep(355);
    			
      Anhalten();
      Msleep(250);
    			
      switched = 0;
      StartSwitch();
    }  
      
    void Thirdcol(void)								/* Programm Sackgasse im Parcour, 3. Kollision */
    {
      Anhalten();
      Msleep(250);
    					  
      Zurueck();
      Msleep(10);
    					  
      KurveLR();
      Msleep(310);
    					  
      Anhalten();
      Msleep(250);
    					  
      switched = 0;
      StartSwitch();
    
    }
    
    void Disco(void)								/* PARTYTIME! -15mal blinken/piepsen-*/
    {
      
      for(i = 0; i < 16; i++)
      {
       MotorDir(FWD,FWD);
       MotorSpeed(50,50);
       BackLED(OFF,OFF);
       StatusLED(OFF);
       FrontLED(OFF);
       Msleep(200);
       
       MotorDir(BREAK,BREAK);
       BackLED(ON,ON);
       StatusLED(RED);
       FrontLED(ON);
       Msleep(200);
       }
       
       
    }
    
    
    int main (void)									/* Hauptprogrammbeginn */
    {
      unsigned int data[2];							/* Speicherplpatz für Helligkeitswert */
      unsigned int Summe;
      Init ();
      switched = 0;									/* Kollisionserkennung auf 0 setzen */
      StartSwitch ();								/* Taster-Interrupt aktivieren */
      FrontLED(ON);
      LineData(data);							    /* Speichern von Helligkeitswert in data[0,1] */
      Summe = data[0]+data[1];						/* Summe der Werte beider Fototransistoren */
      
      
      while (1)
      {    
    	if (switched == 1)							/* Wenn 1. Kollision, dann Rechtskurve 90° aus */
        {
          
    	  Firstcol();
    	  
    	  for(i = 0; i < 25000; i++)				/* Setze Zeitschlaufe für 2. Kollision */
    	  {
    		if (switched == 1)						/* Wenn 2. Kollision, dann Drehung 180° */
    		  {
    		    Secondcol();
    			
    			for(i = 0; i < 25000; i++)			/* Setze Zeitschlaufe für dritte Kollision */
    			 {
    				if (switched == 1)				/* Wenn 3. Kollision, dann Linksdrehung 90° */
    				 {
    				   Thirdcol();
    				 }
    
    				else							/* Keine 3. Kollision, Fahre normal */
    				 {
    	  		       Fahren();
    			     }  
    					
    					
    			 }	
    			
    		  }	
    		  
    		else									/* Keine 2. Kollision, Fahre normal */
    		 {
    		   Fahren();
    		 }    
    		  
    		  
    	  }
    	
    		
    		
    	}
    	
    	else										/* gar keine Kollision, Fahre normal, Stopp bei Linie */
    	{
    	  LineData(data);
    	  if(data[0]+data[1]+10 > Summe)			/* Untergrundhelligkeitsdifferenz feststellen */
    	  {
    	    Fahren();
    	  }
    	  else
    	  {
    	    Disco();								/* Party gut - Alles gut */
    		while(1)
    		{}										/* Endlosschleife - Ende des Programmes */
    	  }  
        }  
      }
    	
      return 0;	
    
    }
    danke für die ganze hilfe
    lg

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    10.11.2008
    Beiträge
    8
    wollte den code mal testen .. kriege folgende fehlermeldung .. kann mir wer weiter helfen

    Code:
    >Session Environment Variables:
    AF_AVRDIR=C:\WinAVR
    AF_PROJECT=Project1
    AF_SOURCE_FILES=new.c
    AF_ASM_SRC_FILES=
    AF_PRGDIR=C:\Program Files\AsuroFlash
    AF_PRJDIR=C:\ProgramData\AsuroFlash
    AF_LIB_PATH=%AllUsersProfile%/AsuroFlash/asuro-lib/lib
    File new.c saved.
    >Default make_all.cmd file created.
    >Default makefile created.
    Make
    C:\ProgramData\AsuroFlash>C:\WinAVR\utils\bin\make all 
    set -e; avr-gcc -MM -mmcu=atmega168 -DF_CPU=8000000UL -I. -g -Os -IC:\ProgramData/AsuroFlash/asuro-lib/lib/inc -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=new.lst new.c \
    	| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > new.d; \
    	[ -s new.d ] || rm -f new.d
    -------- begin --------
    avr-gcc --version
    avr-gcc (WinAVR 20081205) 4.3.2
    Copyright (C) 2008 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    avr-gcc -c -mmcu=atmega168 -DF_CPU=8000000UL -I. -g -Os -IC:\ProgramData/AsuroFlash/asuro-lib/lib/inc -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=new.lst new.c -o new.o
    avr-gcc -mmcu=atmega168 -DF_CPU=8000000UL -I. -g -Os -IC:\ProgramData/AsuroFlash/asuro-lib/lib/inc -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=new.o new.o   --output Project1.elf -Wl,-Map=Project1.map,--cref -LC:\ProgramData/AsuroFlash/asuro-lib/lib -lm -lasuro168
    new.o: In function `main':
    C:\ProgramData\AsuroFlash/new.c:152: undefined reference to `Init'
    make: *** [Project1.elf] Error 1
    
    
    ExitCode 2
    >Ready.

  6. #16
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    Hallo ezo2k3,

    als erstes solltest du einmal die '\'-Zeichen in deinen Pfadangaben gegen das '/'-Zeichen tauschen.
    Möglicherweise gibt es ein Problem, wenn eine Mischform, wie bei:
    -IC:\ProgramData/AsuroFlash/asuro-lib/lib/inc
    -LC:\ProgramData/AsuroFlash/asuro-lib/lib
    entsteht.

    Auch immer seeeehhhhr Kritisch sind Pfadangaben mit Leerzeichen im Namen.
    Das hast du bei der Variablen AF_PRGDIR=C:\Program Files\AsuroFlash
    Du solltest Verzeichnisse mit Sonderzeichen im Namen in dieser Umgebung unbedingt vermeiden.

    Viel Erfolg und Gruß
    Sternthaler
    Lieber Asuro programieren als arbeiten gehen.

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

Solar Speicher und Akkus Tests