Çözüldü3.48K görüntülenmeLorae32 433T20D lora e32 433t30d
0

Merhabalar kütüphanesiz haberleşmede byte olarak sadece int veri mi gönderilebiliyor? Deneme olarak 1.23 verisini göndermeye çalıştığımda 1.0 verisi olarak aldım bu konuda yardımcı olabilir misiniz? byte türünden float a çevirdiğim denemede de aynı sorunla karşılaştım.

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

bu kod çalışsa zaten bir mucize gerçekleşti demektir. struct yapısını nasıl kullanıldığını ve float ve diğer tip verilerin nasıl gönderildiğine dair sitemizdeki yazıları bolca okumanız lazım

Mehmet En iyi cevap olarak seçildi Mart 27, 2022
0
#include <SoftwareSerial.h>
#include "LoRa_E32.h"
#include <TinyGPS.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
SoftwareSerial mySerial(10, 11); // Arudino RX <-- e32 TX, Arduino TX --> e32 RX
LoRa_E32 e32ttl(&mySerial);
TinyGPS gps;
SoftwareSerial ss(6, 5);
LiquidCrystal_I2C lcd(0x27, 16, 2);
 unsigned long previousTime = 0.0;
unsigned long currentTime  = 0.0;
 float sample1 = 0, sample2 = 0, sample3 = 0;
float flat = 0, flon = 0;
unsigned long age;
unsigned long age2;
float voltage1 = 0.0, voltage2 = 0.0, watt = 0.0, energy = 0.0, current = 0.0;
int Vo1;
int Vo2;
float R1 = 10000, R3 = 10000;
float logR2, R2, T1, Tc1, logR4, R4, T2, Tc2;
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;
volatile byte half_revolutions;
unsigned int rpm;
unsigned long timeold;
float hizrpm = 0.0;
 struct Signal {
  float message[10];
} data;
 void setup() {
  Serial.begin(9600);
  e32ttl.begin();
  mySerial.begin(9600);
  ss.begin(9600);
  attachInterrupt(digitalPinToInterrupt(3), magnet_detect, RISING);//intterrupt pin (Arduino digital pin 2)
  lcd.begin();
  lcd.clear();
  half_revolutions = 0;
  rpm = 0;
  timeold = 0;
}
 void loop() {
  unsigned long currentTime = millis(); //calculate time in milliseconds
   for (int i = 0; i < 50; i++) // taking 200 samples from data collected
  {
    sample1 = sample1 + analogRead(A0); //read the voltage
    sample2 = sample2 + analogRead(A1);//read the second voltage
    sample3 = sample3 + analogRead(A2) + 1; //read the current and  subtract -6 bit(-29) for optimizing
    delay(2);//wait 2ms
  }
  sample1 = sample1 / 50; //Measurement Part
  voltage1 = (sample1 * (5.0 / 1024.0)) * (503.0 / 33.0); //avarage voltage value from bit and divider to unit of V
   sample2 = sample2 / 50;
  voltage2 = (sample2 * (5.0 / 1024.0)) * (503.0 / 33.0); //avarage voltage value from bit and divider to unit of V
   sample3 = sample3 / 50;
  current = ((5.0 / 1024.0) * sample3) / 0.04 ; //avarage current value from bit to unit of A
   /*sample2 = sample2 / 200;
    current = (4.8828125 * sample2 / 40); //avarage current value from bit to unit of A*/
   watt = voltage1 * current;
  energy = energy + ((watt * (currentTime - previousTime)) / 3600000); //wh convert //save last time value
   previousTime = currentTime;
   Serial.print(voltage1);
  Serial.print(" V ;");
  /*Serial.print(voltage2);
    Serial.print(" V ;");*/
  Serial.print(current);
  Serial.print(" A ;");
  Serial.print(watt);
  Serial.print(" W ;");
  Serial.print(energy);
  Serial.print(" Wh ;");
  Serial.println("");
  delay(100);// wait 100ms for the analog-to-digital converter to settle
   Vo1 = analogRead(A6);  //Thermistor(Sıcaklık ölçme)
  R2 = R1 * (1023.0 / (float)Vo1 - 1.0);
  logR2 = log(R2);
  T1 = (1.0 / (c1 + c2 * logR2 + c3 * logR2 * logR2 * logR2));
  Tc1 = T1 - 273.15;
   Vo2 = analogRead(A7);  //Thermistor(Sıcaklık ölçme)
  R4 = R3 * (1023.0 / (float)Vo2 - 1.0);
  logR4 = log(R4);
  T2 = (1.0 / (c1 + c2 * logR4 + c3 * logR4 * logR4 * logR4));
  Tc2 = T2 - 273.15;
   Serial.print("Environment Temperature: ");
  Serial.print(Tc1);
  Serial.println(" C");
   Serial.print("Motor Temperature: ");
  Serial.print(Tc2);
  Serial.println(" C");
   if (half_revolutions >= 5) { //Rpm
    rpm = 60 * 1000 / (millis() - timeold) * half_revolutions;
    timeold = millis();
    half_revolutions = 0;
  }
  hizrpm = rpm * 60 * 0.001477;
  if ((millis() - timeold) >= 3000) {
    hizrpm = 0.0;
    rpm = 0;
  }
   Serial.print("Speed;");
  Serial.println(hizrpm, 1);
  Serial.print("RPM;");
  Serial.println(rpm, 1);
  smartdelay(100); //Gps Part
  Serial.println();
  gps.f_get_position(&flat, &flon, &age);
  int alt = gps.f_altitude();
  int gpsspd = gps.f_speed_kmph();
  Serial.print("lat:"); Serial.println(flat, 8);
  Serial.print("lon:"); Serial.println(flon, 8);
  Serial.print("alt:"); Serial.println(alt);
  Serial.print("spd:"); Serial.println(gpsspd);
   Serial.print("Rpm:"); Serial.println(rpm);
   lcd.setCursor(0, 0); //LCD screening part
  lcd.print("S:");
  lcd.setCursor(2, 0);
  lcd.print(gpsspd);
  lcd.setCursor(7, 0);
  lcd.print("R:");
  lcd.setCursor(9, 0);
  lcd.print(rpm);
  lcd.setCursor(0, 1);
  lcd.print("V:");
  lcd.setCursor(2, 1);
  lcd.print(voltage1);
  lcd.setCursor(7, 1);
  lcd.print("A:");
  lcd.setCursor(9, 1);
  lcd.print(current);
    data.message[0]  = voltage1, 1; //writing inside the structure array
  data.message[1]  = current, 2;
  data.message[2]  = watt, 2;
  data.message[3]  = energy, 1;
  data.message[4]  = flat, 8;
  data.message[5]  = flon, 8;
  data.message[6]  = alt;
  data.message[7]  = gpsspd  ;
  data.message[8]  = rpm , 0;
  data.message[9]  = hizrpm, 1;
  //data.message[10]  = Tc1;
  //data.message[11] = Tc2;
   ResponseStatus rs = e32ttl.sendFixedMessage(0, 63, 23, &data, sizeof(Signal)); //message sending part
}
static void smartdelay(unsigned long ms)
{
  unsigned long start  = millis();
  do
  {
    while (ss.available())
      gps.encode(ss.read());
  }
  while (millis() - start < ms);
}
void magnet_detect()
{
  half_revolutions++;
  //Serial.print("detect:");
}

Mehmet bey kütüphaneli olarak kullandığım kod bu sizin kodunuzu buna entegre ettiğimde çalışmadı sizin bakma şansınız var mı gönderilmesi gereken veriler data.message[] olarak belirtilen kısım alıcıyı sizden gördüğüm şekilde yazdığım halde veri alamadım.

Eray Yılmaz Cevaplanan soru Şubat 18, 2022
1

eray senin için yazı haline de getirdim başlığı https://fixaj.com/kutuphanesiz-lora-kullanimi/

Mehmet Durumu yayınlanmak üzere'ye değiştirildi Şubat 16, 2022
0

send

#include <SoftwareSerial.h>
SoftwareSerial FixSerial(10, 11);
 byte i = 0;
 #define M0 7
#define M1 6
 void setup() {
  Serial.begin(115200);
   pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);
   FixSerial.begin(9600);
}
 void loop() { 
  FixSerial.write((byte)0x00); //Alıcı Adresi HIGH
  FixSerial.write(3);       //Alıcı Adresi LOW
  FixSerial.write(18);       //Alıcı Kanalı =0x17=23    (410M+23=433 MHz)
   FixSerial.println(String(5.698, 3));
  delay(500);
}

receive

#include <SoftwareSerial.h>
 SoftwareSerial FixSerial(10, 11);
char rc;
 #define M0 6
#define M1 7
  void setup() {
  Serial.begin(115200);
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);
  FixSerial.begin(9600);
}
 void loop() {
  while (FixSerial.available()) {
    rc = FixSerial.read();
    Serial.print(rc);
  }
}

bu çalışır ama performans düşünürsen float u önce int e çevir misal 5.698 = 5.698×1000 sonra alıca onu tekrar dönüştür veya serial konusunda tecrüben fazla yoksa kütüphane kullan örnek kodlar sayfasında transreceiver alıcı verici uygulamasına göz atabilirsin

Mehmet Cevaplanan soru Şubat 15, 2022
0

Google dan aradığımda bulduğum çözümleri denedim ama çalışmadı ya da yazılış cinsini tam anlatmadıkları için koduma entegre edemedim bu konuda fikriniz varsa yazabilir misiniz?

Eray Yılmaz Cevaplanan soru Şubat 15, 2022
0

100 lerce farklı çözümü var biraz google da araştırmanı tavsiye ederim:
Serial.write a float value

Mehmet Cevaplanan soru Şubat 12, 2022