Çözüldü1.99K görüntülenmeArduino#e32 #roket
0

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

Soru yeni cevaplara kapalıdır.
Mehmet En iyi cevap olarak seçildi Ekim 26, 2022
0

ç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;
  }
}

Mehmet En iyi cevap olarak seçildi Ekim 26, 2022
0

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.

Rabiaakkus Yeni yorum gönderildi Ekim 15, 2022

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ü.