yldrm byzt
Üye
- Katılım
- 28 Ara 2019
- Mesajlar
- 86
- Puanları
- 1
Kod:
#include <RCSwitch.h> //Uzaktan kumanda için kullandığımız kütüphane 433Mhz...
#include <SimpleSDAudio.h>
int counter = 0;
int vericikodu;
unsigned long int num;
RCSwitch mySwitch = RCSwitch();
#define CS 4
void setup()
{
Serial.begin(9600);
mySwitch.enableReceive(0);
if (!SdPlay.init(SSDA_MODE_HALFRATE | SSDA_MODE_MONO | SSDA_MODE_AUTOWORKER)) {
while (1);
}
SdPlay.setSDCSPin(4);
pinMode(2, INPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);
digitalWrite(A1,LOW); //A
digitalWrite(A2,LOW); //C
digitalWrite(A3,LOW); //E
}
void loop()
{
mySwitch.disableReceive();
mySwitch.enableReceive(0);
if (mySwitch.available())
{
num = mySwitch.getReceivedValue();
Serial.println("vericikodu;" + String(num));
switch (num)
{
// BİR NOLU KUMANDA
case 12718372: //K1
digitalWrite(A1,HIGH); //1.LEDİ YAK
SdPlay.setFile("o1.wav");
SdPlay.play();
delay(6000);
digitalWrite(A1,LOW); //2.LEDİ SÖNDÜR
break;
// İKİ NOLU KUMANDA
case 12325156: //K2
digitalWrite(A2,HIGH); //2.LEDİ YAK
SdPlay.setFile("o2.wav");
SdPlay.play();
delay(6000);
digitalWrite(A2,LOW); //2.LED SÖNDÜR
break;
// ÜÇ NOLU KUMANDA
case 13555684: //K3
digitalWrite(A3,HIGH); //3.LEDİ YAK
SdPlay.setFile("o3.wav");
SdPlay.play();
delay(6000);
digitalWrite(A3,LOW); //3.LED SÖNDÜR
break;
default:
break;
}
mySwitch.resetAvailable();
mySwitch.enableReceive(0);
}
}
Yukarıda 3 adet rf kumandanın herhangi birinden, herhangi bir zamanda, gelen sinyal ile tetiklenip kaç nolu kumandanın butonuna basılmışsa o numaralı ledi yakan ve mini sd playerden ses çaldıran bir kodlamam var.
Kumandanın butonu basılı tutuldukça 6'şar saniyelik döngüler halinde bu led yanıyor ve kısa müzik çalıyor.
Kumanda butonuna basma sonlandırılınca led sönüyor ve arduıno nano yeni bir tetiklemeye kadar beklemeye geçiyor.
Kumandaların hangisine ne zaman basılacağı belli değil.
Yani arduıno günün büyük bir kısmını sadece beklemede geçirebilir.
Arduıno beklemede iken ölçtüm, 16mA akım harcıyor.
Beklemede iken harcanan bu akımı nasıl azaltabilirim diye araştırma yapınca karşıma Interrupt-Kesmeler konusu çıktı.
İlave olarak ilgili kütüphaneler olan
#include <avr/sleep.h>;
#include <avr/power.h>; bilgisayarıma indirdim.
Birkaç örnek inceleyip uygulamak istedim ama yukarıdaki kodlamaya iç ve dış kesme satırlarını nereye ve nasıl ekleyeceğimi ve hangi satırların çıkarılması gerektiğini bilemedim. Denemelerde hep hata verdi.
Benim amacım arduıno beklemede iken uyku modunda olsun, 16mA yerine çok daha az akım harcasın. Ama digital 2 tetikleme pinine kumandaların herhangi birinden sinyal geldiğinde uyansın, ilgili ledi yakıp müziği çalsın. Sinyal kesilince tekrar uyku moduna geçsin.
Konuya hakim ustalar yardımcı olurlar mı acaba? Şimdiden teşekkürler.
NOT:
1.Alıcı durumundaki arduıno nano ve bağlı komponentler, (ledler, mini sdplayer, hoparlör, rf modül) 18650 lityum pil (voltaj yükseltici modül marifeti ile) DC 5v ile beslenmektedir.
2. RF alıcı kütüphanesi olan RCSwitch.h gereği tetikleme pini d2’dir .
Son düzenleme: