anılefelagari
unknown
plain_text
a year ago
10 kB
6
Indexable
Never
// Test code for Adafruit GPS modules using MTK3329/MTK3339 driver // // This code shows how to listen to the GPS module in an interrupt // which allows the program to have more 'freedom' - just parse // when a new NMEA sentence is available! Then access data when // desired. // // Tested and works great with the Adafruit Ultimate GPS module // using MTK33x9 chipset // ------> http://www.adafruit.com/products/746 // Pick one up today at the Adafruit electronics shop // and help support open source hardware & software! -ada #include <Adafruit_GPS.h> #include <Wire.h> #include <SPI.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> #include <Adafruit_BNO055.h> #include <utility/imumaths.h> //#include <Adafruit_LSM6DSO32.h> #include <RadioLib.h> // This sketch is ONLY for the Arduino Due! // You should make the following connections with the Due and GPS module: // GPS power pin to Arduino Due 3.3V output. // GPS ground pin to Arduino Due ground. // For hardware serial 1 (recommended): // GPS TX to Arduino Due Serial1 RX pin 19 // GPS RX to Arduino Due Serial1 TX pin 18 #define mySerial Serial7 #define SEALEVELPRESSURE_HPA (1013.25) Adafruit_GPS GPS(&mySerial); Adafruit_BME280 bme; //Adafruit_LSM6DSO32 dso32; Adafruit_BNO055 bno = Adafruit_BNO055(55, 0x28, &Wire2); SX1276 radio = new Module(10, 6, 4, 5); // Set GPSECHO to 'false' to turn off echoing the GPS data to the Serial console // Set to 'true' if you want to debug and listen to the raw GPS sentences. #define GPSECHO false // this keeps track of whether we're using the interrupt // off by default! boolean usingInterrupt = false; void useInterrupt(boolean); // Func prototype keeps Arduino 0023 happy void setup() { // connect at 115200 so we can read the GPS fast enough and echo without dropping chars // also spit it out Serial.begin(115200); Serial.println("Adafruit GPS library basic test!"); // 9600 NMEA is the default baud rate for Adafruit MTK GPS's- some use 4800 GPS.begin(9600); mySerial.begin(9600); unsigned status; status = bme.begin(/*0x77, &Wire2*/); Wire2.begin(); Wire2.setSDA(25); Wire2.setSCL(24); if (!status) { Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!"); Serial.print("SensorID was: 0x"); Serial.println(bme.sensorID(),16); Serial.print(" ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n"); Serial.print(" ID of 0x56-0x58 represents a BMP 280,\n"); Serial.print(" ID of 0x60 represents a BME 280.\n"); Serial.print(" ID of 0x61 represents a BME 680.\n"); while (1) delay(10); } if(!bno.begin()) { /* There was a problem detecting the BNO055 ... check your connections */ Serial.print("Ooops, no BNO055 detected ... Check your wiring or I2C ADDR!"); while(1); } bno.setExtCrystalUse(true); delay(1000); /* Serial.println("Adafruit LSM6DSO32 test!"); if (!dso32.begin_I2C()) { while (1) { delay(10); } } */ //dso32.setAccelRange(LSM6DSO32_ACCEL_RANGE_32_G); pinMode (10, OUTPUT); digitalWrite (10, HIGH); Serial.print(F("[SX1278] Initializing ... ")); int state = radio.begin(); if (state == RADIOLIB_ERR_NONE) { Serial.println(F("success!")); } else { Serial.print(F("failed, code ")); Serial.println(state); while (true); } radio.setFrequency(433.0); radio.setBandwidth(62.5); //default 62.5 KHz RSSI -83 radio.setSpreadingFactor(9); radio.setOutputPower(13); radio.setCodingRate(5); // uncomment this line to turn on RMC (recommended minimum) and GGA (fix data) including altitude GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); // uncomment this line to turn on only the "minimum recommended" data //GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCONLY); // For parsing data, we don't suggest using anything but either RMC only or RMC+GGA since // the parser doesn't care about other sentences at this time // Set the update rate GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz update rate // For the parsing code to work nicely and have time to sort thru the data, and // print it out we don't suggest using anything higher than 1 Hz // Request updates on antenna status, comment out to keep quiet GPS.sendCommand(PGCMD_ANTENNA); // the nice thing about this code is you can have a timer0 interrupt go off // every 1 millisecond, and read data from the GPS for you. that makes the // loop code a heck of a lot easier! #ifdef __arm__ usingInterrupt = false; //NOTE - we don't want to use interrupts on the Due #else useInterrupt(true); #endif delay(1000); // Ask for firmware version mySerial.println(PMTK_Q_RELEASE); } #ifdef __AVR__ // Interrupt is called once a millisecond, looks for any new GPS data, and stores it SIGNAL(TIMER0_COMPA_vect) { char c = GPS.read(); // if you want to debug, this is a good time to do it! #ifdef UDR0 if (GPSECHO) if (c) UDR0 = c; // writing direct to UDR0 is much much faster than Serial.print // but only one character can be written at a time. #endif } void useInterrupt(boolean v) { if (v) { // Timer0 is already used for millis() - we'll just interrupt somewhere // in the middle and call the "Compare A" function above OCR0A = 0xAF; TIMSK0 |= _BV(OCIE0A); usingInterrupt = true; } else { // do not call the interrupt function COMPA anymore TIMSK0 &= ~_BV(OCIE0A); usingInterrupt = false; } } #endif //#ifdef__AVR__ uint32_t timer = millis(); void loop() // run over and over again { // in case you are not using the interrupt above, you'll // need to 'hand query' the GPS, not suggested :( if (! usingInterrupt) { // read data from the GPS in the 'main loop' char c = GPS.read(); // if you want to debug, this is a good time to do it! if (GPSECHO) if (c) Serial.print(c); } // if a sentence is received, we can check the checksum, parse it... if (GPS.newNMEAreceived()) { // a tricky thing here is if we print the NMEA sentence, or data // we end up not listening and catching other sentences! // so be very wary if using OUTPUT_ALLDATA and trytng to print out data //Serial.println(GPS.lastNMEA()); // this also sets the newNMEAreceived() flag to false if (!GPS.parse(GPS.lastNMEA())) // this also sets the newNMEAreceived() flag to false return; // we can fail to parse a sentence in which case we should just wait for another } // if millis() or timer wraps around, we'll just reset it if (timer > millis()) timer = millis(); // approximately every 2 seconds or so, print out the current stats if (millis() - timer > 2000) { timer = millis(); // reset the timer Serial.print("\nTime: "); Serial.print(GPS.hour, DEC); Serial.print(':'); Serial.print(GPS.minute, DEC); Serial.print(':'); Serial.print(GPS.seconds, DEC); Serial.print('.'); Serial.println(GPS.milliseconds); Serial.print("Date: "); Serial.print(GPS.day, DEC); Serial.print('/'); Serial.print(GPS.month, DEC); Serial.print("/20"); Serial.println(GPS.year, DEC); Serial.print("Fix: "); Serial.print((int)GPS.fix); Serial.print(" quality: "); Serial.println((int)GPS.fixquality); if (GPS.fix) { Serial.print("Location: "); Serial.print(GPS.latitude, 4); Serial.print(GPS.lat); Serial.print(", "); Serial.print(GPS.longitude, 4); Serial.println(GPS.lon); Serial.print("Speed (knots): "); Serial.println(GPS.speed); Serial.print("Angle: "); Serial.println(GPS.angle); Serial.print("Altitude: "); Serial.println(GPS.altitude); Serial.print("Satellites: "); Serial.println((int)GPS.satellites); Serial.print("Temperature = "); Serial.print(bme.readTemperature()); Serial.println(" °C"); Serial.print("Pressure = "); Serial.print(bme.readPressure() / 100.0F); Serial.println(" hPa"); Serial.print("Approx. Altitude = "); Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); Serial.println(" m"); Serial.print("Humidity = "); Serial.print(bme.readHumidity()); Serial.println(" %"); Serial.println(); sensors_event_t orientationData , angVelocityData , accelerometerData; bno.getEvent(&orientationData, Adafruit_BNO055::VECTOR_EULER); bno.getEvent(&angVelocityData, Adafruit_BNO055::VECTOR_GYROSCOPE); bno.getEvent(&accelerometerData, Adafruit_BNO055::VECTOR_ACCELEROMETER); Serial.println(); Serial.print("Açı X: "); Serial.print(orientationData.orientation.x, 4); Serial.print("\tAçı Y: "); Serial.print(orientationData.orientation.y, 4); Serial.print("\tAçı Z: "); Serial.println(orientationData.orientation.z, 4); Serial.print("Gyro X: "); Serial.print(angVelocityData.gyro.x, 4); Serial.print("\tGyro Y: "); Serial.print(angVelocityData.gyro.y, 4); Serial.print("\tGyro Z: "); Serial.println(angVelocityData.gyro.z, 4); Serial.print("İvme X:"); Serial.print(accelerometerData.acceleration.x, 4); Serial.print("\tİvme Y: "); Serial.print(accelerometerData.acceleration.y, 4); Serial.print("\tİvme Z: "); Serial.println(accelerometerData.acceleration.z, 4); /* sensors_event_t accel; sensors_event_t gyro; sensors_event_t temp; dso32.getEvent(&accel, &gyro, &temp); */ /* Serial.print("Gyro X: "); Serial.print(gyro.gyro.x, 4); Serial.print("\tGyro Y: "); Serial.print(gyro.gyro.y, 4); Serial.print("\tGyro Z: "); Serial.println(gyro.gyro.z, 4); Serial.print("İvme X:"); Serial.print(accel.acceleration.x, 4); Serial.print("\tİvme Y: "); Serial.print(accel.acceleration.y, 4); Serial.print("\tİvme Z: "); Serial.println(accel.acceleration.z, 4); */ Serial.println(""); Serial.print(F("[SX1278] Transmitting packet ... ")); radio.transmit("Lets go"); } } // BURAYA seri print yaz bak bakalım kaç snde geliyor //delay(100); }