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
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! Értékeléshez bejelentkezés szükséges! |
Bejelentkezés
Hirdetés |