Çözüldü4.52K görüntülenmeArduinoLora
0

Gönderici loradan gönderdiğim bütün veriler gidiyor fakat alıcıda yazdırdıktan sonra belli bir yerden sonra donma oluyor. Fakat arduinoyu resetlediğimde düzeliyor. B

#include "Arduino.h"<br />#include <math.h><br />#include "LoRa_E32.h"<br />#include <SoftwareSerial.h><br />SoftwareSerial mySerial(10, 11);<br />LoRa_E32 e32ttl(&mySerial);<br /> void printParameters(struct Configuration configuration);<br />void printModuleInformation(struct ModuleInformation moduleInformation);<br /> void setup()<br />{<br />  pinMode(A0, INPUT);<br />  Serial.begin(9600);<br />  while (!Serial);<br />  e32ttl.begin();<br />  Serial.println("GONDERICI");<br /> }<br />double Termistor(int analogOkuma) {<br />  double sicaklik;<br />  sicaklik = log(((10240000 / analogOkuma) - 10000));<br />  sicaklik = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * sicaklik * sicaklik)) * sicaklik);<br />  sicaklik = sicaklik - 273.15;<br />  return sicaklik;<br />}<br /> struct paket<br />{<br />  double sayi[10];<br /> };<br /> struct paket veri1;<br />struct paket veri2;<br /> void loop()<br />{<br />  for (int i = 0; i < 10; i++)<br />  {<br />    int deger = analogRead(A0);<br />    double sicaklik = Termistor(deger);<br />    veri1.sayi[i] = sicaklik;<br />    ResponseStatus rs = e32ttl.sendFixedMessage(0, 3, 7, &veri1, sizeof(paket));<br />    delay(1000);<br />    for (int i = 0; i < 10; i++)<br />    {<br />      Serial.println(veri1.sayi[i]);<br />     }<br />  }<br />     for (int i = 0; i < 10; i++)<br />     {<br />       int deger = analogRead(A0);<br />       double sicaklik = Termistor(deger);<br />       veri2.sayi[i] = sicaklik;<br />       ResponseStatus rw = e32ttl.sendFixedMessage(0, 3, 7, &veri2, sizeof(paket));<br />       delay(1000);<br />             for (int i = 0; i < 10; i++)<br />      {<br />        Serial.println(veri2.sayi[i]);<br />       }<br />     }<br />    }<br /> #include "Arduino.h"<br />#include "LoRa_E32.h"<br />#include <SoftwareSerial.h><br />SoftwareSerial mySerial(10, 11);<br />LoRa_E32 e32ttl(&mySerial);<br /> void setup()<br />{<br />  Serial.begin(9600);<br />  while (!Serial);<br />  e32ttl.begin();<br />  Serial.println("ALICI");<br />}<br /> struct paket<br />{<br />   double sayi[10];<br /> };<br /> struct paket veri1;<br />struct paket veri2;<br /> void loop()<br />{<br />  if (e32ttl.available()  > 1) {<br />     for (int i = 0; i < 10; i++) {<br />      ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(paket));<br />      veri1 = *(paket*) rsc.data;<br />      delay(1000);<br />           for (int i = 0; i < 10; i++) {<br />        Serial.println(veri1.sayi[i],1);<br />      }<br />    }

unun sebebi ne olabilir açıklar mısınız. Teşekkür ederim.

Soru yeni cevaplara kapalıdır.
Mehmet En iyi cevap olarak seçildi Ağustos 19, 2021
1

Üretici firma ile de konuştum hatta Lora kütüphanesini yazan arkadaş ile de görüştüm. Lora ile tek sefer 58 byte üstü bir veriyi yollamak imkansızmış.

github daki sorum : https://github.com/xreef/LoRa_E32_Series_Library/issues/31

Ama şu var. parça parça yapıp yollayabiliriz. Şöyle ki elimizde 100byte lık bir veri olsun. struct yapımızda data1, data2, data3… data20 kadar gittiğini düşünelim. ilk data1 in içine paket numarası yazılar misal 1 paket biri ifade eder ve ilk gelen paket1 ise data2 den başlayarak bizim ilk 19 değişkenimiz olur. ilk paket gönderildikten sonra yine aynı struct yapısı ile verilerimizi göndeririz bu sefer data1 bizim 2. paketimiz olur öyle öyle bütün verileri atabilirsin. her bir paket gönderimi sırasında toplam gönderilen byte bölü air rate hızı kadar bekleme yapmayı  unutma yoksa veriler çakışır.

Mehmet Karacaoğlan Yeni yorum gönderildi Ağustos 21, 2021

Çok teşekkür ederim mehmet abi. Bu aralar atölye yoğun bir tempoda olduğu için yen görebildim mesajını. Aldığım bilgiler çok değerli oldu çok çok teşekkür ederim.

0

hoca bu nasıl kod kusacağım, çabuk sil gözüm kanadı :). şu en son yazımızdaki gibi 1 tane struct yapısının içine doldur tek tek değişkenlerini. ben burda 3 tane yazmışım aynı şekilde sen alt alta doldur.

https://fixaj.com/hdc1080-ile-sicaklik-ve-nem-olcup-lora-ile-gonderme/

Mehmet Karacaoğlan Yeni yorum gönderildi Ağustos 12, 2021

Hocam şu şekilde düşünmüştüm. 57 veri aynı anda hızlı bir şekilde float veri almak istiyorum 2-3 saat boyunca. Fakat alıcı 27 veriden sonra aynı anda almıyor verileri. Ben de ayrı ayrı paketler halinde göndermek istedim. Yorumunuz çok doğru 😀 baya uğraştırıcı bir kod ama her türlü şeyi denedikten sonra böyle denemek istemiştim. delaysiz 57 farklı float sayıyı nasıl gönderebilirim? aynı anda veya çok düşük bir gecikmeyle.

0

Aslında sorun şu 57 veri boyutunda bir arrayi aynı anda gönderip alıcı portumda aynı anda basmasını istiyorum. fakat verilerim float ve alıcı portu basmıyor. Ben de ayrı ayrı struct açarak parça parça göndermeyi deniyorum aşağı kodları bırakıyorum.

#include “Arduino.h”
#include “LoRa_E32.h”
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);
LoRa_E32 e32ttl(&mySerial);

void printParameters(struct Configuration configuration);
void printModuleInformation(struct ModuleInformation moduleInformation);

void setup()
{

Serial.begin(9600);
e32ttl.begin();
Serial.println(“GONDERICI”);
delay(3000);
}

struct paket1
{
byte sayi[10];

};
struct paket2
{
byte sayi[10];

};
struct paket3
{
byte sayi[10];

};
struct paket4
{
byte sayi[10];

};
struct paket5
{
byte sayi[10];

};
struct paket6
{
char bitis;
byte sayi[7];

};
struct paket1 veri1;
struct paket2 veri2;
struct paket3 veri3;
struct paket4 veri4;
struct paket5 veri5;
struct paket6 veri6;

void loop()
{
float j = 0.0;

for (int i = 0; i < 10; i++)
{

veri1.sayi[i] = j;
Serial.println(veri1.sayi[i]);
j++;
}
ResponseStatus rs = e32ttl.sendFixedMessage(0, 3, 7, &veri1, sizeof(paket1));
delay(1000);
for (int i = 0; i < 10; i++)
{

veri2.sayi[i] = j;
Serial.println(veri2.sayi[i]);
j++;
}
rs = e32ttl.sendFixedMessage(0, 3, 7, &veri2, sizeof(paket2));
delay(1000);
for (int i = 0; i < 10; i++)
{

veri3.sayi[i] = j;
Serial.println(veri3.sayi[i]);
j++;
}
rs = e32ttl.sendFixedMessage(0, 3, 7, &veri3, sizeof(paket3));
delay(1000);
for (int i = 0; i < 10; i++)
{

veri4.sayi[i] = j;
Serial.println(veri4.sayi[i]);
j++;
}
rs = e32ttl.sendFixedMessage(0, 3, 7, &veri4, sizeof(paket4));
delay(1000);
for (int i = 0; i < 10; i++)
{

veri5.sayi[i] = j;
Serial.println(veri5.sayi[i]);
j++;
}
rs = e32ttl.sendFixedMessage(0, 3, 7, &veri5, sizeof(paket5));
delay(1000);
for (int i = 0; i < 7; i++)
{

veri6.sayi[i] = j;
Serial.println(veri6.sayi[i]);
j++;
}
rs = e32ttl.sendFixedMessage(0, 3, 7, &veri6, sizeof(paket6));
delay(1000);

}

#include “Arduino.h”
#include “LoRa_E32.h”
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);
LoRa_E32 e32ttl(&mySerial);
String readString = “”;

void setup()
{
Serial.begin(9600);
e32ttl.begin();
Serial.println(“ALICI”);
delay(3000);
}

struct paket1
{
byte sayi[10];

};
struct paket2
{
byte sayi[10];

};
struct paket3
{
byte sayi[10];

};
struct paket4
{
byte sayi[10];

};
struct paket5
{
byte sayi[10];

};
struct paket6
{

byte sayi[7];

};
struct paket1 veri1;
struct paket2 veri2;
struct paket3 veri3;
struct paket4 veri4;
struct paket5 veri5;
struct paket6 veri6;

void loop()
{
if (e32ttl.available() > 0)
{
ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(paket1));
veri1 = *(paket1*) rsc.data;

}
for (int i = 0; i < 10; i++) {
readString += String(veri1.sayi[i]);
readString += “;”;
}
Serial.print(readString);
readString = “”;
delay(100);
if (e32ttl.available() > 0)
{
ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(paket2));
veri2 = *(paket2*) rsc.data;

}
for (int i = 0; i < 10; i++) {
readString += String(veri2.sayi[i]);
readString += “;”;

}
Serial.print(readString);
readString = “”;
delay(100);
if (e32ttl.available() > 0)
{
ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(paket3));
veri3 = *(paket3*) rsc.data;

}
for (int i = 0; i < 10; i++) {
readString += String(veri3.sayi[i]);
readString += “;”;

}
Serial.print(readString);
readString = “”;
delay(100);
if (e32ttl.available() > 0)
{
ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(paket4));
veri4 = *(paket4*) rsc.data;

}
for (int i = 0; i < 10; i++) {
readString += String(veri4.sayi[i]);
readString += “;”;

}

Serial.print(readString);
readString = “”;
delay(100);
if (e32ttl.available() > 0)
{
ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(paket5));
veri5 = *(paket5*) rsc.data;

}
for (int i = 0; i < 10; i++) {
readString += String(veri5.sayi[i]);
readString += “;”;

}

Serial.print(readString);
readString = “”;
delay(100);
if (e32ttl.available() > 0)
{
ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(paket6));
veri6 = *(paket6*) rsc.data;

}
for (int i = 0; i < 7; i++) {
readString += String(veri6.sayi[i]);
readString += “;”;

}
Serial.println(readString);
readString = “”;
delay(100);

}

Mehmet Karacaoğlan Cevaplanan soru Ağustos 8, 2021
0

Hocam bu şekilde kodu tam okuyamıyorum. ancak struct yapısı içinde veriyi byte olarak tanımlar mısın. Soruna çözüm olmak için devre şemasının da fotoğraflarını ekler misin. Bir lora modüllerinin parametre ayar ekranlarını da eklersen yardımcı olabilirim.

Mehmet Cevaplanan soru Ağustos 8, 2021