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
#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