- Katılım
- 17 Eyl 2013
- Mesajlar
- 8,789
- Tepkime puanı
- 23,175
- Yaş
- 61
- Konum
- İstanbul
- Web sitesi
- www.sumeryamaner.com
- İlgi Alanı
- Uçak
Bu da servo yavaşlatıcı projesi... Compiler hatasız işliyor ama tabii gerçek hayatta test edemedim henüz. Kimbilir ne saçmalıklar çıkacak. Ama olsun. Zihin jimnastiği oluyor.
Kod:
//Servo yavaşlatıcı
int rxpin = 12; //Sinyal girişi 12 nolu digital pin
int servopin = 1; //Servo çıkışı 1 nolu digital pin
int sollwert = 1500; //Hedef servo değeri mikrosaniye cinsinden
int istwert = 1500; //Aktüel servo değeri mikrosaniye cinsinden
int stepvalue = 1024; //Hız parametresi
int pot = 0; //Hız ayar potansiyometresi 1 nolu analog girişte
unsigned long timer1; //Servo sinyal çıkış zamanlaması için kullanılacak değişken
void setup()
{
pinMode(servopin, OUTPUT); //Servo çıkışı OUTPUT olarak ayarlanıyor. INPUT deklarasyonu gerekmiyor
}
void loop()
{
stepvalue = 1 + analogRead(pot); //Devredeki potansiyometre okunuyor ve 1 - 1024 arasında olması için 1 artırılıyor
sollwert = pulseIn(rxpin, HIGH, 25000); //Alıcı sinyali okunuyor
if(sollwert > istwert) //Eğer alıcının komut sinyali o anki sinyal değerinden büyükse potansiyometre ayarına göre bir değer istwert değerine ekleniyor
{
istwert = istwert + stepvalue; //Aktüel değerin istenen değeri aşmadığından emin olunuyor
if(istwert > sollwert)
{
istwert = sollwert;
}
}
else if(sollwert < istwert) //Eğer alıcının komut sinyali o anki sinyal değerinden küçükse potansiyometre ayarına göre bir değer istwert değerinden çıkartılıyor
{
istwert = istwert - stepvalue; //Aktüel değerin istenen değeri aşmadığından emin olunuyor
if(istwert < sollwert)
{
istwert = sollwert;
}
}
digitalWrite(servopin, HIGH); //Sonra aktüel değer servoya bir pulse olarak gönderiliyor
timer1 = micros();
while((micros() - timer1 < istwert))
{
}
digitalWrite(servopin, LOW);
}