Skip to content

Instantly share code, notes, and snippets.

@gibbedy
Last active November 22, 2017 13:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gibbedy/dabcfdae1a8e1adb67ba0a78087e6e3c to your computer and use it in GitHub Desktop.
Save gibbedy/dabcfdae1a8e1adb67ba0a78087e6e3c to your computer and use it in GitHub Desktop.
Example program to communicate between two teensy 3.2's using EasyTransfer. Load this on two teensy 3.2's that are connected by serail1 (tx->rx, rx->tx, gnd->gnd). uncomment one define to make that the sender. This simply means only one of the teensys will initiate what I'm calling ping pong comms.140 byte messages will then be sent back and for…
//easytransfer test using 2 teensy3.2's
//define one as sender (i think i need todo this)
//Now using RS485 half duplex
//**********************************************
#define NUMBER_OF_EASYTRANSFER_INTS 128
//#define IS_SENDER true
//**********************************************
#ifndef IS_SENDER
#define IS_SENDER false
#endif
#include <EasyTransfer.h>
//create two objects
EasyTransfer ETin, ETout;
struct RECEIVE_DATA_STRUCTURE{
uint8_t recvInt[NUMBER_OF_EASYTRANSFER_INTS];
uint32_t sendCount;
uint32_t peak1;//left channel peak level
uint32_t peak2; //right channel peak level
};
struct SEND_DATA_STRUCTURE{
uint8_t sendInt[NUMBER_OF_EASYTRANSFER_INTS];
uint32_t sendCount;
uint32_t peak1;//left channel peak level
uint32_t peak2; //right channel peak level
};
RECEIVE_DATA_STRUCTURE rxdata;
SEND_DATA_STRUCTURE txdata;
bool isSender=IS_SENDER;
bool commsUp=false;
int currentTime=0;
int speedCheckTime=1000;
int seedCommsCheckTime=1000;
const int SEED_COMMS_CHECK_INTERVAL=1000;
const int SPEED_CHECK_INTERVAL=1000;
int lastIntCount=0;
void setup(){
for(int i = 0; i<NUMBER_OF_EASYTRANSFER_INTS; i++)
{
rxdata.recvInt[i]=i;
txdata.sendInt[i]=i;
}
pinMode(13,OUTPUT); //onboard led
// pinMode(12,INPUT_PULLUP);
//pinMode(3,OUTPUT);//rs485 send/recieve control
//digitalWrite(3,LOW);//start rs485 in receive mode;
// Serial1.transmitterEnable(3)
Serial1.begin(115200);
Serial.begin(250000);
//start the library, pass in the data details and the name of the serial port. Can be Serial, Serial1, Serial2, etc.
ETin.begin(details(rxdata), &Serial1);
ETout.begin(details(txdata), &Serial1);
//isSender=digitalRead(12); //sender specified by input 12 pulled up.
delay(1000);
Serial.print("size of struct:");
Serial.println(sizeof(RECEIVE_DATA_STRUCTURE));
}
void loop(){
currentTime=millis();
if(currentTime>speedCheckTime)
{
speedCheckTime+=SPEED_CHECK_INTERVAL;
Serial.print("transfers/second= ");
Serial.println(rxdata.recvInt[0]-lastIntCount);
lastIntCount=rxdata.recvInt[0];
}
if(commsUp==false&&isSender&&currentTime>seedCommsCheckTime) //send int to start ping pong comms going.
{
seedCommsCheckTime+=SEED_COMMS_CHECK_INTERVAL;
txdata.sendInt[0]=0;
ETout.sendData();
// Serial1.flush();
Serial.println("sending message");
}
if(ETin.receiveData()) //if we recieve int, increment and send this int back out
{
txdata.sendInt[0]=rxdata.recvInt[0]+1;
ETout.sendData();
//Serial1.flush();
commsUp=true;
digitalWrite(13,!digitalRead(13));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment