Czego tu szukasz? :)

#include <Servo.h>

Servo servo;
int dioda = 13;
int minimalnaOdleglosc = 0;
int katPrzyMinimalnejOdleglosci = 0;
int aktualnaOdleglosc = 0;
int aktualnyKat = 0;

// nie jestem pewien czy to znajdzie najblizsza czy najdalsza odleglosc,
// bo nie wiem czy dane z miernika rosna z odlegloscia czy maleja
// mozliwe, ze jest to odwrotnie niz w poleceniu!
// algorytm obroci servo w kierunku gdzie na wejsciu z miernika jest najnizsza wartosc (A TO MOZE BYC NAJWIEKSZA ODLEGLOSC!)

void setup() 
{
	servo.attach(9); // servo jest podlaczone do PIN 9
	servo.write(0); // ustawiamy servo na ustawienie poczatkowe
	pinMode(dioda, OUTPUT); // dodajemy diode
}

void loop()
{
	delay(500); // czekamy, az servo ustawi sie na pozycje poczatkowa
	// pelny obrot o 180 stopni powinien zajac 0.3 sec, a my damy 0.5 dla pewnosci
	aktualnaOdleglosc = analogRead(0); // wczytujemy aktualna odleglosc
	aktualnyKat = 1;// obracamy na kat 1 stopien [zakres serva jest od 0 do 180]
	// niech sie kreci, az obroci sie do 180 stopnia
	while(aktualnyKat <= 180)
	{
		servo.write(aktualnyKat);// obracamy na aktualny kat
		delay(20);// czekamy, az sie obroci, moze wymagac wiecej czasu!
		aktualnaOdleglosc = analogRead(0);// wczytujemy aktualna odleglosc
		if(aktualnaOdleglosc < minimalnaOdleglosc)// tu mozna odwrocic poszukiwanie na najwieksza wartosc
		{
			// jesli jest blizej niz dotychczas znana minimalna odeglosc to zapamietujemy kat
			minimalnaOdleglosc = aktualnaOdleglosc;
			katPrzyMinimalnejOdleglosci = aktualnyKat;
		}
		aktualnyKat += 1;// krecimy
	}
	// krecimy na ten kat przy ktorym odleglosc byla najmniejsza
	servo.write(katPrzyMinimalnejOdleglosci);
	// czekamy az sie obroci
	delay(500);
	// zapalamy diode na znak, ze teraz 'patrzy' na najblizszy punkt
	digitalWrite(dioda, HIGH);
	// TEGO NIE BYLO W POLECENIU! DAJCIE TU delay(9999999) i nie gascie diody!!
	// TEGO NIE BYLO W POLECENIU! DAJCIE TU delay(9999999) i nie gascie diody!!
	// TEGO NIE BYLO W POLECENIU! DAJCIE TU delay(9999999) i nie gascie diody!!
	// czekamy 5 sekund
        delay(5000);
        // gasimy diode
	digitalWrite(dioda, LOW);
	// jedziemy na pozycje startowa i 'loop' zaczyna szukanie od nowa najblizszej pozycji (mozemy przestawic arduino)
	servo.write(0);
}
Ten wpis został opublikowany w kategorii PJWSTK, PJWSTK - SWB. Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *