yldrm byzt
Üye
- Katılım
- 28 Ara 2019
- Mesajlar
- 86
- Puanları
- 1
sayın AG Mehmet,1. loop() fonksiyonunuzdaki mySwitch.available() şartını kaldırın.
2. Pin 2'ye bir sinyal alındığında tetiklenecek bir ISR ekleyin. Bu, Arduinonun uykudan uyanmasını sağlar.
KOD:
void wakeUp() {
// Sadece Arduinoyu uyandırmamız gerektiği için boş bir fonksiyon
}
3. setup() fonksiyonunuzda, Arduinoyu uyku moduna geçirmek için yapılandırmaları yapın ve kesmeyi (interrupt) ekleyin:
KOD:
attachInterrupt(digitalPinToInterrupt(2), wakeUp, RISING);
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Uyku modunu güç kapalıya ayarla
sleep_enable(); // Uyku modunu etkinleştir
4. Switch case'lerinizden sonra, Arduinoyu uyku moduna geçirin:
KOD:
sleep_mode(); // Uyku moduna girin
5. Uyandığında uyku modunu devre dışı bırakın:
loop() fonksiyonunun başına bu satırı ekleyin:
KOD
sleep_disable();
6. Eğer güç tüketimini daha da azaltmak istiyorsanız, kullanılmayan bileşenleri devre dışı bırakabilirsiniz. Örneğin, ADC'yi ve analog karşılaştırıcıyı (Komparatör) devre dışı bırakabilirsiniz:
KOD:
power_adc_disable();
power_all_disable();
Bu kodu setup() fonksiyonunun başına ekleyin.
Bu değişikliklerle, Arduino çoğu zaman uyuyacak ve yalnızca pin 2'de bir kesme alındığında uyanacaktır. Kesme işlemi tamamlandıktan sonra tekrar uyku moduna geçecektir.
Kolay gelsin
Çok teşekkür ederim. Önerilerinizi bu gece kodlamama eklemlendirmeye çalışacağım. Mehmet bey'in yukarıdaki d2 pininin hem kesme, hem kod gönderme olarak gönderilmesi nedeniyle veri kaçırma konusu benim açımdan bir çözümlense de ondan sonra uğraşayım diyorum.
Zira ben arduıno yazılımlarında çok zayıfım. Doğaçlama bir şeyler yapmaya çalışıyorum.
mehmet bey, ben diğer iletiye cevap yazarken siz aynı konuyu yazmışsınız çoktan.D2 ve D3 aynı özellikte. İlgili mcunun INT0
ve INT1 pinleri bunlar.
Belki vericinin iki kere aynı kodu yollama
seçeneği/özelliği varsa, ikincide veriyi belki
yakalayabilir.
Pişti olmuşuz...
Son düzenleme: