gps modülümüz ile lora modülümüz aynı anda çalıştırıldığında gps verilerini diğer lora’ya veri aktarımı yapılamıyor.
#include <TinyGPS++.h><br />#include <MPU9255.h><br />#include <SoftwareSerial.h><br />#include "LoRa_E22.h"<br />// #include <SimpleKalmanFilter.h><br />#include<Servo.h><br />#include <Wire.h><br />#include <SPI.h><br />#include <Adafruit_BMP280.h><br />SoftwareSerial mySerial(10, 11);<br />int servo_port = 9;<br />#define SERIAL_BAUD 9600<br />#define BMP_SCK (13)<br />#define BMP_MISO (12)<br />#define BMP_MOSI (11)<br />#define BMP_CS (10)<br />#define g 9.81<br /> /*SimpleKalmanFilter irtifaKalmanFilter(1, 540, 0.01);<br />SimpleKalmanFilter axKalmanFilter(1, 1, 0.01);<br />SimpleKalmanFilter ayKalmanFilter(1, 1, 0.01);<br />SimpleKalmanFilter azKalmanFilter(1, 1, 0.01);<br />SimpleKalmanFilter gxKalmanFilter(1, 1, 0.01);<br />SimpleKalmanFilter gyKalmanFilter(1, 1, 0.01);<br />SimpleKalmanFilter gzKalmanFilter(1, 1, 0.01);*/<br />LoRa_E22 E22(&mySerial);<br />Adafruit_BMP280 bmp;<br />MPU9255 mpu;<br />TinyGPSPlus gps;<br />Servo servom;<br />int pos = 90; <br />struct Signal {<br /> char type[15] = "Urfa63";<br /> float irtifa;<br /> float sicaklik;<br /> float gps_1;<br /> float gps_2;<br /> float ax[3];<br /> float gx[3];<br /> float ldr;<br />} data;<br /> #define M0 7<br />#define M1 6<br />#define BTN 2<br />#define LED 9<br /> static const int RXPin = 4, TXPin = 3;// Here we make pin 4 as RX of arduino & pin 3 as TX of arduino <br />static const uint32_t GPSBaud = 9600;<br /> SoftwareSerial ss(RXPin, TXPin);<br />float gps_1 = 0,gps_2 = 0;<br /> float ax[3] = {0.0,0.0,0.0};<br />float gx[3] = {0.0,0.0,0.0};<br /> float first_pres = 0,h = 0,irtifa = 0,max_irtifa = 0,min_irtifa = 0,sicaklik = 0,isik = 0;<br />bool aviyonik_durum = false;<br /> double process_acceleration(int input, scales sensor_scale )<br />{<br /> /*<br /> To get acceleration in 'g', each reading has to be divided by :<br /> -> 16384 for +- 2g scale (default scale)<br /> -> 8192 for +- 4g scale<br /> -> 4096 for +- 8g scale<br /> -> 2048 for +- 16g scale<br /> */<br /> double output = 1;<br /> //for +- 2g<br /> if(sensor_scale == scale_2g)<br /> {<br /> output = input;<br /> output = output/16384;<br /> output = output*g;<br /> }<br /> //for +- 4g<br /> if(sensor_scale == scale_4g)<br /> {<br /> output = input;<br /> output = output/8192;<br /> output = output*g;<br /> }<br /> //for +- 8g<br /> if(sensor_scale == scale_8g)<br /> {<br /> output = input;<br /> output = output/4096;<br /> output = output*g;<br /> }<br /> //for +-16g<br /> if(sensor_scale == scale_16g)<br /> {<br /> output = input;<br /> output = output/2048;<br /> output = output*g;<br /> }<br /> return output;<br />}<br /> double process_angular_velocity(int16_t input, scales sensor_scale )<br />{<br /> /*<br /> To get rotation velocity in dps (degrees per second), each reading has to be divided by :<br /> -> 131 for +- 250 dps scale (default value)<br /> -> 65.5 for +- 500 dps scale<br /> -> 32.8 for +- 1000 dps scale<br /> -> 16.4 for +- 2000 dps scale<br /> */<br /> //for +- 250 dps<br /> if(sensor_scale == scale_250dps)<br /> {<br /> return input/131;<br /> }<br /> //for +- 500 dps<br /> if(sensor_scale == scale_500dps)<br /> {<br /> return input/65.5;<br /> }<br /> //for +- 1000 dps<br /> if(sensor_scale == scale_1000dps)<br /> {<br /> return input/32.8;<br /> }<br /> //for +- 2000 dps<br /> if(sensor_scale == scale_2000dps)<br /> {<br /> return input/16.4;<br /> }<br /> return 0;<br />}<br /> void setup()<br />{<br /> pinMode(8,OUTPUT);<br /> Serial.begin(SERIAL_BAUD);<br /> ss.listen();<br /> ss.begin(GPSBaud);<br /> while(!Serial) {} // Wait<br /> Wire.begin();<br /> pinMode(M0, OUTPUT);<br /> pinMode(M1, OUTPUT);<br /> digitalWrite(M0, LOW);<br /> digitalWrite(M1, LOW);<br /> E22.begin();<br /> mySerial.listen();<br /> char* source = "urfa başlat";<br /> strcpy(data.type, source);<br /> ResponseStatus rs = E22.sendFixedMessage(0, 46, 18, &data, sizeof(Signal));<br /> if (!bmp.begin(BMP280_ADDRESS_ALT, BMP280_CHIPID)) {<br /> if (!bmp.begin()) {<br /> Serial.println(F("Could not find a valid BMP280 sensor, check wiring or "<br /> "try a different address!"));<br /> }<br /> /* Default settings from datasheet. */<br /> bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */<br /> Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */<br /> Adafruit_BMP280::SAMPLING_X16, /* Pressure oversampling */<br /> Adafruit_BMP280::FILTER_X16, /* Filtering. */<br /> Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */<br />}<br /> if(mpu.init())<br /> {<br /> Serial.println("MPU9255 çalıştırılamadı");<br /> }<br /> else<br /> {<br /> Serial.println("MPU9255 çalıştırıldı");<br /> }<br /> digitalWrite(8,HIGH);<br /> delay(1500);<br /> digitalWrite(8,LOW);<br /> isik = analogRead(A3);<br />}<br /> //////////////////////////////////////////////////////////////////<br />void loop()<br />{<br /> mpu.read_acc();<br /> mpu.read_gyro();<br /> Serial.print("GPS: ");<br /> Serial.print(gps_1, 6);<br /> Serial.print(F(" , "));<br /> Serial.print(gps_2, 6);<br /> Serial.print(" ");<br /> while (ss.available() > 0)<br /> if (gps.encode(ss.read()))<br /> displayInfo();<br /> if (millis() > 5000 && gps.charsProcessed() < 10)<br /> {<br /> } <br /> printMPU9255();<br /> printBME280();<br /> if (avyonik(irtifa) == true && aviyonik_durum == false){<br /> aviyonik_durum = true;<br /> Serial.print("irtifaya ulaşıldı");<br /> digitalWrite(8,HIGH);<br /> servom.write(pos);<br /> pos = 0;<br /> delay(1000);<br /> digitalWrite(8,LOW);<br /> }<br /> lora();<br /> delay(50);<br />}<br /> void printMPU9255(){<br /> ax[0] = process_acceleration(mpu.ax,scale_2g);<br /> //ax[0] = axKalmanFilter.updateEstimate(ax[0]);<br /> ax[1] = process_acceleration(mpu.ay,scale_2g);<br /> //ax[1] = ayKalmanFilter.updateEstimate(ax[1]);<br /> ax[2] = process_acceleration(mpu.az,scale_2g);<br /> //ax[2] = azKalmanFilter.updateEstimate(ax[2]);<br /> gx[0] = process_angular_velocity(mpu.gx,scale_250dps);<br /> //gx[0] = gxKalmanFilter.updateEstimate(gx[0]);<br /> gx[1] = process_angular_velocity(mpu.gy,scale_250dps);<br /> //gx[1] = gyKalmanFilter.updateEstimate(gx[1]);<br /> gx[2] = process_angular_velocity(mpu.gz,scale_250dps);<br /> //gx[2] = gzKalmanFilter.updateEstimate(gx[2]);<br /> Serial.print(" AX: ");<br /> Serial.print(ax[0]);<br /> //Y axis<br /> Serial.print(" AY: ");<br /> Serial.print(ax[1]);<br /> //Z axis<br /> Serial.print(" AZ: ");<br /> Serial.print(ax[2]);<br /> ////process and print gyroscope data////<br /> //X axis<br /> Serial.print(" GX: ");<br /> Serial.print(gx[0]);<br /> //Y axis<br /> Serial.print(" GY: ");<br /> Serial.print(gx[1]);<br /> //Z axis<br /> Serial.print(" GZ: ");<br /> Serial.print(gx[2]);<br />}<br /> //////////////////////////////////////////////////////////////////<br />void printBME280()<br />{<br /> irtifa = bmp.readAltitude(1013.25);<br /> //irtifa = irtifaKalmanFilter.updateEstimate(irtifa);<br /> sicaklik = bmp.readTemperature();<br /> Serial.print(F(" Sicaklik: "));<br /> Serial.print(sicaklik);<br /> Serial.print(" *C");<br /> Serial.print(F(" İrtifa: "));<br /> Serial.print(irtifa);<br /> Serial.print(" m ");<br /> Serial.println(analogRead(A3));<br />}<br /> void displayInfo()<br />{<br /> ss.listen();<br /> if (gps.location.isValid())<br /> {<br /> gps_1 = gps.location.lat();<br /> gps_2 = gps.location.lng();<br /> }<br /> else<br /> {<br /> //Serial.print(F("VERİ ALİNAMADİ "));<br /> }<br />}<br />bool avyonik(float irtifas){<br /> if (max_irtifa - irtifas >= 0.15 && ax[1] > -2.3 && analogRead(A3) <= isik+150){<br /> return true; <br /> }else if (irtifas > max_irtifa){<br /> max_irtifa = irtifas;<br /> return false;<br /> }else{<br /> return false;<br /> }<br />}<br />void lora(){<br /> mySerial.listen();<br /> if (E22.available() > 1) {<br /> // Gelen mesaj okunuyor<br /> ResponseStructContainer rsc = E22.receiveMessage(sizeof(Signal));<br /> struct Signal data = *(Signal*) rsc.data;<br /> rsc.close();<br /> char* source = "maraşa selam";<br /> strcpy(data.type, source);<br /> data.irtifa = irtifa;<br /> data.sicaklik=sicaklik;<br /> data.gps_1 = gps_1;<br /> data.gps_2 = gps_2;<br /> data.ax[0] = ax[0];<br /> data.ax[1] = ax[1];<br /> data.ax[2] = ax[2];<br /> data.gx[0] = gx[0];<br /> data.gx[1] = gx[1];<br /> data.gx[2] = gx[2];<br /> data.ldr = analogRead(A3);<br /> ResponseStatus rs = E22.sendFixedMessage(0, 46, 18, &data, sizeof(Signal));<br /> }<br /> }
Soru yeni cevaplara kapalıdır.
Mehmet En iyi cevap olarak seçildi Haziran 1, 2022