IQRF SPI library for Arduino  Version 1.2
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros
Get-info.ino

This example shows data about TR module.

#if defined(__PIC32MX__)
#include <WProgram.h>
#else
#include <Arduino.h>
#endif
#if defined(__AVR__) || defined(CORE_TEENSY)
#include <MsTimer2.h>
#elif defined(__SAM3X8E__)
#include <DueTimer.h>
#endif
#include <stddef.h>
#include <stdint.h>
#include <IQRF.h>
// 5000@1ms = 5s
#define USER_TIMER_PERIOD 5000
// TR MODULE PINS
#define TR_RESET_PIN 6
#define TR_SS_PIN 10
// LOCAL PROTOTYPES
void setup();
void loop();
void rxHandler();
void txHandler(uint8_t packetId, uint8_t packetResult);
#if defined(__PIC32MX__)
uint32_t msTimerCallback(uint32_t currentTime);
#else
void msTimerCallback();
#endif
// GLOBAL VARIABLES
typedef struct {
uint8_t rxBuffer[PACKET_SIZE];
uint8_t *txBuffer;
uint8_t packetId;
volatile uint16_t timer;
volatile bool timerAck;
appVarsStruct appVars;
IQRF iqrf;
IQRFTR iqrfTr;
void setup() {
// User LED
pinMode(13, OUTPUT);
// Up - PC
Serial.begin(9600);
// Wait for Serial
while (!Serial) {
}
// Down - IQRF
iqrf.begin(rxHandler, txHandler);
Serial.print("[IQRF] OS version: ");
Serial.println(iqrfTr.getOsVersion(), HEX);
Serial.print("[IQRF] OS build: ");
Serial.println(iqrfTr.getOsBuild(), HEX);
Serial.print("[IQRF] Module type: ");
switch (iqrfTr.getModuleType()) {
case iqrfTr.types::TR_52D:
Serial.println("TR-52D");
break;
case iqrfTr.types::TR_58D_RJ:
Serial.println("TR-58D-RJ");
break;
case iqrfTr.types::TR_72D:
Serial.println("TR-72D");
break;
case iqrfTr.types::TR_53D:
Serial.println("TR_53D");
break;
case iqrfTr.types::TR_54D:
Serial.println("TR_54D");
break;
case iqrfTr.types::TR_55D:
Serial.println("TR_55D");
break;
case iqrfTr.types::TR_56D:
Serial.println("TR_56D");
break;
case iqrfTr.types::TR_76D:
Serial.println("TR_76D");
break;
default:
Serial.println("UNKNOWN");
}
Serial.print("[IQRF] Module ID: ");
Serial.println(iqrfTr.getModuleId(), HEX);
Serial.print("[IQRF] Module MCU: ");
switch (iqrfTr.getMcuType()) {
case iqrfTr.mcuTypes::PIC16LF819:
Serial.println("PIC16LF819");
break;
case iqrfTr.mcuTypes::PIC16LF88:
Serial.println("PIC16LF88");
break;
case iqrfTr.mcuTypes::PIC16F886:
Serial.println("PIC16F886");
break;
case iqrfTr.mcuTypes::PIC16LF1938:
Serial.println("PIC16LF1938");
break;
default:
Serial.println("UNKNOWN");
}
Serial.print("[IQRF] Module has FCC certification: ");
Serial.println(iqrfTr.getFccStatus() ? "YES" : "NO");
#if defined(__AVR__) || defined(CORE_TEENSY)
MsTimer2::set(1, msTimerCallback);
MsTimer2::start();
#elif defined(__SAM3X8E__)
Timer6.attachInterrupt(msTimerCallback).start(1000);
#elif defined(__PIC32MX__)
attachCoreTimerService(msTimerCallback);
#endif
// Clear variables
memset(&appVars, 0, sizeof(appVarsStruct));
appVars.timer = USER_TIMER_PERIOD;
}
void loop() {
// TR module SPI comunication driver
iqrf.driver();
// Test send data every 5s
if (appVars.timerAck) {
appVars.timerAck = false;
}
}
#if defined(__PIC32MX__)
uint32_t msTimerCallback(uint32_t currentTime) {
// App timer, call handler
if (appVars.timer) {
if ((--appVars.timer) == 0) {
appVars.timerAck = true;
appVars.timer = USER_TIMER_PERIOD;
}
}
return(currentTime + CORE_TICK_RATE);
}
#else
void msTimerCallback() {
// App timer, call handler
if (appVars.timer) {
if ((--appVars.timer) == 0) {
appVars.timerAck = true;
appVars.timer = USER_TIMER_PERIOD;
}
}
}
#endif
void rxHandler() {
// Read and print received data
iqrf.getData(appVars.rxBuffer, iqrf.getDataLength());
Serial.print("[IQRF] Receive done: ");
Serial.write(appVars.rxBuffer, iqrf.getDataLength());
Serial.println();
}
void txHandler(uint8_t packetId, uint8_t packetResult) {
Serial.println("[IQRF] Send done");
}