Guest User

Untitled

a guest
Feb 26th, 2020
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.10 KB | None | 0 0
  1.  
  2. #include <Wire.h>
  3. #include <SPI.h>
  4. #include <ArduinoRS485.h>
  5. #include <SoftwareSerial.h>
  6. #include <Adafruit_BMP280.h>
  7. #include <MPU6050_tockn.h>
  8. #include <EEPROM.h>
  9. #include <SimpleKalmanFilter.h>
  10. ///////////КОНСТАНТЫ/////////////
  11. static const int RXPin = 12, TXPin = 11;
  12. static const uint32_t GPSBaud = 9600;
  13. #define BMP_SCK  (8)
  14. #define BMP_MISO (5)
  15. #define BMP_MOSI (7)
  16. #define BMP_CS   (6)
  17. String jsonString;
  18. float tmp;
  19. float pressure;
  20. float temperature;
  21. ////////////////////////
  22. int launch = 0;
  23.  
  24. ///////////Инициализация устройств///////
  25. Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO,  BMP_SCK);
  26. MPU6050 mpu6050(Wire);
  27. SimpleKalmanFilter gyrokfx(0.1, 0.11, 0.01);SimpleKalmanFilter gyrokfy(2, 1, 0.01);SimpleKalmanFilter gyrokfz(2, 1, 0.01);
  28. SimpleKalmanFilter bmpkf(2, 1, 0.01);
  29. SimpleKalmanFilter fuelkf(2, 2, 0.01);
  30. SoftwareSerial ss(RXPin, TXPin);
  31. void setup()
  32. {
  33.   pinMode(3, OUTPUT);
  34.   pinMode(4, OUTPUT);
  35.   digitalWrite(3, HIGH);
  36.   digitalWrite(4, LOW);
  37.   Serial.begin(38400);
  38.   RS485.begin(38400);
  39.   //ss.begin(GPSBaud);
  40.   launch = EEPROM_int_read(0);
  41.   //Serial.print("Launch count: ");Serial.println(launch);
  42.   bmp.begin(); // Инициализация датчика BMP280
  43.   Wire.begin();
  44.   mpu6050.begin();
  45.   mpu6050.calcGyroOffsets(true);
  46.   delay(100);
  47.   launch++;
  48.   EEPROM_int_write(0, launch);
  49.   digitalWrite(4, HIGH);
  50.   digitalWrite(3, LOW);
  51. }
  52. // чтение
  53. float EEPROM_float_read(int addr) {    
  54.   byte raw[4];
  55.   for(byte i = 0; i < 4; i++) raw[i] = EEPROM.read(addr+i);
  56.   float &num = (float&)raw;
  57.   return num;
  58. }
  59.  
  60. // запись
  61. void EEPROM_float_write(int addr, float num) {
  62.   byte raw[4];
  63.   (float&)raw = num;
  64.   for(byte i = 0; i < 4; i++) EEPROM.write(addr+i, raw[i]);
  65. }
  66.  
  67. // запись
  68. void EEPROM_int_write(int addr, int num) {
  69.   byte raw[2];
  70.   (int&)raw = num;
  71.   for(byte i = 0; i < 2; i++) EEPROM.write(addr+i, raw[i]);
  72. }
  73. // чтение
  74. int EEPROM_int_read(int addr) {    
  75.   byte raw[2];
  76.   for(byte i = 0; i < 2; i++) raw[i] = EEPROM.read(addr+i);
  77.   int &num = (int&)raw;
  78.   return num;
  79. }
  80.  
  81. void loop()
  82. {
  83.   pressure = bmp.readPressure()/100;temperature = bmp.readTemperature();
  84.   RS485.beginTransmission();
  85.   mpu6050.update();
  86.   RS485.print("{\"status\":\"1\", \"launches\":\"");RS485.print(launch);RS485.print("\",");RS485.print("\"gyroscope\":");
  87.   RS485.print("{\"angleX\":\"");RS485.print(gyrokfx.updateEstimate(mpu6050.getAngleX()));RS485.print("\",");
  88.   RS485.print("\"angleY\":\"");RS485.print(gyrokfy.updateEstimate(mpu6050.getAngleY()));RS485.print("\",");
  89.   RS485.print("\"angleZ\":\"");RS485.print(gyrokfz.updateEstimate(mpu6050.getAngleZ()));RS485.print("\"}, \"meteo\":");
  90.   //////////////////////////////////////////////////////////
  91.   RS485.print("{\"pressure\":\"");RS485.print(pressure);RS485.print("\",");
  92.   RS485.print("\"temperature\":\"");RS485.print(temperature);RS485.print("\"}");//RS485.print("\"}, \"gps\":");
  93.   //////////////////////////////////////////////////////////
  94.   RS485.println("}");
  95.   //////////////////////////////////////////////////////////
  96.   RS485.endTransmission();
Advertisement
Add Comment
Please, Sign In to add comment