@@ -119,6 +119,7 @@ const char STEPSPER_ROTATOR_CMD = 't'; // GetSteps per rotation
119119const char SYNC_ROTATOR_CMD = ' s' ; // Sync to telescope
120120const char VERSION_ROTATOR_GET = ' v' ; // Get Version string
121121const char VOLTS_ROTATOR_CMD = ' k' ; // Get volts and get/set cutoff
122+ const char INIT_XBEE = ' x' ; // force a ConfigXBee
122123
123124const char ACCELERATION_SHUTTER_CMD = ' E' ; // Get/Set stepper acceleration
124125const char CLOSE_SHUTTER_CMD = ' C' ; // Close shutter
@@ -163,11 +164,15 @@ void loop()
163164
164165 if (!XbeeStarted) {
165166 if (!Rotator.radioIsConfigured && !isConfiguringWireless) {
167+ DBPrint (" Xbee reconfiguring" );
166168 StartWirelessConfig ();
167- delay (3000 );
169+ DBPrint (" Rotator.radioIsConfigured : " + String (Rotator.radioIsConfigured ));
170+ DBPrint (" isConfiguringWireless : " + String (isConfiguringWireless));
168171 }
169172 else if (Rotator.radioIsConfigured ) {
170173 XbeeStarted = true ;
174+ wirelessBuffer = " " ;
175+ DBPrint (" Radio configured" );
171176 SendHello ();
172177 }
173178 }
@@ -188,31 +193,37 @@ void loop()
188193// <SUMMARY>Start configuration routine then send Hello broadcast</SUMMARY>
189194void StartWirelessConfig ()
190195{
191- delay (10000 );
196+ Computer.println (" Xbee configuration started" );
197+ delay (1100 ); // guard time before and after
192198 isConfiguringWireless = true ;
199+ DBPrint (" Sending +++" );
193200 Wireless.print (" +++" );
194- delay (1000 );
201+ delay (1100 );
195202}
196203
197204void ConfigXBee (String result)
198205{
206+ DBPrint (" [ConfigXBee]" );
207+
199208 if (configStep == 0 ) {
200209 // ATString = "ATCE1,ID7734,AP0,SM0,RO0,WR,CN";
201210 // CE1 for coordinator, rotation MY is 0,
202- ATString = " ATCE1,ID7734,CH0C,MY0,DH0,DLFFFF,AP0,SM0,WR,BD7 ,CN" ;
211+ ATString = " ATCE1,ID7734,CH0C,MY0,DH0,DLFFFF,AP0,SM0,BD3,WR ,CN" ;
203212 Wireless.println (ATString);
213+ DBPrint (" Sending : " + ATString);
204214 }
205215 DBPrint (" Result " + String (configStep) + " :" + result);
206216
207- if (configStep > 5 ) {
208- // switch to 115200
209- Wireless.begin (115200 );
210- DBPrint (" Config finished" );
217+ if (configStep > 9 ) {
211218 isConfiguringWireless = false ;
212219 Rotator.radioIsConfigured = true ;
213220 XbeeStarted = true ;
214221 Rotator.SaveToEEProm ();
215- delay (4000 );
222+ delay (10000 );
223+ Computer.print (" Xbee configuration finished" );
224+ while (Wireless.available () > 0 ) {
225+ Wireless.read ();
226+ }
216227 }
217228 configStep++;
218229}
@@ -546,6 +557,19 @@ void ProcessSerialCommand()
546557 case RAIN_SHUTTER_GET:
547558 serialMessage = String (RAIN_SHUTTER_GET) + String (bIsRaining ? " 1" : " 0" );
548559 break ;
560+
561+ case INIT_XBEE:
562+ localString = String (INIT_XBEE);
563+ Rotator.radioIsConfigured = false ;
564+ isConfiguringWireless = false ;
565+ XbeeStarted = false ;
566+ configStep = 0 ;
567+ serialMessage = localString;
568+ Wireless.print (localString + " #" );
569+ ReceiveWireless ();
570+ DBPrint (" trying to reconfigure radio" );
571+ break ;
572+
549573 #pragma endregion
550574
551575 #pragma region Shutter Commands
@@ -674,7 +698,7 @@ void ProcessSerialCommand()
674698 localString = String (VOLTS_SHUTTER_CMD);
675699 wirelessMessage = localString;
676700 if (hasValue)
677- wirelessMessage += value;
701+ wirelessMessage += String ( value) ;
678702
679703 Wireless.print (wirelessMessage + " #" );
680704 ReceiveWireless ();
@@ -737,26 +761,40 @@ int ReceiveWireless()
737761 char wirelessCharacter;
738762
739763 wirelessBuffer = " " ;
764+ if (isConfiguringWireless) {
765+ DBPrint (" [ReceiveWireless] isConfiguringWireless : " + String (isConfiguringWireless));
766+ // read the response
767+ do {
768+ wirelessCharacter = Wireless.read ();
769+ if (wirelessCharacter != ' \r ' && wirelessCharacter != -1 ) {
770+ wirelessBuffer += String (wirelessCharacter);
771+ }
772+ } while (wirelessCharacter != ' \r ' );
773+
774+ DBPrint (" [ReceiveWireless] wirelessBuffer = " + wirelessBuffer);
775+
776+ ConfigXBee (wirelessBuffer);
777+ return ;
778+ }
779+
740780 // wait for response, timeout after MAX_TIMEOUT times 10ms
741781 while (Wireless.available () == 0 ) {
742782 delay (10 );
743783 timeout++;
744- if (timeout >= MAX_TIMEOUT)
784+ if (timeout >= MAX_TIMEOUT) {
745785 return ERR_NO_DATA;
786+ }
746787 }
747788
748789 // read the response
749790 do {
750791 wirelessCharacter = Wireless.read ();
751- if (wirelessCharacter != ERR_NO_DATA && wirelessCharacter != ' #' ) {
752- wirelessBuffer += wirelessCharacter;
792+ if (wirelessCharacter != ERR_NO_DATA && wirelessCharacter != ' #' && wirelessCharacter != - 1 ) {
793+ wirelessBuffer += String ( wirelessCharacter) ;
753794 }
754795 } while (wirelessCharacter != ' #' );
755796
756- if (isConfiguringWireless) {
757- ConfigXBee (wirelessBuffer);
758- }
759- else if (wirelessBuffer.length () > 0 ) {
797+ if (wirelessBuffer.length () > 0 ) {
760798 ProcessWireless ();
761799 }
762800 return OK;
0 commit comments