Skip to content

Commit

Permalink
now the lamp node is working with fixed addressgit add *!(giving seri…
Browse files Browse the repository at this point in the history
…al command to the serial node by hand)
  • Loading branch information
marco committed Sep 2, 2016
1 parent 0447ce2 commit 095074b
Show file tree
Hide file tree
Showing 3 changed files with 225 additions and 18 deletions.
237 changes: 221 additions & 16 deletions arduino_code/onos_lamp_node.ino
Original file line number Diff line number Diff line change
Expand Up @@ -72,24 +72,27 @@ char serial_number[13]="WLightSS0003";

char node_fw[]="5.13";

int this_node_address=254; //i start with 254
int this_node_address=2; //i start with 254

int old_address=254;
int old_address=2;

unsigned long get_address_timeout=0;

#define rx_msg_lenght 31
# define gateway_address 1

char received_message_type_of_onos_cmd;
int onos_cmd_start_position=-99;
int onos_cmd_end_position=-99;

char received_message_type_of_onos_cmd[3];
char received_message_flag;
uint8_t received_message_first_pin_used;
uint8_t received_message_second_pin_used;
int received_message_value;
char received_message_answer[rx_msg_lenght+6]="er00_#]";
char received_message_sn[13]="";
int received_message_address=0; //must be int..

char filtered_onos_message[rx_msg_lenght+3];
char syncMessage[28];
char str_this_node_address[4];

Expand Down Expand Up @@ -186,6 +189,161 @@ void getAddressFromGateway(){



void decodeOnosCmd(const char *received_message){
/*
Serial.println(F("decodeOnosCmd executed"));
Serial.println(received_message[0]);
Serial.println(received_message[1]);
Serial.println(received_message[2]);
Serial.println(received_message[3]);
Serial.println(received_message[4]);
Serial.println(received_message[5]);
Serial.println(received_message[6]);
*/

strcpy(received_message_answer,"err01_#]");



if ((received_message[0]=='[')&&(received_message[1]=='S')&&(received_message[2]=='_') ) {
// the onos cmd was found [S_001dw06001_#]


strcpy(received_message_answer,"cmdRx_#]");


received_message_type_of_onos_cmd[0]=received_message[6];
received_message_type_of_onos_cmd[1]=received_message[7];

received_message_address=(received_message[3]-48)*100+(received_message[4]-48)*10+(received_message[5]-48)*1;




if (received_message_address!=this_node_address) {//onos command for a remote arduino node
strcpy(received_message_answer,"remote_#]");

/*
Serial.print(F("serial_number:"));
Serial.print(received_message_sn);
Serial.print(F("serial_number222:"));
Serial.print(serial_number);
Serial.println(F("end"));
*/
return; //return because i don't need to decode the message..i need to retrasmit it to the final node.
}


//[S_001dw06001_#]
if ( received_message_type_of_onos_cmd[0]=='d' && received_message_type_of_onos_cmd[1]=='w' ){

received_message_value=received_message[12]-48;
if (received_message_value>1){
strcpy(received_message_answer,"er0_status_#]");
return;
}

received_message_first_pin_used= ((received_message[8])-48)*10+( (received_message[9])-48)*1;

pinMode(received_message_first_pin_used, OUTPUT);
digitalWrite(received_message_first_pin_used, received_message_value);
strcpy(received_message_answer,"ok");
return;
}

//[S_001aw06125_#]
else if( received_message_type_of_onos_cmd[0]=='a' && received_message_type_of_onos_cmd[1]=='w' ){

received_message_value=(received_message[10]-48)*100+(received_message[11]-48)*10+(received_message[12]-48)*1;

if ((received_message_value<0)||(received_message_value>255)){ //status check
received_message_value=0;
//Serial.println(F("onos_cmd_value_error"));
strcpy(received_message_answer,"er0_status_#]");
return;
}

received_message_first_pin_used= ((received_message[8])-48)*10+( (received_message[9])-48)*1;
analogWrite(received_message_first_pin_used, received_message_value);
strcpy(received_message_answer,"ok");
return;
}


//[S_001sr04051_#]
else if( received_message_type_of_onos_cmd[0]=='s' && received_message_type_of_onos_cmd[1]=='r' ){

received_message_value=received_message[12]-48;

if (received_message_value>1){
strcpy(received_message_answer,"er0_status_#]");
return;
}

received_message_first_pin_used= ((received_message[8])-48)*10+( (received_message[9])-48)*1;
received_message_second_pin_used=((received_message[10])-48)*10+( (received_message[11])-48)*1;

pinMode(received_message_first_pin_used, OUTPUT);
pinMode(received_message_second_pin_used, OUTPUT);
//note to se a relay you have to transmit before the set pin and after the reset pin , the lessere first
// so for example received_message_first_pin_used =14 received_message_second_pin_used=15
digitalWrite(received_message_first_pin_used, !received_message_value);
digitalWrite(received_message_second_pin_used,received_message_value);
//attention with this only one relay per message can be setted!!!
//pins_to_reset1=pin_number_used;
//pins_to_reset2=second_pin_number_used;
delay(150);
digitalWrite(received_message_first_pin_used,0);
digitalWrite(received_message_second_pin_used,0);

strcpy(received_message_answer,"ok");
return;
}




/*
Serial.print(F("onos_cmd:"));
Serial.println(received_message_type_of_onos_cmd);
Serial.print(F("serial_number:"));
Serial.print(received_message_sn);
Serial.println(F("pin_used:"));
Serial.println(received_message_first_pin_used);
Serial.println(F("pin_used2:"));
Serial.println(received_message_second_pin_used);
Serial.print(F("message_value:"));
Serial.println(received_message_value);
*/








} // end of if message start with onos_






}// end of decodeOnosCmd()





void setup() {
Expand Down Expand Up @@ -258,30 +416,76 @@ void loop() {


//check if something was received (could be an interrupt from the radio)
if (radio.receiveDone())
{

if (radio.receiveDone()){
//print message received to serial
Serial.print('[');Serial.print(radio.SENDERID);Serial.print("] ");
Serial.print((char*)radio.DATA);
Serial.print(" [RX_RSSI:");Serial.print(radio.RSSI);Serial.print("]");


//check if received message contains Hello World
if (radio.DATA[0]=='o')
{

uint8_t message_copy[rx_msg_lenght+1];

strcpy(filtered_onos_message,"");

for (uint8_t counter0 = 0; counter0 <= rx_msg_lenght; counter0++) {
filtered_onos_message[counter0]=radio.DATA[counter0];
message_copy[counter0]=radio.DATA[counter0];
Serial.println(filtered_onos_message[counter0]);

//[S_001dw06001_#]
if (counter0<2){
continue;
}
if ( (filtered_onos_message[counter0-2]=='[')&&(filtered_onos_message[counter0-1]=='S')&&(filtered_onos_message[counter0]=='_') ){//
Serial.println("cmd start found-------------------------------");
onos_cmd_start_position=counter0-2;
}


if( (filtered_onos_message[counter0-2]=='_')&&(filtered_onos_message[counter0-1]=='#')&&(filtered_onos_message[counter0]==']') ){//
Serial.println("cmd end found-------------------------------");
onos_cmd_end_position=counter0-2;
break;// now the message has ended
}


}



if ( (onos_cmd_start_position!=-99) && (onos_cmd_end_position!=-99 )){
Serial.println("onos cmd found-------------------------------");
decodeOnosCmd(filtered_onos_message);

if( (received_message_answer[0]=='o')&&(received_message_answer[1]=='k')){//if the message was ok...
//check if sender wanted an ACK
if (radio.ACKRequested())
{
radio.sendACK();
Serial.println(" - ACK sent");
if (radio.ACKRequested()){
radio.sendACK();
Serial.println(" - ACK sent");
}

}
else{
Serial.println("error in message decode i will not send the ACK");
}
Blink(LED, 40, 3); //blink LED 3 times, 40ms between blinks
}

else{

Serial.println("serial_message_received_is_wrong");

}
else{
strcpy(received_message_answer,"nocmd0_#]");
Serial.println("error in message nocmd0_#]");
}




// Blink(LED, 40, 3); //blink LED 3 times, 40ms between blinks


}

radio.receiveDone(); //put radio in RX mode
Expand All @@ -298,3 +502,4 @@ void Blink(byte PIN, byte DELAY_MS, byte loops)
delay(DELAY_MS);
}
}

4 changes: 3 additions & 1 deletion arduino_code/onos_rf69_serial_transponder.ino
Original file line number Diff line number Diff line change
Expand Up @@ -641,7 +641,7 @@ void loop()
//target node Id, message as string or byte array, message length,retries, milliseconds before retry
//(uint8_t toAddress, const void* buffer, uint8_t bufferSize, uint8_t retries, uint8_t retryWaitTime)


/*
for (uint8_t rx_try = 0; rx_try <= 10; rx_try++) {
if (radio.receiveDone()){
Serial.print('[');Serial.print(radio.SENDERID);Serial.print("] ");
Expand All @@ -659,10 +659,12 @@ void loop()
if (radio.ACKRequested()){
radio.sendACK();
Serial.print(" - ACK sent");
}
*/


// Serial.println("OK");
Expand Down
2 changes: 1 addition & 1 deletion tests/problems_and_solutions
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@ I will use post instead that get message
3 bytes with "_#]" to close the message
example: [S_001ga3.05ProminiS0001_#]

OnosCenter will answer witha : [S_123sa3.05ProminiS0001_#] to tell the node to set its address to 123 for example
OnosCenter will answer with a : [S_123sa3.05ProminiS0001_#] to tell the node to set its address to 123 for example



Expand Down

0 comments on commit 095074b

Please sign in to comment.