- Katılım
- 17 Eyl 2013
- Mesajlar
- 8,776
- Tepkime puanı
- 23,158
- Yaş
- 61
- Konum
- İstanbul
- Web sitesi
- www.sumeryamaner.com
- İlgi Alanı
- Uçak
Bu bence, paketim elime ulaştığında, benim LED yakıp söndürme sonrası ilk projem olur.
Sanıyorum burada pulse çıkışı için timer kullanmak pek de gerekli değil çünkü gördüğüm kadarıyla bir de delaymicroseconds() komutu varmış!
Bu halde kullanırsam mikrosaniye sayacının overflow ve resetlenmesi bir sorun yaratır mı diye düşündüm ama 70 dakikada oluyormuş bu overflow. Modellerimiz 70 dakika uçmuyor genelde. Yine de deneyip görmek lazım.
Kod daha da basitleşti delaymicroseconds komutu ile
Kod:
int rxPin = 12; //Giriş bacağı seçimi
int servoPin = 5; //Çıkış bacağı seçimi
int inPulse = 0; //Giriş darbe süresi
int servoPulse = 0; //Çıkış darbe süresi
unsigned long time; //Süre değişkeni
void setup()
{
pinMode(rxPin, INPUT); //Bacak işlevi giriş
pinMode(servoPin, OUTPUT); //Bacak işlevi çıkış
}
void loop()
{
inPulse = pulseIn(rxPin, HIGH, 25000); //Max. 25 milisaniye boyunca giriş darbesi okunuyor
if(inPulse > 800 && inPulse < 2200) //Darbe süresi 0.8 - 2.2 milisaniye arasında ise...
{
servoPulse = 3000 - inPulse; //Servo darbesi 3000'den çıkarılarak ters çevriliyor
pulseOut(); //Hesaplanan çıkış darbesi için darbe çıkış altprogramı çağrılıyor
}
}
void pulseOut() //Darbe çıkış altprogramı
{
time = micros(); //Mikrosaniye olarak timer okunuyor
digitalWrite(servoPin, HIGH); //Çıkış HIGH yapılıyor
time = time + servoPulse; //Timer bitiş değeri belirleniyor
while (time < micros()) //Timer değeri timer bitiş değerinin altında olduğu sürece while loop içinde bekleniyor
{
}
digitalWrite(servoPin, LOW); //Timer değeri timer bitiş değerine ulaşınca çıkışa LOW yazılıp altprogramdan çıkılıyor
}
Sanıyorum burada pulse çıkışı için timer kullanmak pek de gerekli değil çünkü gördüğüm kadarıyla bir de delaymicroseconds() komutu varmış!
Bu halde kullanırsam mikrosaniye sayacının overflow ve resetlenmesi bir sorun yaratır mı diye düşündüm ama 70 dakikada oluyormuş bu overflow. Modellerimiz 70 dakika uçmuyor genelde. Yine de deneyip görmek lazım.
Kod daha da basitleşti delaymicroseconds komutu ile
Kod:
int rxPin = 12; //Giriş bacağı seçimi
int servoPin = 5; //Çıkış bacağı seçimi
int inPulse = 0; //Giriş darbe süresi
int servoPulse = 0; //Çıkış darbe süresi
void setup()
{
pinMode(rxPin, INPUT); //Bacak işlevi giriş
pinMode(servoPin, OUTPUT); //Bacak işlevi çıkış
}
void loop()
{
inPulse = pulseIn(rxPin, HIGH, 25000); //Max. 25 milisaniye boyunca giriş darbesi okunuyor
if(inPulse > 800 && inPulse < 2200) //Darbe süresi 0.8 - 2.2 milisaniye arasında ise...
{
servoPulse = 3000 - inPulse; //Servo darbesi 3000'den çıkarılarak ters çevriliyor
digitalWrite(servoPin, HIGH); //Çıkış HIGH yapılıyor
delayMicroseconds(servoPulse);
digitalWrite(servoPin, LOW);
}
}