Fórum témák

» Több friss téma
Cikkek » WILL-I - Robot, AVR mikrovezérlővel
WILL-I - Robot, AVR mikrovezérlővel
Szerző: Fizikus, idő: Dec 1, 2009, Olvasva: 61071, Oldal olvasási idő: kb. 1 perc
Lapozás: OK   10 / 12

 WILL-I vezérlő programja

 
Miután elkészítettük a motorvezérlő utasításokat tartalmazó motor.h fájlt, végre megírhatjuk a robotunkat vezérlő programot. Ez elég egyszerű és rövid lesz.
 
WILL-I a külvilágot a 2 mikrokapcsolón keresztül érzékeli, mondhatjuk, hogy csak a sötétben tapogatózik. Folyamatosan halad előre, amíg valamelyik karján lévő mikrokapcsoló akadályba nem ütközik. Ezután hátratolat, elfordul az akadálytól (ha a bal oldali karja ütközött akadályba, akkor jobbra fordul), majd ismét elindul előre.
 
Biztonsági okokból raktam egy sima nyomógombot is a robotra (a PD2-es lábra), bekapcsolás után gombnyomásra vár, nem indul el. Erre azért volt szükség, mert meguntam, hogy a kísérletezéseim alatt sokszor előfordult, hogy miután beégettem az új programot, WILL-I egyszerűen elindult lefelé az asztalomról, Maga után húzva égetőt, kábelt és minden egyebet ami rá volt kötve…
 
WILL-I vezérlő programja :
 
/*    WILL-I vezerlo program
 
              MOTOR1
      - PB0 <------> 1B
      - PD7 <------> 1A
      - PB1 <------> 1E
 
              MOTOR2
      - PD5 <------> 2A
      - PD6 <------> 2B
      - PB2 <------> 2E
*/
//---------------------------------------------------------------------
 
#define F_CPU 1000000UL /* 1 MHz-es CPU orajel megadasa*/
 
#include <util/delay.h> // idozito, keslelteto rutinokat tart. fajl
#include <avr/io.h>     //AVR konstansokat, beallitasokat tart. fájl
#include <util/motor.h>       // motorvezerlo utasitasokat tart. fajl
 
int main (void)
{
 
      PORTD |= _BV(PD2);      // PD2-es lab bemenet (nyomogomb)
      PORTD |= _BV(PD3);      // PD3-as lab bemenet (jobb mikrokap.)
      PORTD |= _BV(PD4);      // PD4-es lab bemenet (bal mikrokapcs.)
 
      while (PIND & _BV(PD2));      /* várakozó cilkus amíg PD2 erteke nem 0 (amig a gomb nincs lenyomva) */
          
            while (1)
            {    
                  if (be_d(3)==0) /*jobb oldali mikrokapcs. allapotanak vizsgalata (tortent-e utkozes) */
                  {
                        hatra(100);   //ha utkozest tortent hatra 0.5 s
                        _delay_ms(1000);
                        fordul_bal(50);   // fordulas balra 0.3 s
                        _delay_ms(500);
                  }
                  else if (be_d(4)==0) /*bal oldali mikrokapcs. allapotanak vizsgalata (tortent-e utkozes) */
                  {
                        hatra(100);   //ha utkozes tortent hatra 0.5 s
                        _delay_ms(1000);
                        fordul_jobb(50);        //fordulas jobbra 0.3 s
                        _delay_ms(500);
                  }
                  else
                  {
                        elore(100);       /* nincs utkozes! , teljes gozzel elore! */
                  }
 
            }
}

A cikk még nem ért véget, lapozz!
Következő: »»   10 / 12
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem