Example #1
0
void loop() {  
  int gasMonitor = analogRead(GASPIN);
  int currPeriod = millis()/TRANSMITPERIOD;
  if (currPeriod != lastPeriod) {
    Serial.print("\ngasMonitor=");
    Serial.println(gasMonitor);

    //send data
    theData.uptime = millis();
    theData.var2_float = gasMonitor;
    theData.var3_float = 0;

    Serial.print("Sending struct (");
    Serial.print(sizeof(theData));
    Serial.print(" bytes) ... ");
    if (radio.sendWithRetry(GATEWAYID, (const void*)(&theData), sizeof(theData))) {
      Serial.print(" ok!");
    } else {
      Serial.print(" nothing...");
    }
    lastPeriod=currPeriod;
  }
  while(gasMonitor > 100){
      theData.var3_float = 1;                                                     //Alarm signal
      radio.sendWithRetry(GATEWAYID, (const void*)(&theData), sizeof(theData));
      Serial.println("ALARM!! sending alarm");
      playTone(100, 2600, PIEZOPIN);
      analogWrite(REDPIN, 255);
      delay(100);
      digitalWrite(REDPIN, LOW);
      gasMonitor = analogRead(GASPIN);
    }
  analogWrite(PIEZOPIN, 0);
  delay(1000);
}
Example #2
0
//****************************************************************************
//************ Setup Routines for the various pieces of hardware *************
//****************************************************************************
void setupRadio(void)
{
  //while (!Serial); // wait until serial console is open, remove if not tethered to computer

  Serial.println("Feather RFM69HCW Transmitter");

  // Hard Reset the RFM module
  pinMode(RFM69_RST, OUTPUT);
  digitalWrite(RFM69_RST, HIGH);
  delay(100);
  digitalWrite(RFM69_RST, LOW);
  delay(100);

  // Initialize radio
  radio.initialize(FREQUENCY, NODEID, NETWORKID);
  if(IS_RFM69HCW)
  {
    radio.setHighPower();    // Only for RFM69HCW & HW!
  }
  radio.setPowerLevel(31); // power output ranges from 0 (5dBm) to 31 (20dBm)

  radio.encrypt(ENCRYPTKEY);

  Serial.print("\nTransmitting at ");
  Serial.print(FREQUENCY==RF69_433MHZ ? 433 : FREQUENCY==RF69_868MHZ ? 868 : 915);
  Serial.println(" MHz");
}
Example #3
0
void loop() {
  if (radio.receiveDone()) {
    uint8_t size = radio.DATALEN;
    uint8_t buf[size];
    memcpy(buf, (const void*)radio.DATA, size);

    if (radio.ACKRequested()) {
      unsigned long start = micros();
      radio.sendACK();
      unsigned long duration = micros() - start;
      Serial.print("ACK sent in "); Serial.print(duration); Serial.print("us. ");
    }

    Serial.print("RX_RSSI: "); Serial.println(radio.RSSI);

    if(size == 2 && buf[0] == LEVEL_CONTROL_TAG) {
      Serial.print("Setting level to ");
      Serial.println(buf[1]);
      analogWrite(MOSFET_GATE_PIN, buf[1]);
      lastCommandTime = millis();
    }
  } else if(millis() - lastCommandTime > COMMAND_TIMEOUT_MS && lastCommandTime != ULONG_MAX) {
    Serial.print("No control command received in "); Serial.print(COMMAND_TIMEOUT_MS); Serial.println("ms. Setting control level to 0.");
    digitalWrite(MOSFET_GATE_PIN, LOW);
    lastCommandTime = ULONG_MAX;
  }
}
Example #4
0
void setup() {
  Serial.begin(SERIAL_BAUD);
  radio.initialize(FREQUENCY,NODEID,NETWORKID);
  //radio.setHighPower(); //uncomment only for RFM69HW!
  radio.encrypt(KEY);
  char buff[50];
  sprintf(buff, "\nTransmitting at %d Mhz...", FREQUENCY==RF69_433MHZ ? 433 : FREQUENCY==RF69_868MHZ ? 868 : 915);
  Serial.println(buff);
}
Example #5
0
void setup() {
  Serial.begin(SERIAL_BAUD);
  pinMode(MOSFET_GATE_PIN, OUTPUT);
  digitalWrite(MOSFET_GATE_PIN, LOW);

  radio.initialize(FREQUENCY, NODEID, NETWORKID);
  radio.setHighPower();
  radio.setPowerLevel(20);
  radio.promiscuous(true);

  Serial.print("Node: ");
  Serial.println(NODEID);
  Serial.println("Listening at 433 Mhz...");
}
Example #6
0
void setup() {
  Serial.begin(SERIAL_BAUD);          //  setup serial
  Serial.println("starting");
  radio.initialize(FREQUENCY,NODEID,NETWORKID);
#ifdef IS_RFM69HW
  radio.setHighPower(); //uncomment only for RFM69HW!
#endif
  radio.encrypt(ENCRYPTKEY);
  char buff[50];
  sprintf(buff, "\nTransmitting at %d Mhz...", FREQUENCY==RF69_433MHZ ? 433 : FREQUENCY==RF69_868MHZ ? 868 : 915);
  Serial.println(buff);
  theData.nodeID = NODEID;  //this node id should be the same for all devices in this node 
  theData.deviceID = GASDEVICEID;
  pinMode(REDPIN, OUTPUT);
  pinMode(PIEZOPIN, OUTPUT); 
}
Example #7
0
//===================================================================================================================
// CheckForWirelessHEX() - Checks whether the last message received was a wireless programming request handshake
// If so it will start the handshake protocol, receive the new HEX image and 
// store it on the external flash chip, then reboot
// Assumes radio has been initialized and has just received a message (is not in SLEEP mode, and you called CRCPass())
// Assumes flash is an external SPI flash memory chip that has been initialized
//===================================================================================================================
void CheckForWirelessHEX(RFM69& radio, SPIFlash& flash, uint8_t DEBUG, uint8_t LEDpin)
{
  //special FLASH command, enter a FLASH image exchange sequence
  if (radio.DATALEN >= 4 && radio.DATA[0]=='F' && radio.DATA[1]=='L' && radio.DATA[2]=='X' && radio.DATA[3]=='?')
  {
    uint8_t remoteID = radio.SENDERID;
    if (radio.DATALEN == 7 && radio.DATA[4]=='E' && radio.DATA[5]=='O' && radio.DATA[6]=='F')
    { //sender must have not received EOF ACK so just resend
      radio.send(remoteID, "FLX?OK",6);
    }
#ifdef SHIFTCHANNEL
    else if (HandleWirelessHEXDataWrapper(radio, remoteID, flash, DEBUG, LEDpin))
#else
    else if (HandleWirelessHEXData(radio, remoteID, flash, DEBUG, LEDpin))
#endif
    {
      if (DEBUG) Serial.print(F("FLASH IMG TRANSMISSION SUCCESS!\n"));
      resetUsingWatchdog(DEBUG);
    }
    else
    {
      if (DEBUG) Serial.print("Timeout/Error, erasing written data ... ");
      //flash.blockErase32K(0); //clear any written data in first 32K block
      if (DEBUG) Serial.println(F("DONE"));
    }
  }
Example #8
0
void sendLaserVisiblePacket() {
	packet.s.messageId = MESSAGE_LASER_VISIBLE;
	packet.s.batteryVoltage = getBatteryVoltage();
	packet.s.calibration = calibration;
	packet.s.laserTripped = (0 != (PINB & _BV(PB1)));
	radio.send(GATEWAY_ADDRESS, packet.buff, 9);
}
Example #9
0
void sendStatusPacket() {
	packet.s.messageId = MESSAGE_STATUS;
	packet.s.batteryVoltage = getBatteryVoltage();
	packet.s.calibration = calibration;
	packet.s.laserTripped = (0 != (PINB & _BV(PB1)));
	radio.send(GATEWAY_ADDRESS, packet.buff, 9);
}
Example #10
0
void loop()
{
  delay(1000);  // Wait 1 second between transmits, could also 'sleep' here!

  // Create and pack the heartbeat data
  mavlink_msg_heartbeat_pack(NODEID, NODEID, &data_pkt, 78.3, 45.1, 83.6, 75.4, 10234);
  uint16_t buf_len = mavlink_msg_to_send_buffer(mavlink_buf, &data_pkt);

  radio.send(RECEIVER, mavlink_buf, buf_len, false);
  Blink(LED_BUILTIN, 50, 3);
  /*if(radio.sendWithRetry(RECEIVER, radiopacket, strlen(radiopacket)))
  {
    Serial.println("OK");
    Blink(LED_BUILTIN, 50, 3); //blink LED 3 times, 50ms between blinks
  }*/

  radio.receiveDone(); // Put radio in RX mode
  Serial.flush(); // Make sure all serial data is clocked out before sleeping the MCU
}
Example #11
0
int main() {
	sei();
	timerInit();

	ledInit();
	ledOn();
	delay(100);
	ledOff();

	packet.s.nodeId = eeprom_read_byte(I2C_ADDRESS_EEPROM_LOCATION);

	SPI.begin();
	laserInit();
	adcInit();

	detectorInit();
	detectorCalibrate();

	uint8_t radioInitialised = radio.initialize(RF69_868MHZ, packet.s.nodeId, 100);
	radio.encrypt(0);
	if(radioInitialised) {
		ledOn();
		delay(1500);
		sendStatusPacket();
		ledOff();
	} else {
		ledRapidBlink(2);
	}
	
	laserOn();

	while(1) {

		if(laserTripped) {
			ledOn();
			sendStatusPacket();
			delay(10);
			while((0 == (PINB & _BV(PB1)))){
				//WAIT
			}
			sendLaserVisiblePacket();
			detectorArm();
			while(0 == (PINA & _BV(PA3))) {
				//WAIT
			}
		} else {
			ledOff();
		}

		if(laserTripped || 0 == (PINA & _BV(PA3))) {
			sendStatusPacket();
			delay(300);
			while(0 == (PINA & _BV(PA3))) {
				//WAIT
			}
			delay(300);
		}


		if(radio.receiveDone()) {
			switch((char)radio.DATA[0]) {
				case CMD_LASER_ON: laserOn(); break;
				case CMD_LASER_OFF: laserOff(); break;
				case CMD_CALIBRATE: detectorCalibrate(); break;
				case CMD_GET_STATUS: waitAndSendStatus(); break;
			}
		}

		if(isBatteryLow()) {
			laserOff();
			radio.sleep();
			while(1) {
				ledRapidBlink(10);
				delay(2000);
			}
		}
	}
}
Example #12
0
void loop() {

  //check for any received packets
  if (radio.receiveDone()) {
    Serial.print('[');Serial.print(radio.SENDERID, DEC);Serial.print("] ");
    for (byte i = 0; i < radio.DATALEN; i++)
      Serial.print((char)radio.DATA[i]);
    Serial.print("   [RX_RSSI:");Serial.print(radio.readRSSI());Serial.print("]");

    if (radio.ACK_REQUESTED)
    {
      radio.sendACK();
      Serial.print(" - ACK sent");
      delay(10);
    }
    Blink(LED,5);
    Serial.println();
  }

  // 
  int currPeriod = millis()/TRANSMITPERIOD;
  //Serial.print("lastPeriod: ");
  //Serial.print(lastPeriod);
  //Serial.print(" currPeriod: ");
  //Serial.println(currPeriod);  

  if (currPeriod != lastPeriod) {
    //fill in the struct with new values
    theData.msgID = millis();
    theData.pkgType = 1;
    //theData.count = currPeriod;
    
    thePackage.a = 9;
    thePackage.b = 19;
    thePackage.c = 29;
    thePackage.d = 39;

    //theData.pkg = (const void*)(&thePackage);
    memcpy(theData.pkg, &thePackage, sizeof(thePackage));

    Serial.print("Sending struct (");
    Serial.print(sizeof(theData));
    Serial.print(" bytes) ... ");
    
    /* TEST - Delete 
    if (currPeriod % 2) { 
    if (radio.sendWithRetry(TARGETID, (const void*)(&theData), sizeof(theData)))
      Serial.print(" ok!");
    else Serial.print(" nothing...");
    } else {
    if (radio.sendWithRetry(TARGETID_2, (const void*)(&theData), sizeof(theData)))
      Serial.print(" ok!");
    else Serial.print(" nothing...");
    }
    */


    if (radio.sendWithRetry(TARGETID, (const void*)(&theData), sizeof(theData)))
      Serial.print(" ok!");
    else Serial.print(" nothing...");
    

    Serial.println();
    Blink(LED,3);
    lastPeriod=currPeriod;
  }
}