27-11-2017, 22:03
Witam,
dopiero co się zarejestrowałem, bo mam problem i proszę bardziej ogarniętych o pomoc.
Dopiero zaczynam, znam podstawy elektroniki ale z programowaniem bardzo słabo.
Chcę napisać program, który porusza serwem w następujący sposób:
-pozycja I serwa (np 10 stopni)
-następnie w tej pozycji serwo pozostaje losowy czas z zakresu powiedzmy 3-15 sekund
-następnie serwo zmienia pozycję o 90 stopni (czyli np. pozycja II 100 stopni)
-serwo pozostaje w pozycji II czas określony potencjometrem w zakresie 0,5-5 sekund
-powrót do pozycji I i od nowa.
Napisałem coś takiego jak poniżej, ale nie pracuje to stabilnie:
(opóźnienia w programie są takie robocze)
- serwo zmienia pozycje o ok 90 stopni ale buczy
-kręcenie potencjometrem chyba nie działa bo nie ma wpływu na opóźnienia które są dziwne
(pot,środkowy do A1,A2, zewnętrzne GND i 5V, raczej dobre bo sprawdzałem miernikiem)
UNO SINTRON, zasilane z baterii 9v, serwo przez regulator 7805 ale nie miałem kondensatorów do filtrowania
dopiero co się zarejestrowałem, bo mam problem i proszę bardziej ogarniętych o pomoc.
Dopiero zaczynam, znam podstawy elektroniki ale z programowaniem bardzo słabo.
Chcę napisać program, który porusza serwem w następujący sposób:
-pozycja I serwa (np 10 stopni)
-następnie w tej pozycji serwo pozostaje losowy czas z zakresu powiedzmy 3-15 sekund
-następnie serwo zmienia pozycję o 90 stopni (czyli np. pozycja II 100 stopni)
-serwo pozostaje w pozycji II czas określony potencjometrem w zakresie 0,5-5 sekund
-powrót do pozycji I i od nowa.
Napisałem coś takiego jak poniżej, ale nie pracuje to stabilnie:
(opóźnienia w programie są takie robocze)
- serwo zmienia pozycje o ok 90 stopni ale buczy
-kręcenie potencjometrem chyba nie działa bo nie ma wpływu na opóźnienia które są dziwne
(pot,środkowy do A1,A2, zewnętrzne GND i 5V, raczej dobre bo sprawdzałem miernikiem)
UNO SINTRON, zasilane z baterii 9v, serwo przez regulator 7805 ale nie miałem kondensatorów do filtrowania
Kod:
#include <Servo.h> // biblioteka obsługa serwa
Servo serwo; // nazwa serwa
int pos = 10; // pozycja I serwa
int pos2 = 100;// pozycja II serwa
int opoz1 = 0; // opoznienie na pozycji I
int opoz2 = 0; // opoznienie na pozycji II
int pot1 = analogRead(A1); // odczyt potencjometru I
int pot2 = analogRead(A2); // odczyt potencjometru II
void setup() {
pinMode(A1,INPUT);
pinMode(A2,INPUT);
pinMode(A0,INPUT);
serwo.attach(9); // put your setup code here, to run once:
randomSeed(analogRead(A0));
serwo.write(pos); // pozycja poczatkowa
}
void loop(){
pot1= analogRead(A1);// oczyt pot.
pot1 = map(pot1,2,10,0,1023);// przeliczenie
opoz1 = random(1,pot1)*500;//losowanie opoznienia z zakresu
//1-10 przeskok co 0,5 sekundy
serwo.write(pos);// ustawienie w pozycji I
delay (500);// czas na ruch serwa
if (pos >9)// warunek od ktorego biegnie czas opozn.
{for ( opoz1 =opoz1; opoz1>=0; opoz1--)// petla opoznienia
{delay(1);}
};
pot2 = analogRead(A2); // oczyt pot. II
pot2 = map(pot2,6,12,0,1023);//przeliczenie
opoz2 = pot2*500;//opoznienie zalezne od pot II
serwo.write(pos2);// ustawienie w pozycji II
delay (500);// czas na ruch serwa
if (pos2 >99) // warunek od ktorego biegnie opoznienie
{for ( opoz2=opoz2; opoz2>=0; opoz2--)//petla opoznienia
{delay(1);}
};
}