merhaba; iki adet lorayı tarama yontemi ile veriyi alıyorum .her hangi bir sorun yok . Ancak arduino mega bir sure sonra donuyor bu yuzden watcdog timer kullanmak zorunda kalıyorum. sizde de donma sorunu oldumu .donma sorunu ne olabilir teşekkurler . aşagıya kodun ozetini paylaşıyorum.derlediğim zaman hata vermiyor.
#include "LoRa_E32.h"<br />#include <avr/wdt.h><br />#include <SoftwareSerial.h><br />SoftwareSerial mySerial(52, 51); // using Arduino mega<br />LoRa_E32 e32ttl(&mySerial);<br />void printParameters(struct Configuration configuration);<br />void printModuleInformation(struct ModuleInformation moduleInformation);<br /> void setup()<br />{<br />wdt_enable(WDTO_8S);<br />Serial.begin(9600);<br />delay(50);<br />Serial1.begin(9600);<br />delay(50);<br />e32ttl.begin();<br />delay(50);<br /> Serial.println("start!!!!!!!!!!!!");<br /> }<br /> struct Message {<br />char message[8];<br />byte temperature[4];<br />} ;<br />struct MessageHumidity {<br />char message[8];<br />byte humidity;<br />} ;<br />byte Sensor = 0;<br />int delayy = 3500;<br /> int times;<br />boolean message_coming;<br /> const byte Address[2] = {1, 3}; //1, 3 address of sensors to be read<br /> void loop() {<br /> for (Sensor = 0; Sensor < 2 ; Sensor++) {<br /> scanner();<br />}<br />}<br /> void scanner() {<br /> ResponseStatus rs = e32ttl.sendFixedMessage( 0 , Address[Sensor] , 6 , "up" ); // Sensor scanning//&message, sizeof(Message)<br />Serial.println(rs.getResponseDescription());<br /> message_coming = true;<br />times = millis();<br />wdt_reset();<br /> while (message_coming) {<br /> if (millis() > times + delayy) {<br /> times = millis();<br /> message_coming = false;<br /> }<br />else<br />{<br /> if (e32ttl.available() > 1) {<br /> char type[5];<br />ResponseContainer rs = e32ttl.receiveInitialMessage(sizeof(type));<br />String typeStr = rs.data;<br />if (typeStr == "TEMP")<br />{<br />ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(Message));<br />struct Message message = *(Message*) rsc.data;<br /> rsc.close();<br />}<br />else if (typeStr == "HUM")<br />{<br /> ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(MessageHumidity));<br />struct MessageHumidity message = *(MessageHumidity*) rsc.data;<br />rsc.close();<br /> } else {<br />Serial.println("Something goes wrong!!");<br />}<br />}<br />}<br />}<br />}
Hocam yazdığınız kod düzeltilemeyecek kadar çok hata vardı. oturdum bende baştan yazdım. Lora ve başka modüller ile çalışılırken sıcaklık nem ölçümü şu şekilde yapılır.
// Example testing sketch for various DHT humidity/temperature sensors // Written by ladyada, public domain // REQUIRES the following Arduino libraries: // - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library // - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor #include "DHT.h" #define DHTPIN 2 // Digital pin connected to the DHT sensor // Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 -- // Pin 15 can work but DHT must be disconnected during program upload. // Uncomment whatever type you're using! #define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 //#define DHTTYPE DHT21 // DHT 21 (AM2301) // Connect pin 1 (on the left) of the sensor to +5V // NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1 // to 3.3V instead of 5V! // Connect pin 2 of the sensor to whatever your DHTPIN is // Connect pin 3 (on the right) of the sensor to GROUND (if your sensor has 3 pins) // Connect pin 4 (on the right) of the sensor to GROUND and leave the pin 3 EMPTY (if your sensor has 4 pins) // Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor // Initialize DHT sensor. // Note that older versions of this library took an optional third parameter to // tweak the timings for faster processors. This parameter is no longer needed // as the current DHT reading algorithm adjusts itself to work on faster procs. DHT dht(DHTPIN, DHTTYPE); #include "LoRa_E32.h" #include <SoftwareSerial.h> SoftwareSerial mySerial(10, 11); // Arduino RX <-- e32 TX, Arduino TX --> e32 RX LoRa_E32 e32ttl(&mySerial); byte bumakina = 10; byte nem_si [3]; byte sicaklik_si [4]; int i = 0; int kalibr_nem = -2; int kalibr_sicaklik = 0; int bekleme = 2500; unsigned long sure = 0; float h, t, f; void setup() { Serial.begin(9600); delay(500); dht.begin(); e32ttl.begin(); delay(500); Serial.print("bu makina: "); Serial.println(bumakina); *(float*)(nem_si) = 0; *(float*)(sicaklik_si) = 0; Serial.println(F("Başlıyoruz...")); } struct Mesaj { char Firma[10]; char Birim[10]; byte MakineNo[2]; byte Nem[3]; byte Sicaklik[4]; int id; }; void loop() { if (millis() > sure + bekleme) { sure = millis(); atesOlcumYap (); } while (e32ttl.available() > 1) { ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(Mesaj)); struct Mesaj mSSS = *(Mesaj*) rsc.data; Serial.print(F("Firma: ")); Serial.println(mSSS.Firma); Serial.print(F("Makina No: ")); Serial.print(F("ID: ")); Serial.println(mSSS.id); rsc.close(); if (*(int*)(mSSS.MakineNo) == bumakina) { Serial.println(F("mesaj var adres doğru")); i++; delay(200); struct Mesaj { char Firma[10] = "fixaj.com"; char Birim[10] = "Depo"; byte MakineNo[2]; byte Nem[3]; byte Sicaklik[4]; int id; } mesaj; *(int*)(mesaj.MakineNo) = bumakina; *(float*)(mesaj.Nem) = *(float*)(nem_si); *(float*)(mesaj.Sicaklik) = *(float*)(sicaklik_si); mesaj.id = i; Serial.print(F("LORA nem ve sıcaklık: ")); Serial.print(*(int*)(nem_si)); Serial.println(F(" %")); Serial.print(*(float*)(sicaklik_si)); Serial.println(F(" C")); ResponseStatus rs = e32ttl.sendFixedMessage(0, 44, 4, &mesaj, sizeof(Mesaj)); Serial.println(rs.getResponseDescription()); } else { Serial.println(F("yanlış adres")); } delay(1000); } } void atesOlcumYap () { h = dht.readHumidity(); // Read temperature as Celsius (the default) t = dht.readTemperature(); // Read temperature as Fahrenheit (isFahrenheit = true) f = dht.readTemperature(true); // Check if any reads failed and exit early (to try again). if (isnan(h) || isnan(t) || isnan(f)) { Serial.println(F("Failed to read from DHT sensor!")); return; } // Compute heat index in Fahrenheit (the default) float hif = dht.computeHeatIndex(f, h); // Compute heat index in Celsius (isFahreheit = false) float hic = dht.computeHeatIndex(t, h, false); Serial.print(F("Humidity: ")); Serial.print(h); Serial.print(F("% Temperature: ")); Serial.print(t); Serial.print(F("°C ")); Serial.print(f); Serial.print(F("°F Heat index: ")); Serial.print(hic); Serial.print(F("°C ")); Serial.print(hif); Serial.println(F("°F")); *(float*)(nem_si) = h + kalibr_nem; *(float*)(sicaklik_si) = t + kalibr_sicaklik; Serial.print(*(float*)(nem_si)); Serial.print(",\t"); Serial.println(*(float*)(sicaklik_si)); }
DHT kütüphanesi olarak şu dht kütüphanesini kullandım. bu kütüphane adafruit sensor kütüphanesine ihtiyaç duyduğu için bununda kurulması gereklidir.
yukarıda yazdığım slave kısmı içindir. Geçmiş örneklerde yaptığımız “alıcı-verici” uygulamasında struct yapısını bu örnek ile aynı yaparak bu örneği kullanabilirsiniz. Dikkat edin burada makina No doğru olmadılır.
Bu arada siz dht ile çalıştığınız için bende dht ile yazdım. Yoksa Dht sensörünü ve üst modellerini kesinlikle tavsiye ETMİYORUM! Nem değeri yanıltıyor.
#include “LoRa_E32.h”
#include
#include
SoftwareSerial mySerial(52, 51); // using Arduino mega
LoRa_E32 e32ttl(&mySerial);
void printParameters(struct Configuration configuration);
void printModuleInformation(struct ModuleInformation moduleInformation);
void setup()
{
wdt_enable(WDTO_8S);
Serial.begin(9600);
delay(50);
Serial1.begin(9600);
delay(50);
e32ttl.begin();
delay(50);
Serial.println(“start!!!!!!!!!!!!”);
}
struct Message {
char message[8];
byte temperature[4];
} ;
struct MessageHumidity {
char message[8];
byte humidity;
} ;
byte Sensor = 0;
int delayy = 3500;
int times;
boolean message_coming;
const byte Address[2] = {1, 3}; //1, 3 address of sensors to be read
void loop() {
for (Sensor = 0; Sensor times + delayy) {
times = millis();
message_coming = false;
}
else
{
if (e32ttl.available() > 1) {
char type[5];
ResponseContainer rs = e32ttl.receiveInitialMessage(sizeof(type));
String typeStr = rs.data;
if (typeStr == “TEMP”)
{
ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(Message));
struct Message message = *(Message*) rsc.data;
rsc.close();
}
else if (typeStr == “HUM”)
{
ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(MessageHumidity));
struct MessageHumidity message = *(MessageHumidity*) rsc.data;
rsc.close();
} else {
Serial.println(“Something goes wrong!!”);
}
}
}
}
}