Hello,
I'm building a project to transmit data over LoRa using an Arudino Nano, I've got it working sending structs over 433MHz and received and displayed the other end. Code below. But I can't seem to get it to work with an Arduino Nano EVERY. It's throwing an error, also below, about ISR. My coding knowledge isn't quite good enough to figure out why this is the case.
// LoRa 9x_TX
// -*- mode: C++ -*-
// Example sketch showing how to create a simple messaging client (transmitter)
// with the RH_RF95 class. RH_RF95 class does not provide for addressing or
// reliability, so you should only use RH_RF95 if you do not need the higher
// level messaging abilities.
// It is designed to work with the other example LoRa9x_RX
#include <SPI.h>
#include <RH_RF95.h>
#define RFM95_CS 8 //10 for a nano
#define RFM95_RST 2
#define RFM95_INT 3
// Change to 434.0 or other frequency, must match RX's freq!
#define RF95_FREQ 433.0
// Singleton instance of the radio driver
RH_RF95 rf95(RFM95_CS, RFM95_INT);
struct payload{
float Lat;
float Long;
};
payload test = {53.1234, -2.2345};
void setup()
{
pinMode(RFM95_RST, OUTPUT);
digitalWrite(RFM95_RST, HIGH);
while (!Serial);
Serial.begin(9600);
delay(100);
Serial.println("Arduino LoRa TX Test!");
// manual reset
digitalWrite(RFM95_RST, LOW);
delay(10);
digitalWrite(RFM95_RST, HIGH);
delay(10);
while (!rf95.init()) {
Serial.println("LoRa radio init failed");
while (1);
}
Serial.println("LoRa radio init OK!");
// Defaults after init are 434.0MHz, modulation GFSK_Rb250Fd250, +13dbM
if (!rf95.setFrequency(RF95_FREQ)) {
Serial.println("setFrequency failed");
while (1);
}
Serial.print("Set Freq to: "); Serial.println(RF95_FREQ);
// Defaults after init are 434.0MHz, 13dBm, Bw = 125 kHz, Cr = 4/5, Sf = 128chips/symbol, CRC on
// The default transmitter power is 13dBm, using PA_BOOST.
// If you are using RFM95/96/97/98 modules which uses the PA_BOOST transmitter pin, then
// you can set transmitter powers from 5 to 23 dBm:
rf95.setTxPower(23, false);
}
int16_t packetnum = 0; // packet counter, we increment per xmission
void loop()
{
Serial.println("Sending to rf95_server"); // Send a message to rf95_server
char radiopacket[20] = "Hello World # ";
itoa(packetnum++, radiopacket+13, 10);
Serial.print("Sending "); Serial.println(radiopacket);
radiopacket[19] = 0;
Serial.println("Sending...");
delay(10);
//rf95.send((uint8_t *)radiopacket, 20);
rf95.send((uint8_t *)&test, sizeof(test));
Serial.println("Waiting for packet to complete..."); delay(10);
rf95.waitPacketSent();
// Now wait for a reply
uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
uint8_t len = sizeof(buf);
Serial.println("Waiting for reply..."); delay(10);
if (rf95.waitAvailableTimeout(1000))
{
// Should be a reply message for us now
if (rf95.recv(buf, &len))
{
Serial.print("Got reply: ");
Serial.println((char*)buf);
Serial.print("RSSI: ");
Serial.println(rf95.lastRssi(), DEC);
}
else
{
Serial.println("Receive failed");
}
}
else
{
Serial.println("No reply, is there a listener around?");
}
delay(1000);
}
Is it something to do with the every not having external interrupts? But from the documentation I thought it read all of its pins could be interrupts.
slightly confused, any guidance would be appreciated.
Error Message during compile:
/Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RHHardwareSPI.cpp: In member function 'virtual void RHHardwareSPI::attachInterrupt()':
/Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RHHardwareSPI.cpp:77:25: error: 'virtual void SPIClassMegaAVR::attachInterrupt()' is private within this context
SPI.attachInterrupt();
^
In file included from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RadioHead.h:1517:0,
from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RHGenericSPI.h:10,
from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RHHardwareSPI.h:10,
from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RHHardwareSPI.cpp:7:
/Users/jamesXXXX/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.8/libraries/SPI/src/SPI.h:186:15: note: declared private here
inline void attachInterrupt() { SPI0.INTCTRL |= (SPI_IE_bm); }
^~~~~~~~~~~~~~~
/Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RHHardwareSPI.cpp: In member function 'virtual void RHHardwareSPI::detachInterrupt()':
/Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RHHardwareSPI.cpp:84:25: error: 'virtual void SPIClassMegaAVR::detachInterrupt()' is private within this context
SPI.detachInterrupt();
^
In file included from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RadioHead.h:1517:0,
from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RHGenericSPI.h:10,
from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RHHardwareSPI.h:10,
from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RHHardwareSPI.cpp:7:
/Users/jamesXXXX/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.8/libraries/SPI/src/SPI.h:187:15: note: declared private here
inline void detachInterrupt() { SPI0.INTCTRL &= ~(SPI_IE_bm); }
^~~~~~~~~~~~~~~
/Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RHHardwareSPI.cpp: In member function 'virtual void RHHardwareSPI::begin()':
/Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RHHardwareSPI.cpp:137:57: warning: invalid conversion from 'uint8_t {aka unsigned char}' to 'BitOrder' [-fpermissive]
_settings = SPISettings(frequency, bitOrder, dataMode);
^
In file included from /Users/jamesXXXX/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.8/libraries/SPI/src/SPI.h:24:0,
from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RadioHead.h:1517,
from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RHGenericSPI.h:10,
from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RHHardwareSPI.h:10,
from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RHHardwareSPI.cpp:7:
/Users/jamesXXXX/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.8/cores/arduino/api/HardwareSPI.h:47:3: note: initializing argument 2 of 'arduino::SPISettings::SPISettings(uint32_t, BitOrder, int)'
SPISettings(uint32_t clock, BitOrder bitOrder, int dataMode) {
^~~~~~~~~~~
/Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RH_ASK.cpp: In member function 'void RH_ASK::timerSetup()':
/Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RH_ASK.cpp:463:5: error: 'TCCR1A' was not declared in this scope
TCCR1A = 0; // Output Compare pins disconnected
^~~~~~
/Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RH_ASK.cpp:463:5: note: suggested alternative: 'TCB1'
TCCR1A = 0; // Output Compare pins disconnected
^~~~~~
TCB1
/Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RH_ASK.cpp:464:5: error: 'TCCR1B' was not declared in this scope
TCCR1B = _BV(WGM12); // Turn on CTC mode
^~~~~~
/Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RH_ASK.cpp:464:5: note: suggested alternative: 'TCB1'
TCCR1B = _BV(WGM12); // Turn on CTC mode
^~~~~~
TCB1
In file included from /Users/jamesXXXX/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5/avr/include/avr/io.h:99:0,
from /Users/jamesXXXX/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5/avr/include/avr/pgmspace.h:90,
from /Users/jamesXXXX/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.8/cores/arduino/api/String.h:31,
from /Users/jamesXXXX/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.8/cores/arduino/api/IPAddress.h:24,
from /Users/jamesXXXX/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.8/cores/arduino/api/ArduinoAPI.h:30,
from /Users/jamesXXXX/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.8/cores/arduino/Arduino.h:23,
from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RadioHead.h:1513,
from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RHGenericDriver.h:9,
from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RH_ASK.h:9,
from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RH_ASK.cpp:6:
/Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RH_ASK.cpp:464:18: error: 'WGM12' was not declared in this scope
TCCR1B = _BV(WGM12); // Turn on CTC mode
^
/Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RH_ASK.cpp:471:5: error: 'OCR1A' was not declared in this scope
OCR1A = nticks;
^~~~~
/Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RH_ASK.cpp:478:5: error: 'TIMSK' was not declared in this scope
TIMSK |= _BV(OCIE1A);
^~~~~
In file included from /Users/jamesXXXX/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5/avr/include/avr/io.h:99:0,
from /Users/jamesXXXX/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5/avr/include/avr/pgmspace.h:90,
from /Users/jamesXXXX/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.8/cores/arduino/api/String.h:31,
from /Users/jamesXXXX/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.8/cores/arduino/api/IPAddress.h:24,
from /Users/jamesXXXX/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.8/cores/arduino/api/ArduinoAPI.h:30,
from /Users/jamesXXXX/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.8/cores/arduino/Arduino.h:23,
from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RadioHead.h:1513,
from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RHGenericDriver.h:9,
from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RH_ASK.h:9,
from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RH_ASK.cpp:6:
/Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RH_ASK.cpp:478:18: error: 'OCIE1A' was not declared in this scope
TIMSK |= _BV(OCIE1A);
^
In file included from /Users/jamesXXXX/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.8/cores/arduino/Arduino.h:27:0,
from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RadioHead.h:1513,
from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RHGenericDriver.h:9,
from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RH_ASK.h:9,
from /Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RH_ASK.cpp:6:
/Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RH_ASK.cpp: In function 'void TIMER1_COMPA_vect()':
/Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RH_ASK.cpp:728:31: warning: 'TIMER1_COMPA_vect' appears to be a misspelled 'signal' handler, missing '__vector' prefix [-Wmisspelled-isr]
#define RH_ASK_TIMER_VECTOR TIMER1_COMPA_vect
^
/Users/jamesXXXX/Documents/Arduino/libraries/RadioHead/RH_ASK.cpp:798:5: note: in expansion of macro 'RH_ASK_TIMER_VECTOR'
ISR(RH_ASK_TIMER_VECTOR)
^~~~~~~~~~~~~~~~~~~
exit status 1
Compilation error: exit status 1