Çözüldü1.34K görüntülenmeLoralorae22
0

Sipariş Numaram : 4115494

Merhabalar,

Bir konuda takıldım. Eğer yardımcı olabilirseniz memnun olurum. PC üzerinden C# ile yazdığım program nano ile seri haberleşecek şekilde com portundan bağlı ve enerjiyi de pc usb çıkışından alıyor. Masaüstü PC’den Vana1 için Aç butonuna bastığımda rölenin bulunduğu loraya sinyal gidiyor ve röle açıyor. Ancak ben kumanda modülüme geri bildirim istediğimden röleyi kontrol eden nanoya kod ekledim ve bunu kumanda modülüne geri gönderdim 4 nolu bacaktaki pine bağlı ledi yaksın diye. Ancak herhangi bir tepki alamıyorum. Epey kontrol ettim ama kumanda tarafı seri port kontrolünde olduğundan mi acaba rölenin bulunduğu arduino+ e22 den gelen verileri alamıyor.  Yardımcı olabilirseniz memnun olurum.

Kodlar: 

Kumanda tarafı : Nano + e22

#include “LoRa_E22.h”
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11);
LoRa_E22 E22(&mySerial);

#define M0 7
#define M1 6
#define led1 2
#define led2 4
// Masaüstü programı üzerinden açma ve kapama yapılıyor. Seri porttan 11 gelince röleye bağlı vana açılıyor , 10 gelince röleya bağlı vana kapanıyor

struct Signal {
char sifre[15] = “Fixaj.com”;
byte btn1;
} data;

struct Veri {
byte roleDurum;
} data2;

int butonKodu;
bool mesajGonder = false;

void setup() {
pinMode(M0, OUTPUT);
pinMode(M1, OUTPUT);
digitalWrite(M0, LOW);
digitalWrite(M1, LOW);

Serial.begin(9600);
E22.begin();

pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);

delay(500);
Serial.println(“CABILISIM”);
}

void loop() {
if (Serial.available()) {
butonKodu = Serial.read();
if (butonKodu == 11) {
data.btn1 = 1;
mesajGonder = true;
digitalWrite(led1, HIGH);
ResponseStatus rs = E22.sendFixedMessage(0, 1, 63, &data, sizeof(Signal));
mesajGonder = false;
}
if (butonKodu == 10) {
data.btn1 = 0;
mesajGonder = true;
digitalWrite(led1, LOW);
ResponseStatus rs = E22.sendFixedMessage(0, 1, 63, &data, sizeof(Signal));
mesajGonder = false;
}
}

// BURADAKİ KODLAR YUKARDAKİ SERİ HABERLEŞME AKTİF OLDUĞUNDAN MI İŞLEME GİRMİYOR ACABA ???

while (E22.available() > 1) {
// Gelen mesaj okunuyor
ResponseStructContainer rsc = E22.receiveMessage(sizeof(Veri));
struct Veri data2 = (Veri)rsc.data;
rsc.close();

if (data2.roleDurum == 1) {
digitalWrite(led2, HIGH);
delay(30);
}

else if (data2.roleDurum == 0) {
digitalWrite(led2, LOW);
delay(30);
}
}
}

Röle tarafı : Nano + e22

#include “LoRa_E22.h”
#include <SoftwareSerial.h>

#define M0 7
#define M1 6
#define role1 2

SoftwareSerial mySerial(10, 11);
LoRa_E22 E22(&mySerial);

struct Signal {
char sifre[15] = “Fixaj.com”;
byte btn1;
} data;

bool mesajGonder = false;

void setup() {
pinMode(M0, OUTPUT);
pinMode(M1, OUTPUT);
digitalWrite(M0, LOW);
digitalWrite(M1, LOW);

Serial.begin(9600);
E22.begin();

pinMode(role1, OUTPUT);

delay(500);
Serial.println(“CABILISIM”);
}

void loop() {
while (E22.available() > 1) {
// Gelen mesaj okunuyor
ResponseStructContainer rsc = E22.receiveMessage(sizeof(Signal));
struct Signal data = (Signal)rsc.data;
rsc.close();

if (strcmp(data.sifre, “Fixaj.com”) == 0) {
Serial.println(“Sifre doğru”);

if (data.btn1 == 1) {
Serial.println(“Röle 1 AÇ”);
digitalWrite(role1, HIGH);
delay(30);

struct Veri {
byte roleDurum;
} data2;

mesajGonder = true;
data2.roleDurum = 1;
ResponseStatus rs = E22.sendFixedMessage(0, 3, 63, &data2, sizeof(Veri));
mesajGonder = false;
}

else if (data.btn1 == 0) {
Serial.println(“Röle 1 KAPAT”);
digitalWrite(role1, LOW);
delay(30);

struct Veri {
byte roleDurum;
} data2;

mesajGonder = true;
data2.roleDurum = 0;
ResponseStatus rs = E22.sendFixedMessage(0, 3, 63, &data2, sizeof(Veri));
mesajGonder = false;
}
}
}
}

Soru yeni cevaplara kapalıdır.
Mehmet En iyi cevap olarak seçildi Şubat 24, 2023
0

çok karmaşık bir şekilde sorulmuş soru :(((

kodlarıda düzgün görüntüleyemiyorum.

Ancak 2 tane hatta daha fazla struck kullanmışsın bu kafa karıştıyor olur. ana bitane struct oluştur onun içine role durumunuda ekle tek bir tane struc olsun isteyen içinden kendine gerekli veriyi alsın.

Mehmet En iyi cevap olarak seçildi Şubat 24, 2023