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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.