Working with ejtb, here is the updated code. We did upload those files and bounced the lua, However we were unable to get a device registered from the Vera. Any thoughts from this point?
/*
* Blabberator.ino
*
*
* June 2016
*
*/
#define BLABBERATOR_VERSION "0.5"
#define SPI_SS 10 // SPI Slave Select
#define SPI_MOSI 11 // SPI Master Out, Slave In
#define SPI_MISO 12 // SPI Master In, Slave Out
#define SPI_SCK 13 // SPI Synchronous Clock
#include <MyConfig.h>
#include <MySensors.h>
#include <SPI.h>
#include <SoftwareSerial.h>
/******* Emic Defines, Globals, and Functions *************/
#define EMIC_RXPIN 3 // Serial input (connects to Emic 2's SOUT pin)
#define EMIC_TXPIN 4 // Serial output (connects to Emic 2's SIN pin)
SoftwareSerial emicSerial = SoftwareSerial(EMIC_RXPIN, EMIC_TXPIN) ;
void emicSay(char* szStr)
{
unsigned long lStart ; //Time that the last character was sent to the Emic
Serial.print(F("Saying \"")) ;
Serial.print(szStr) ;
Serial.print(F("\"... ")) ;
Serial.flush() ;
//Send the string to the Emic
emicSerial.listen() ;
emicSerial.print('S') ;
emicSerial.print(szStr) ;
lStart = millis() ; //Record the time
emicSerial.print('\n') ;
emicSerial.flush() ;
//Wait for the Emic to finish
while (emicSerial.read() != ':')
{
if (millis() - lStart > 5000)
{//Wait for as long as 5 seconds before declaring defeat
Serial.println(F("timeout waiting for the Emic to finish")) ;
Serial.flush() ;
return ;
}
}
Serial.println(F("done")) ;
Serial.flush() ;
}
/******* MySensor Defines, Globals, and Callback *************/
#define NODE_ID 10
//Callback function to receive incoming messages
void receive(const MyMessage &message)
{
char * pszMsg ;
//Handle acknowledgement messages
if (message.isAck())
{
Serial.println(F("Ack received from the gateway")) ;
Serial.flush() ;
}
//Handle messages by type
switch (message.type)
{
case V_TEXT: //V_CUSTOM is a guess at a reasonable message type
pszMsg = (char*)message.getString() ; //This may or may not work
if (pszMsg != NULL) //Check to see if the returned pointer is legit
{
if (pszMsg[0] != (char)0) //Check to see if the string is empty
{
emicSay(pszMsg) ;
}
}
break ;
default:
Serial.print(F("Unhandled message of type ")) ;
Serial.println(message.type) ;
Serial.flush() ;
}
}
/******* Stock Arduino Entry Points *************/
void setup() {
pinMode(SPI_SS, OUTPUT) ; //SPI SS pin - set to output to prevent floating asserts stopping SPI
/*
* Debug serial port initialization (this is the USB link back to the programming computer)
*/
Serial.begin(MY_BAUD_RATE); //Initialize using whatever the MySensors library is using to avoid conflict
// this check is only needed on the Leonardo:
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
delay(2000) ; //Wait 2 seconds to let the software on the other end of the link to get ready
Serial.print(F("Blabberator booting: version ")) ;
Serial.println(BLABBERATOR_VERSION) ;
Serial.flush() ;
/*
* NOTE: This code was shamelessly stolen from the Emic demo
When the Emic 2 powers on, it takes about 3 seconds for it to successfully
initialize. It then sends a ":" character to indicate it's ready to accept
commands. If the Emic 2 is already initialized, a CR will also cause it
to send a ":"
*/
Serial.print(F("Initializing Emic... ")) ;
emicSerial.begin(9600);
emicSerial.listen() ; // Route incoming serial to this object
emicSerial.print('\n') ; // Send a CR in case the system is already up
while (emicSerial.read() != ':') ; // When the Emic 2 has initialized and is ready, it will send a single ':' character, so wait here until we receive it
delay(10) ; // Short delay
emicSerial.flush() ; // Flush the receive buffer
Serial.println(F("done")) ;
Serial.flush() ;
}
void presentation()
{
/*
* MySensor node initialization
*
* Sadly, these functions to not have a return value to indicate how they made out.
*/
Serial.print(F("Initializing MySensor node... ")) ;
sendSketchInfo("Blabberator", BLABBERATOR_VERSION);
present(NODE_ID, S_INFO);
Serial.print(F("done")) ;
Serial.flush() ;
}
void loop() {
//Nothing to see here folks, move along
}```