#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);
}
Post Views: 1 964
Ten wpis został opublikowany w kategorii
PJWSTK,
PJWSTK - SWB. Dodaj zakładkę do
bezpośredniego odnośnika.