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); }
//**************************************************************************** //************ 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"); }
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; } }
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); }
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..."); }
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); }
//=================================================================================================================== // 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")); } }
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); }
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); }
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 }
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); } } } }
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; } }