Códigos

Código configuración radio

  #define __VERSION__ "\Configuracion del modulo RF433  APC220 v1.0\n"

 

//Librerias

#include <SoftwareSerial.h>

 

//Declaracion de constantes

#define SET  8

#define AUX  9

#define TXD 11

#define RXD 10

#define EN  12

#define VCC 13

#define GND GND

 

//definimos el puerto serie Software para comunicar con el modulo RF

SoftwareSerial APCport(RXD, TXD); 

 

void setup()

{

  Serial.begin(9600);

  Serial.println(F(__VERSION__));

 

//iniciar el puerto serie software para comunicar con el APC220

  APCport.begin(9600);

 

  pinMode(SET,OUTPUT);

  pinMode(AUX,INPUT);

  pinMode(EN,OUTPUT);

  pinMode(VCC,OUTPUT);

 

  digitalWrite(SET,HIGH);

  digitalWrite(VCC,HIGH);

  digitalWrite(EN,HIGH);

 

  delay(1000);

 

  write_config();

  delay(1000);

 

  read_config();

  delay(5000);

}

 

void loop()

{

  //no hacemos nada en esta seccion

}

 

// ESCRIBIR CONFIGURACION

 

void write_config()

{

  Serial.println(F("ESTABLECIENDO NUEVA CONFIGURACION...\n"));

  digitalWrite(SET, LOW);           // poner en modo configuracion

  delay(50);

 

//Parametros de configuración

  APCport.print("WR 432123 3 9 3 0");  

  APCport.write(0x0D);             

  APCport.write(0x0A);             

  delay(100);

  digitalWrite(SET, HIGH);         

}

 

// LEER CONFIGURACION

 

void read_config()

{

  Serial.println(F("CONFIGURACION ACTUAL:\n"));

  digitalWrite(SET, LOW);     // poner en modo configuracion

  delay(50);                  // pausa para estabilizar

  APCport.print("RD");        // peticion de datos

  APCport.write(0x0D);        // fin de linea

  APCport.write(0x0A);       

  delay(100);                 // pausa para estabilizar

 

  while (APCport.available()) {

Serial.write(APCport.read());

  }

  digitalWrite(SET, HIGH);    // volver al modo normal

}

 

//Fin del programa

 

 

 

 


Código de BMP280

 

 

 

#include <Wire.h>

#include <SPI.h>

#include <Adafruit_BMP280.h>

 

#define BMP_SCK  (13)

#define BMP_MISO (12)

#define BMP_MOSI (11)

#define BMP_CS   (10)

 

Adafruit_BMP280 bmp; // I2C

//Adafruit_BMP280 bmp(BMP_CS); // hardware SPI

//Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO,  BMP_SCK);

 

int n=0;

 

void setup() {

  Serial.begin(9600);

  while ( !Serial ) delay(100);   // wait for native usb

  Serial.println(F("BMP280 test"));

  unsigned status;

  //status = bmp.begin(BMP280_ADDRESS_ALT, BMP280_CHIPID);

  status = bmp.begin();

  if (!status) {

Serial.println(F("Could not find a valid BMP280 sensor, check wiring or "

                   "try a different address!"));

Serial.print("SensorID was: 0x"); Serial.println(bmp.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);

  }

 

  /* Default settings from datasheet. */

  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */

                  Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */

                  Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */

                  Adafruit_BMP280::FILTER_X16,      /* Filtering. */

                  Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */

}

 

void loop() {

Serial.print(n);

Serial.print(",");

Serial.print(bmp.readTemperature());

Serial.print(",");

Serial.print(bmp.readPressure());

Serial.print(",");

Serial.print(bmp.readAltitude(1013.25)); /* Adjusted to local forecast! */

Serial.println(",");

  

n++;

delay(1000);

}

 

 

 

Código de GPS

/***************************************************************************

  This is a library for the BMP280 humidity, temperature & pressure sensor

 

  Designed specifically to work with the Adafruit BMP280 Breakout

  ----> http://www.adafruit.com/products/2651

 

  These sensors use I2C or SPI to communicate, 2 or 4 pins are required

  to interface.

 

  Adafruit invests time and resources providing this open source code,

  please support Adafruit andopen-source hardware by purchasing products

  from Adafruit!

 

  Written by Limor Fried & Kevin Townsend for Adafruit Industries.

  BSD license, all text above must be included in any redistribution

 ***************************************************************************/

 

#include <Wire.h>

#include <SPI.h>

#include <Adafruit_BMP280.h>

 

#define BMP_SCK  (13)

#define BMP_MISO (12)

#define BMP_MOSI (11)

#define BMP_CS   (10)

 

Adafruit_BMP280 bmp; // I2C

//Adafruit_BMP280 bmp(BMP_CS); // hardware SPI

//Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO,  BMP_SCK);

 

int n=0;

 

void setup() {

  Serial.begin(9600);

  while ( !Serial ) delay(100);   // wait for native usb

  Serial.println(F("BMP280 test"));

  unsigned status;

  //status = bmp.begin(BMP280_ADDRESS_ALT, BMP280_CHIPID);

  status = bmp.begin();

  if (!status) {

Serial.println(F("Could not find a valid BMP280 sensor, check wiring or "

                   "try a different address!"));

Serial.print("SensorID was: 0x"); Serial.println(bmp.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);

  }

 

  /* Default settings from datasheet. */

  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */

                  Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */

                  Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */

                  Adafruit_BMP280::FILTER_X16,      /* Filtering. */

                  Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */

}

 

void loop() {

Serial.print(n);

Serial.print(",");

Serial.print(bmp.readTemperature());

Serial.print(",");

Serial.print(bmp.readPressure());

Serial.print(",");

Serial.print(bmp.readAltitude(1013.25)); /* Adjusted to local forecast! */

Serial.println(",");

  

n++;

delay(1000);

}

 

 

Código GPS y misión secundaria

#include <TinyGPSPlus.h>

#include <SoftwareSerial.h>

 

static const int RXPin = 4, TXPin = 3;

static const uint32_t GPSBaud = 9600;

float lectura;

float volt;

// The TinyGPSPlus object

TinyGPSPlus gps;

  

// The serial connection to the GPS device

SoftwareSerial ss(RXPin, TXPin);

 

void setup()

{

  Serial.begin(9600);

  ss.begin(GPSBaud);

  pinMode(A0,INPUT);

}

 

void loop()

{

  lectura = analogRead(A0);

  volt = lectura /1023 * 5.0;

  Serial.println(volt);

  delay(1000);

  if (volt < 4.25)

  digitalWrite(3, LOW);

  while (ss.available() > 0)

  if (gps.encode(ss.read()))

   displayInfo();

 

  if (millis() > 5000 && gps.charsProcessed() < 10)

  {

Serial.println(F("No GPS detected: check wiring."));

while(true);

  }

}

 

void displayInfo()

{

  Serial.print(F("Location: "));

  if (gps.location.isValid())

  {

Serial.print(gps.location.lat(), 6);

Serial.print(F(","));

Serial.print(gps.location.lng(), 6);

  }

  else

  {

Serial.print(F("INVALID"));

  }

 

  Serial.print(F("  Date/Time: "));

  if (gps.date.isValid())

  {

Serial.print(gps.date.month());

Serial.print(F("/"));

Serial.print(gps.date.day());

Serial.print(F("/"));

Serial.print(gps.date.year());

  }

  else

  {

Serial.print(F("INVALID"));

  }

 

  Serial.print(F(" "));

  if (gps.time.isValid())

  {

if (gps.time.hour() < 10) Serial.print(F("0"));

Serial.print(gps.time.hour());

Serial.print(F(":"));

if (gps.time.minute() < 10) Serial.print(F("0"));

Serial.print(gps.time.minute());

Serial.print(F(":"));

if (gps.time.second() < 10) Serial.print(F("0"));

Serial.print(gps.time.second());

Serial.print(F("."));

if (gps.time.centisecond() < 10) Serial.print(F("0"));

Serial.print(gps.time.centisecond());

  }

  else

  {

Serial.print(F("INVALID"));

  }

 

  Serial.println();

}


 

Código final

#include <TinyGPSPlus.h>

#include <SoftwareSerial.h>

#include <Wire.h>

#include <SPI.h>

#include <Adafruit_BMP280.h>

static const int RXPin = 4, TXPin = 3;

static const uint32_t GPSBaud = 9600;

float lectura;

float volt;

// The TinyGPSPlus object

TinyGPSPlus gps;

   

// The serial connection to the GPS device

SoftwareSerial ss(RXPin, TXPin);

#define BMP_SCK  (13)

#define BMP_MISO (12)

#define BMP_MOSI (11)

#define BMP_CS   (10)


Adafruit_BMP280 bmp; // I2C

//Adafruit_BMP280 bmp(BMP_CS); // hardware SPI

//Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO,  BMP_SCK);

void setup() {

  Serial.begin(9600);

  ss.begin(GPSBaud);

  pinMode(A0,INPUT);

while ( !Serial ) delay(100);   // wait for native usb

  Serial.println(F("BMP280 test"));

  unsigned status;

  //status = bmp.begin(BMP280_ADDRESS_ALT, BMP280_CHIPID);

  status = bmp.begin();

  if (!status) {

    Serial.println(F("Could not find a valid BMP280 sensor, check wiring or "

                      "try a different address!"));

    Serial.print("SensorID was: 0x"); Serial.println(bmp.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);

  }

   bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Operating Mode. */

                  Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */

                  Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */

                  Adafruit_BMP280::FILTER_X16,      /* Filtering. */

                  Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */

}

void loop() {

 lectura = analogRead(A0);

  volt = lectura /1023 * 5.0;

  Serial.println(volt);

  delay(1000);

  Serial.println();   

      if (volt > 4.25)

   {    

  Serial.print(F("Temperature = "));

    Serial.print(bmp.readTemperature());

    Serial.println(" *C");


    Serial.print(F("Pressure = "));

    Serial.print(bmp.readPressure());

    Serial.println(" Pa");


    Serial.print(F("Approx altitude = "));

    Serial.print(bmp.readAltitude(1013.25)); /* Adjusted to local forecast! */

    Serial.println(" m");


   

    delay(1000);

    

  while (ss.available() > 0)

  if (gps.encode(ss.read()))

    { 

      displayInfo();

}

  if (millis() > 5000 && gps.charsProcessed() < 10)

  {

    Serial.print(F("No GPS detected: check wiring."));

    while(true);

  }

  }

if (volt < 4.25)

 {

 Serial.println("Not enough battery for the GPS");

 Serial.print(F("Temperature = "));

    Serial.print(bmp.readTemperature());

    Serial.println(" *C");


    Serial.print(F("Pressure = "));

    Serial.print(bmp.readPressure());

    Serial.println(" Pa");


    Serial.print(F("Approx altitude = "));

    Serial.print(bmp.readAltitude(1013.25)); /* Adjusted to local forecast! */

    Serial.println(" m");

   

    delay(1000);

    digitalWrite(4, LOW);

 }

}


void displayInfo()

{

  Serial.print(F("Location: "));

  if (gps.location.isValid())

  {

    Serial.print(gps.location.lat(), 6);

    Serial.print(F(","));

    Serial.print(gps.location.lng(), 6);

  }

  else

  {

    Serial.print(F("INVALID"));

  }


  Serial.print(F("  Date/Time: "));

  if (gps.date.isValid())

  {

    Serial.print(gps.date.month());

    Serial.print(F("/"));

    Serial.print(gps.date.day());

    Serial.print(F("/"));

    Serial.print(gps.date.year());

  }

  else

  {

    Serial.print(F("INVALID"));

  }


  Serial.print(F(" "));

  if (gps.time.isValid())

  {

    if (gps.time.hour() < 10) Serial.print(F("0"));

    Serial.print(gps.time.hour());

    Serial.print(F(":"));

    if (gps.time.minute() < 10) Serial.print(F("0"));

    Serial.print(gps.time.minute());

    Serial.print(F(":"));

    if (gps.time.second() < 10) Serial.print(F("0"));

    Serial.print(gps.time.second());

    Serial.print(F("."));

    if (gps.time.centisecond() < 10) Serial.print(F("0"));

    Serial.print(gps.time.centisecond());

  }

  else

  {

    Serial.print(F("INVALID"));

  }


  Serial.println();

}