Merhaba,
E22 modülünüz ve arduino kullanarak uzaktan kumanda yapmak istiyorum. Verici devremde 2 adet buton , alıcı devremde 2 adet röle olacak. 1. buton hıgh olunca 1. röle hıgh olacak, 1. buton low olunca 1. röle low olacak . Aynı durum 2. buton ve röle içinde geçerli olacak. Sizin sayfanızda bulunan ” Lora ile Uzaktan Kontaktör Devresi ” projesini uyguladığımda haberleşme sağlanıyor . Fakat Emre beyin kodlarını uyguladığımda kanal ve adres kısımlarını doğru ayarlamış olamama rağmen haberleşme olmuyor. Kontaktör uygulamasında set etme kodu yüklediğimden kaynaklı bir durum olabilir mi acaba. Kodları görsel olarak ekliyorum. Bahsetmiş olduğum proje için destek olursanız çok sevinirim . İyi çalışmalar dilerim.
Sipariş No: 2879835
çok fazla vaktim yok ama sizin için buton kısmını baştan yazdım. umarım alıcı kısmını kendiniz yazabilirsiniz. video dakinin aynısı
#include "LoRa_E22.h" #include <SoftwareSerial.h> #define M0 7 #define M1 6 #define buton1 5 #define buton2 4 SoftwareSerial mySerial(10, 11); LoRa_E22 E22(&mySerial); struct Signal { char sifre[15] = "Fixaj.com"; char konum[15]; byte btn1; byte btn2; } data; bool btn1Durum = false; bool btn2Durum = false; bool gonder = false; unsigned long kanalBekleme_sure = 0; int kanalBekleme_bekleme = 1000; //bağlantı yok ledi void setup() { pinMode(M0, OUTPUT); pinMode(M1, OUTPUT); digitalWrite(M0, LOW); digitalWrite(M1, LOW); Serial.begin(9600); E22.begin(); pinMode(buton1, INPUT_PULLUP); pinMode(buton2, INPUT_PULLUP); btn1Durum = digitalRead(buton1); btn2Durum = digitalRead(buton2); delay(500); Serial.println("başlıyoruz.. Fixaj.com"); } void loop() { if (digitalRead(buton1) == LOW) { // poor mans debounce/press-hold, code not ideal for production delay(50); if (digitalRead(buton1) == LOW) { Serial.println("Button1 toggle"); data.btn1 = 1; gonder = true; } } else { Serial.println("Button1 false 2"); data.btn1 = 0; gonder = true; } if (digitalRead(buton2) == LOW) { // poor mans debounce/press-hold, code not ideal for production delay(50); if (digitalRead(buton2) == LOW) { Serial.println("Button2 toggle"); data.btn2 = 1; gonder = true; } } else { Serial.println("Button2 false 2"); data.btn2 = 0; gonder = true; } if (millis() > kanalBekleme_sure + kanalBekleme_bekleme && gonder) { kanalBekleme_sure = millis(); ResponseStatus rs = E22.sendFixedMessage(0, 1, 63, &data, sizeof(Signal)); Serial.println(rs.getResponseDescription()); gonder = false; } }
Mrb, yapacağınız proje çok kolay gibi görünsede ince detaylar bulunmakta. özellikle buton okuma işlemi bounce denilen etkiden dolayı tam sağlıklı bir okuma yapabilmeniz için şu şekil bir kod lazım:
void checkButton() { // check for button press if (digitalRead(Alarmbuton) == LOW) { // poor mans debounce/press-hold, code not ideal for production delay(50); if (digitalRead(Alarmbuton) == LOW) { Serial.println("Button Pressed"); // still holding button for 3000 ms, reset settings, code not ideaa for production delay(1500); // reset delay hold if (digitalRead(Alarmbuton) == LOW) { Serial.println("Button Held"); Serial.println("Erasing Config, restarting"); alarmDurumu = true; } // start portal w delay Serial.println("Starting config portal"); } } }
bu kod sadece butona basılı olup olmadığını sağlıklı kontrol eder. Eğer mebran keypad kullanırsanız youtube örnek uygulama ve kütüphane örneği vermiştim orda kütüphane arka planda bu metodu çalıştırıyor buton okuma işlemi daha kolay yapabilirsiniz.
https://www.youtube.com/watch?v=pQaW4Ns63q0
bu videoyu dikkatli ce izlediğinizde sizin istediğinizden daha fazlası var. burada 4 butonlu uygulama yapmıştım. sizin istediğiniz 2 butonlu daha kolay. belki aklınıza E22 veya E32 olarak karışabilir sadece kodda kütüphaneleri değişmeniz yetlerlidir. aynı kod çalışır. parametre ayarlarınıda video 19. dk anlattım yine 32 ile e22 arasında e32 de olmayan yerlere karışmassanız çalışır.
burda yapmanız gereken basitce löyle olabilir.
kumanda kısmını şu şekilde değişin
void loop() { char key = keypad.getKey(); if (key) { Serial.println(key); switch (key) { case '1': data.role = 1; break; case '2': data.role = 2; break; case '3': data.role = 3; break; case '4': data.role = 4; break; } ResponseStatus rs = E32.sendFixedMessage(0, 1, 63, &data, sizeof(Signal)); Serial.println(rs.getResponseDescription()); } else { data.role = 5; ResponseStatus rs = E32.sendFixedMessage(0, 1, 63, &data, sizeof(Signal)); Serial.println(rs.getResponseDescription()); } }
alıcı kısmında da 4 yerine şunu yazın
}else if (data.role == 5) { Serial.println("Röleler kapanıyor."); digitalWrite(role1, LOW); digitalWrite(role2, LOW); digitalWrite(role3, LOW); digitalWrite(role4, LOW); delay(100); }
mantığını anlarsanız daha iyisini yaparsınız.
Açıklamalarınız için çok teşekkür ederim ama ben bunları toparlayıp bir kod haline getiremiyorum ne yazık ki karmaşık geldi bana. Keypad kullanmayacağım normal butonla yaptığımda alıcı ve verici için en azından tek kanallı nasıl olur örneği paylaşmanız mümkün mü.