#include <RCSwitch.h>
enum komutlar{yak,sondur,ac,kapa,toplam_komut_sayisi}; //toplam_komut_sayisi en sonda kalacak
struct Kumanda{
uint32_t kod;
void (*fonksiyon)(void);
}kumanda[toplam_komut_sayisi];
int buttonPin= 13;
int buzzer= 10;
int LED1= 3;
int LED2= 4;
int LED3= 5;
int LED4= 6;
RCSwitch mySwitch = RCSwitch();
void setup() {
pinMode(10, OUTPUT); //
pinMode(LED1, OUTPUT); //
pinMode(LED2, OUTPUT); //
pinMode(LED3, OUTPUT); //
pinMode(LED4, OUTPUT); //
pinMode(13, INPUT);
mySwitch.enableReceive(0); // Receiver on interrupt 0 => that is pin #2
/*Kumanda da kullanılmak istenen komutlar için kod ve fonksiyonlar aşağıdaki gibi tanımlanacak */
/*--------yakma işlemi-----*/
kumanda[yak].kod = 10314241;
kumanda[yak].fonksiyon = []{
static int pattern = 0;
//
const int patternCount = 30;
static unsigned long lastButtonTime = 0;
if (digitalRead(buttonPin) && (millis() - lastButtonTime) > 100)
{
lastButtonTime = millis();
pattern = (pattern + 1) % patternCount;
}
switch (pattern)
{
case 1:
digitalWrite(LED1,HIGH);
digitalWrite(LED4,HIGH);
delay(50);
digitalWrite(LED1,LOW);
digitalWrite(LED4,LOW);
delay(50);
digitalWrite(LED2,HIGH);
digitalWrite(LED3,HIGH);
delay(50);
digitalWrite(LED2,LOW);
digitalWrite(LED3,LOW);
delay(50);
//*********************3 times***************************************
break;
case 2:
digitalWrite(LED1,HIGH);
digitalWrite(LED3,HIGH);
delay(180);
digitalWrite(LED1,LOW);
digitalWrite(LED3,LOW);
delay(180);
digitalWrite(LED2,HIGH);
digitalWrite(LED4,HIGH);
delay(180);
digitalWrite(LED2,LOW);
digitalWrite(LED4,LOW);
delay(180);
digitalWrite(LED1,HIGH);
digitalWrite(LED3,HIGH);
delay(180);
digitalWrite(LED1,LOW);
digitalWrite(LED3,LOW);
delay(180);
digitalWrite(LED2,HIGH);
digitalWrite(LED4,HIGH);
delay(180);
digitalWrite(LED2,LOW);
digitalWrite(LED4,LOW);
delay(180);
//*********************3 times***************************************
break;
case 3:
digitalWrite(LED1,HIGH);
digitalWrite(LED4,HIGH);
delay(50);
digitalWrite(LED1,LOW);
digitalWrite(LED4,LOW);
delay(50);
digitalWrite(LED1,HIGH);
digitalWrite(LED4,HIGH);
delay(50);
digitalWrite(LED1,LOW);
digitalWrite(LED4,LOW);
digitalWrite(LED2,HIGH);
digitalWrite(LED3,HIGH);
delay(50);
digitalWrite(LED2,LOW);
digitalWrite(LED3,LOW);
delay(50);
digitalWrite(LED2,HIGH);
digitalWrite(LED3,HIGH);
delay(50);
digitalWrite(LED2,LOW);
digitalWrite(LED3,LOW);
//*********************3 times***************************************
digitalWrite(LED1,HIGH);
digitalWrite(LED2,HIGH);
delay(50);
digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
delay(50);
digitalWrite(LED1,HIGH);
digitalWrite(LED2,HIGH);
delay(50);
digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
delay(50);
digitalWrite(LED1,HIGH);
digitalWrite(LED2,HIGH);
delay(50);
digitalWrite(LED1,HIGH);
digitalWrite(LED2,HIGH);
delay(50);
digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
delay(50);
digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
/*yapılmak istenen işlemler buraya girilecek*/
}
};
/*--------söndürme işlemi-----*/
kumanda[sondur].kod = 3263246;
kumanda[sondur].fonksiyon = []{
digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
digitalWrite(LED3,LOW);
digitalWrite(LED4,LOW);
/*yapılmak istenen işlemler buraya girilecek*/
};
/*--------açma işlemi-----*/
kumanda[ac].kod = 3694647;
kumanda[ac].fonksiyon = []{
tone(10,50,125); // write to buzzer
delay(10);
};
/*--------kapatma işlemi-----*/
kumanda[kapa].kod = 3654797;
kumanda[kapa].fonksiyon = []{
for(int hz = 440; hz < 1000; hz+=5){
tone(10, hz,200);
delay(5);
for(int i=0;i<=9;i++)
digitalWrite(i,HIGH);
}
};
}
void loop() {
if (mySwitch.available()) {
uint32_t value = mySwitch.getReceivedValue();
if (value != 0)
for(int i=0;i<toplam_komut_sayisi;i++)
if(value == kumanda
.kod)
kumanda.fonksiyon();
mySwitch.resetAvailable();
}
}
Senin kodlarına böyle bir ekleme yaptım hocam ancak programda sürekli hatalar alıyorum. For, if veya case gibi komutlarla çakışıyor sanırım. Birde karta yüklenirken farklı kütüphaneler bulundu gibi uyarılar alıyorum veya karta çok geç yüklüyor. Yardım edebilirsen çok mutlu olurum.
Tamamdır kodlar şuan çalışıyor ancak iki sorunum var;
1. sorun digital buttonPin okuyarak yani buton varmış gibi onu okuyarak aynı butona kısa bir süre basılınca mod değişiyor bunu rf koduna çeviremedim.
2. sorun ise
tone(10,50,125); // write to buzzer
delay(10); // Bu sesi butona basıldığı süre kadar çalsın istiyorum.
C#:
static int pattern = 0;
// If the button is down and the last time it went down was more than 1/10th second ago.
if (digitalRead(buttonPin) && (millis() - lastButtonTime) > 100)
{
lastButtonTime = millis();
pattern = (pattern + 1) % patternCount;
}
{
switch (pattern)
{
case 1:
digitalWrite(LED4,HIGH);
delay(50);
digitalWrite(LED4,LOW);
delay(50);
digitalWrite(LED3,HIGH);
delay(50);
digitalWrite(LED3,LOW);
delay(50);
//*********************3 times***************************************
break;
case 2:
digitalWrite(LED3,HIGH);
delay(180);
digitalWrite(LED3,LOW);
delay(180);
digitalWrite(LED4,HIGH);
delay(180);
digitalWrite(LED4,LOW);
delay(180);
digitalWrite(LED3,HIGH);
delay(180);
digitalWrite(LED3,LOW);
delay(180);
digitalWrite(LED4,HIGH);
delay(180);
digitalWrite(LED4,LOW);
delay(180);