This USB adapter can communicate with other TR24A in char-to-char or packet mode.
Add second TR24 to full-duplex communication (with a little changes).
Example. Eagle schematic and layout
![]()
#include <TR24.h>
// Arduino 0015
// Teensyduino 0.4
// TR24 library 0.1
// Build on AT90USB162 with TR24A radio module
int TR24_CHANNEL = 6; // Default TR24 channel
int LED = 4; // PD4 - LED connected to digital pin 4
char TR24Buffer[64];
char USBBuffer[64];
void setup()
{
Serial.begin(19200);
pinMode(LED, OUTPUT);
LEDOFF();
TR24.begin(TR24_CHANNEL);
}
void loop()
{
char* ptr;
byte error;
// Blink 0.2 seconds interval while USB serial not connected
while(!(Serial.get_control() & USB_SERIAL_DTR))
{
LEDTOGGLE();
delay(200);
return;
}
LEDOFF();
Serial.flush();
error = TR24.on();
if(error > 0)
{
Serial.println("ERROR: Initialization error");
BlinkLED(error);
delay(1000);
return;
}
Serial.println("OK");
TR24.println("OK");
TR24.mode_recieve();
ptr = USBBuffer;
error = 0;
while (Serial.configured() && (Serial.get_control() & USB_SERIAL_DTR))
{
int c = Serial.read();
if(c != -1)
{
// Unbuffered send
TR24.print((char)c);
/* Buffered send
// Check for buffer overflow
if((ptr - USBBuffer) >= sizeof(USBBuffer))
error = 1;
else
*ptr++ = (char)c;
if( c == '\n')
{
if(error)
Serial.println("ERROR: Data too long");
else
{
*ptr = 0;
LEDON();
TR24.send(USBBuffer, (byte)(ptr - USBBuffer));
LEDOFF();
TR24.mode_recieve();
}
ptr = USBBuffer;
error = 0;
}
*/
}
if(TR24.available())
{
TR24.read(TR24Buffer, sizeof(TR24Buffer));
TR24.mode_recieve();
Serial.print(TR24Buffer);
}
}
TR24.mode_idle();
}
void LEDOFF() { digitalWrite(LED, HIGH); }
void LEDON() { digitalWrite(LED, LOW); }
void LEDTOGGLE() { digitalWrite(LED, !digitalRead(LED)); }
void BlinkLED(byte blinks)
{
while(blinks-- > 0)
{
LEDON();
delay(500);
LEDOFF();
delay(500);
}
delay(1000);
}


0 comment(s) so far