Test program to send MAX!-Messages with a RFM22-Module
Dependencies: RF22 TextLCD TextLCDScroll mbed RF22Max
main.cpp
- Committer:
- charly
- Date:
- 2013-10-22
- Revision:
- 4:6c72714f5886
- Parent:
- 3:4254b4c3557e
File content as of revision 4:6c72714f5886:
// Testprogramm for RFM22B with RF22Max-Library to read ELV MAX! window Shutter-Contacts and PushBottons
//show debug output on Serial pc
#define DEBUG
#include "mbed.h"
#include <RF22Max.h>
#include "TextLCDScroll.h"
// show debug-output on console
//#define DEBUG
Serial pc(USBTX, USBRX);
Ticker SendTicker;
volatile int doSend = 0; // set to 1 by Ticker-Interrupt and read in main-loop
TextLCDScroll lcd(p30, p29, p28, p27, p26, p25, TextLCD::LCD16x2); // rs, e, d4-d7
// mbed LEDs
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);
// Singleton instance of the radio
//rf22(PinName slaveSelectPin , PinName mosi, PinName miso, PinName sclk, PinName interrupt );
RF22Max rf22(p14,p11,p12,p13,p15);
void Ticker_isr()
{
led1 = !led1;
doSend = 1;
}
int main()
{
char lcdline[500];
RF22Max::max_message MyMessage;
int i;
uint8_t sbuf[RF22_MAX_MESSAGE_LEN];
uint8_t slen = sizeof(sbuf);
pc.baud(115200);
pc.printf("\n\rConnected to mbed\n\r");
char version_str [80] = "RF22-Send-Test!-V1.0";
lcd.cls();
lcd.setLine(0,version_str);
pc.printf("%s\n\r",version_str);
pc.printf("Pre-init|");
if (!rf22.init())
pc.printf("RF22Max init failed\n\r");
pc.printf("Post-init\n\r");
rf22.setModeRx();
SendTicker.attach(&Ticker_isr, 5.0); // Send every 5 seconds
//wait forever and see what comes in
while (1) {
// did we get a MAX!-Message?
if (rf22.recv_max(&MyMessage)) {
// we got a message
led2 = !led2;
sprintf(lcdline,"Got Message type: %s Msg-Nr:%i from Device-ID:%06X State:%s Battery %s", MyMessage.type_str,MyMessage.cnt, MyMessage.frm_adr, MyMessage.state, MyMessage.battery_state);
pc.printf("%s\n\r",lcdline);
lcd.setLine(0,lcdline);
}
if (doSend) {
//we should send something
doSend = 0;
led4=1;
// try to send a simulated window-shutterContact-message
// wait some time
sbuf[0] = 11; // MsgLen
sbuf[1] = 0x21; // MsgCount ??
sbuf[2] = 0x00; // Flag
sbuf[3] = 0x30; // Type = Cmd = ShutterContactState
sbuf[4] = 0x11; // From Fake Address
sbuf[5] = 0x11; // From
sbuf[6] = 0x11; // From
sbuf[7] = 0x00; // To Address : broadcast
sbuf[8] = 0x00;
sbuf[9] = 0x00;
sbuf[10] = 0x00; // GroupId
sbuf[11] = 0x02; //Payload is 0x02: State Open, Battery: good
slen = 12+2; //+2Byte CRC????
/* Calculate CRC */
uint16_t scrc = rf22.calc_crc(sbuf, slen - 2);
sbuf[12] = scrc >> 8;
sbuf[13] = scrc & 0xff;
if (rf22.send(sbuf,slen)) {
#ifdef DEBUG
pc.printf("Send window-shutterContact-message OK\n\r");
#endif
} else {
#ifdef DEBUG
pc.printf("Send window-shutterContact-message NOT OK\n\r");
#endif
}
led4 = 0;
}
}
}