Skocz do zawartości

QTR-3RC pololu atmega8


zag102

Pomocna odpowiedź

Witam wszystkich od kilku dni walczę z wspomnianym cyfrowym czujnikiem i atmega8 i c++ posiłkowałem się bibliotekami z oficjalnej strony pololu https://www.pololu.com/docs/0J20/3.k ale wywala mi errory po kompilacji pisze że:

Error 1 undefined reference to `qtr_rc_init'

Error 2 undefined reference to `qtr_calibrate'

Error 3 undefined reference to `delay_ms'

Prosze o pomoc może ktoś coś takiego programował.

Link do komentarza
Share on other sites

#include <avr/io.h>
#include <util/delay.h>
#include <pololu/orangutan.h>

//Dioda LED
#define LED (1<<PD2)
#define DIODA PORTD ^= LED
//Przycisk
#define KEY (1<<PD6)
#define PRZYCISK !(PIND & KEY)
uint8_t klawisz_wcisniety(void);
//silnik 1 (LEWY) - wejscia
#define BIN1_1 PD1
#define AIN2_1 PD0
//silnik 2 (PRAWY) - wejscia
#define AIN1_2 PB0
#define BIN2_2 PD7
//PWM
#define PWM_A    (1<<PB1)
#define PWM_B    (1<<PB2)
//Prędkośc max
int predkosc_max = 60;
//Prędkośc min
int predkosc_min = 30;
int predkosc_atak = 200;
void jazda_tyl(void) {
DDRD |= (1<<BIN1_1);
PORTD &= ~ (1<<BIN1_1);
DDRD |= (1<<AIN2_1);
PORTD |= (1<<AIN2_1);
OCR1B = predkosc_max;

DDRD |= (1<<BIN2_2);
PORTD &= ~ (1<<BIN2_2);
DDRB |= (1<<AIN1_2);
PORTB |= (1<<AIN1_2);
OCR1A = predkosc_max;

}

//Zatrzymanie silników
void motor_stop(void) {
OCR1B = 0;
DDRD |= (1<<BIN1_1);
PORTD &= ~(1<<BIN1_1);
DDRD |= (1<<AIN2_1);
PORTD &= ~(1<<AIN2_1);
OCR1A = 0;
DDRD |= (1<<BIN2_2);
PORTD &= ~ (1<<BIN2_2);
DDRB |= (1<<AIN1_2);
PORTB &= ~(1<<AIN1_2);
}
//Jazda do przodu
void jazda_przod(void) {
DDRD |= (1<<BIN1_1);
PORTD |= (1<<BIN1_1);
DDRD |= (1<<AIN2_1);
PORTD &= ~(1<<AIN2_1);
OCR1B = predkosc_max;

DDRD |= (1<<BIN2_2);
PORTD |= (1<<BIN2_2);
DDRB |= (1<<AIN1_2);
PORTB &= ~(1<<AIN1_2);
OCR1A = predkosc_max;


}
void jazda_przod_atak(void) {
DDRD |= (1<<BIN1_1);
PORTD |= (1<<BIN1_1);
DDRD |= (1<<AIN2_1);
PORTD &= ~(1<<AIN2_1);
OCR1B = predkosc_atak;

DDRD |= (1<<BIN2_2);
PORTD |= (1<<BIN2_2);
DDRB |= (1<<AIN1_2);
PORTB &= ~(1<<AIN1_2);
OCR1A = predkosc_atak;


}

uint8_t klawisz_wcisniety(void)
{
if(PRZYCISK)
{
	_delay_ms(80);
	if(PRZYCISK)
	return 1;
}
return 0;
}


int main( void ){

/* USTAWIANIE WYJŚĆ */
DDRB |= (PWM_A|PWM_B);    
/* INICJALIZACJA PWM */
TCCR1A |= (1<<WGM10);                    
TCCR1B |= (1<<WGM12);
TCCR1A |= (1<<COM1A1)|(1<<COM1B1) ;
TCCR1B |= (1<<CS10)|(1<<CS11);            

OCR1A = 0;         
OCR1B = 0;        

DDRD |= LED;
PORTD |= LED;
DDRD &= ~KEY;
PORTD |= KEY;
DDRD |= (1<<PD2);
DDRC &= ~(1<<PC0);
DDRC &= ~(1<<PC1);
DDRC &= ~(1<<PC2);

PORTC |= (1<<PC0);
PORTC |= (1<<PC1);
PORTC |= (1<<PC2);

// initialize  QTR sensors jak to dodam poniżej te dwie linijki to wywala błędy
// bez nich czujnik reaguje tylko na zbliżenie i oddalenie czyli kreci kołami w przód lub w tył
// i błędów nie ma 
 unsigned char qtr_rc_pins[] = {IO_C0, IO_C1, IO_C2};
 qtr_rc_init(qtr_rc_pins, 3, 2000, 255);

while(1)
{

	if(klawisz_wcisniety()) {
		while(1)
		{

			if( ( PINC & (1<<PC0) ) )
			{
				jazda_przod();
			}
			else
			{
				jazda_tyl();
			}
			if( ( PINC & (1<<PC1) ) )
			{
				jazda_przod();
			}
			else
			{
				jazda_tyl();
			}
			if( ( PINC & (1<<PC2) ) )
			{
				jazda_przod();
			}
			else
			{
				jazda_tyl();
			}

		}//while
	}//przycisk
}//while glowny
}

to co dodałem w opisie co wywala błedy

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.