Skocz do zawartości

LineFollower PID - Tablica czujników


komabra

Pomocna odpowiedź

Cześć. Siedzę od kilku godzin nad problemem i nie mam już pomysłu. Sprawa pewnie znana...

Do tablicy trzeba wstawić stany czujników. Zrobiłem to tak:

//definicje stanów czujników!!!
#define CZ1 (PIND & (1<<PD0))
#define CZ2 (PIND & (1<<PD1)>>1)
#define CZ3 (PIND & (1<<PD2)>>2)
#define CZ4 (PIND & (1<<PD3)>>3)
#define CZ5 (PIND & (1<<PD4)>>4)
#define CZ6 (PIND & (1<<PD5)>>5)
#define CZ7 (PIND & (1<<PD6)>>6)

int tablica_Wagi[] = {-3,-2,-1,0,1,2,3};
int tablica_Czujnikow[] = {CZ1, CZ2, CZ3, CZ4, CZ5, CZ6, CZ7};
int tablica_Wyniki[7];
for(int i=0; i<7; i++){
	if(tablica_Czujnikow[i]){
		tablica_Wyniki[i]=1;
	}
	else if(!(tablica_Czujnikow[i])){
		tablica_Wyniki[i]=0;

	}
}

for(int i=0; i<7; i++){
	error += tablica_Wagi[i]*tablica_Wyniki[i];
}

Działa to w pojedynczych aspektach kiedy sprawdzam jedynie stan jednego czujnika, lecz jak zaczynam dodawać stany w tablicy to albo error dąży do nieskończoności albo jest zerem. Prawdopodobnie jest to banalny błąd, ale nie mam pojęcia gdzie..

Link do komentarza
Share on other sites

Definiujesz wyrażenia, które nie mogą być policzone w trakcie kompilacji, bo przecież wymagają wykonania kodu wczytującego port i przesuwającego odczyt o ileś bitów. Czegoś takiego nie możesz wstawić do tablicy. Tam mogą być tylko liczby, bo to obszar pamięci danych. Możesz do tablicy wstawić pozycje bitowe poszczególnych czujników:

#define CZ1 0
#define CZ2 1
#define CZ3 2 itd..

a potem korzystać z tego przy przesuwaniu:

uint8_t
 sensor_port,
 error;

sensor_port = PIND;
error = 0;
for(int i=0; i<7; i++){ 
   tablica_Wyniki[i] = (sensor_port >> tablica_Czujnikow[i]) & 1;
   error += tablica_Wagi[i] * tablica_Wyniki[i];    
   } 
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.