Skip to content

Commit

Permalink
still working on radio part
Browse files Browse the repository at this point in the history
  • Loading branch information
marco committed Dec 29, 2016
1 parent e9d315c commit c8ebac1
Show file tree
Hide file tree
Showing 13 changed files with 2,112 additions and 880 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -202,11 +202,12 @@ boolean changeObjStatus(char obj_number,int status_to_set){
digitalWrite(relay1_reset_pin,!status_to_set);
digitalWrite(relay2_set_pin,status_to_set);
digitalWrite(relay2_reset_pin,!status_to_set);
delay(25);
delay(210);
digitalWrite(relay1_set_pin,0);
digitalWrite(relay1_reset_pin,0);
digitalWrite(relay2_set_pin,0);
digitalWrite(relay2_reset_pin,0);

digitalWrite(obj_led_pin,status_to_set);
main_obj_state=status_to_set;
return(1);
Expand Down
143 changes: 51 additions & 92 deletions arduino_code/onos_rf69_serial_transponder.ino
Original file line number Diff line number Diff line change
Expand Up @@ -492,6 +492,20 @@ void decodeOnosCmd(const char *received_message){



void serialEvent() {

/*
SerialEvent occurs whenever a new data comes in the
hardware serial RX. This routine is run between each
time loop() runs, so using delay inside loop can delay
response. Multiple bytes of data may be available.
*/

serial_msg_to_decode_is_avaible=checkAndReceiveSerialMsg();



}


boolean checkAndReceiveSerialMsg(){
Expand Down Expand Up @@ -530,7 +544,7 @@ boolean checkAndReceiveSerialMsg(){
//if (counter==0){
delayMicroseconds(210);//210 the serial doesnt work without this delay... to change if you change baud rate (increase with lower baud rate)
//}
data_from_serial[counter] = Serial.read();
data_from_serial[counter] =(char) Serial.read();

if ( millis()>timeout){
Serial.println(F("[S_serial_timeout---------------------------------_#]"));
Expand Down Expand Up @@ -569,41 +583,52 @@ boolean checkAndReceiveSerialMsg(){
}


if( (data_from_serial[counter-2]=='_')&&(data_from_serial[counter-1]=='#')&&(data_from_serial[counter]==']') ){//
if( (data_from_serial[counter-2]=='_')&&(data_from_serial[counter-1]=='#')&&(data_from_serial[counter]==']')&&(onos_cmd_start_position!=-99) ){// onos cmd found
// Serial.println("cmd end found-------------------------------");
onos_cmd_end_position=counter-2;
break; //i have found a cmd ..I stop to listen to other cmd and analyze it..
}

memset(filtered_onos_message,0,sizeof(filtered_onos_message)); //to clear the array

counter=counter+1;
for (uint8_t pointer = 0; pointer <= rx_msg_lenght; pointer++) {
filtered_onos_message[pointer]=data_from_serial[onos_cmd_start_position+pointer];
//Serial.println(filtered_onos_message[pointer]);
if ((filtered_onos_message[pointer-1]=='#')&&(filtered_onos_message[pointer]==']') ) {//
break;
}

}// end of while rx receive
}

if ((message_to_decode_avaible==1)&&(onos_cmd_start_position!=-99) && (onos_cmd_end_position!=-99 )){

uint8_t message_copy[rx_msg_lenght+1];
decodeOnosCmd(filtered_onos_message);
if ( strcmp(received_message_answer,"[S_remote_#]")==0){
ForwardSerialMessageToRadio();
}
else {
sendSerialAnswerFromSerialMsg();
}

// strcpy(filtered_onos_message,""); //clear the filtered_onos_message array
memset(filtered_onos_message,0,sizeof(filtered_onos_message)); //to clear the array

for (uint8_t pointer = 0; pointer <= rx_msg_lenght; pointer++) {
filtered_onos_message[pointer]=data_from_serial[onos_cmd_start_position+pointer];
message_copy[pointer]=data_from_serial[onos_cmd_start_position+pointer];
//Serial.println(filtered_onos_message[pointer]);
if ((filtered_onos_message[pointer-1]=='#')&&(filtered_onos_message[pointer]==']') ) {//
break;
if (Serial.available() > 0){
counter=0;
timeout=millis()+200; //reset the timeout on each onos cmd
continue; //i have found a cmd ..but, i will look for other ones..
}
else{
return(1);
}

}

}//closed if onocmd found


counter=counter+1;

}// end of while rx receive


return(1);// onos cmd found
}

strcpy(received_message_answer,"[S_nocmd0_#]");

sendSerialAnswerFromSerialMsg();
return(0);//no cmd found


Expand All @@ -619,48 +644,24 @@ boolean checkAndReceiveSerialMsg(){


boolean ForwardSerialMessageToRadio(){

memset(received_message_answer,0,sizeof(received_message_answer)); //to clear the array
if (radio.sendWithRetry(received_message_address, filtered_onos_message, strlen(filtered_onos_message),radioRetry,radioTxTimeout)) {
// note that the max delay time is 255..because is uint8_t
//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("] ");
Serial.print((char*)radio.DATA);
Serial.print(" [RX_RSSI:");Serial.print(radio.RSSI);Serial.print("]");
Serial.println();
rx_try=99;
}
else{
delayMicroseconds(100);
}
}
if (radio.ACKRequested()){
radio.sendACK();
Serial.print(" - ACK sent");
}
*/


// Serial.println("OK");
strcpy(received_message_answer,"ok_#]");
radio.receiveDone(); //put radio in RX mode
sendSerialAnswerFromSerialMsg();
return(1);
}

else{// failed to contact radio node or radion node
// Serial.println("sendtoWait failed");
strcpy(received_message_answer,"[S_ertx1_#]");
radio.receiveDone(); //put radio in RX mode
sendSerialAnswerFromSerialMsg();
delay(10);//delay to allow the remote node to talk after a transmission failure
return(0);
}

Expand Down Expand Up @@ -689,6 +690,7 @@ void sendSerialAnswerFromSerialMsg(){
}
}
Serial.print('\n');
Serial.flush(); //make sure all serial data is clocked out
sync_time=millis();
enable_answer_back=0;
// the answer will be : [S_ok+ message received
Expand All @@ -699,6 +701,7 @@ void sendSerialAnswerFromSerialMsg(){

Serial.print(received_message_answer);
Serial.print('\n');
Serial.flush(); //make sure all serial data is clocked out

}

Expand Down Expand Up @@ -906,50 +909,6 @@ sync:

restart:

//strcpy(data_from_serial,"");
//strcpy(filtered_onos_message,"");

memset(data_from_serial,0,sizeof(data_from_serial)); //to clear the array
memset(filtered_onos_message,0,sizeof(filtered_onos_message)); //to clear the array


/*
if (skipUartRxMsg<0){ // skip uart message to allow incoming radio msg to be received
skipUartRxMsg=0;
goto radioRxCheck;
}
skipUartRxMsg=skipUartRxMsg+1;
*/
serial_msg_to_decode_is_avaible=checkAndReceiveSerialMsg();


if (serial_msg_to_decode_is_avaible){
decodeOnosCmd(filtered_onos_message);
if ( strcmp(received_message_answer,"[S_remote_#]")==0){
ForwardSerialMessageToRadio();
}
sendSerialAnswerFromSerialMsg();
}

else if(enable_answer_back==1) {
Serial.print(received_message_answer);
Serial.print('\n');
Serial.flush(); //make sure all serial data is clocked out
enable_answer_back=0;
}

/*
if (Serial.available() > 0) {
goto restart;
}
*/




radioRxCheck:
radio_msg_to_decode_is_avaible=checkAndHandleIncomingRadioMsg();
Expand Down
2 changes: 2 additions & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -612,6 +612,8 @@ versione4.53 iniziato ad usare pythonserial come libraria dopo test fatti con
started using memset(filtered_onos_message,0,sizeof(filtered_onos_message));
to clear the arrays in the arduino programs,before i used strcpy(filtered_onos_message,"") that doesn't work well
reduced the radio.sendWithRetry timeout from 200ms t0 75ms and increased the retry from 1 to 3
modified a lot of parts...now the radio communication is faster and more stable (tried only one node)


(110, 'Connection timed out');;;
main error in handle_new_query_to_remote_node_thread;;;
Expand Down
2 changes: 1 addition & 1 deletion scripts_folder/config_files/cfg.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"accept_only_from_white_list": 0,
"enable_mail_output_service": 1,
"enable_mail_service": 1,
"enable_mail_service": 0,
"enable_onos_auto_update": "yes",
"logTimeout": 15,
"login_required": 0,
Expand Down

0 comments on commit c8ebac1

Please sign in to comment.