@@ -111,6 +111,24 @@ float joint_states_eff[2] = {0.0, 0.0};
111
111
#define LED_LOW_BATTERY 2
112
112
#define LED_ROS_CONNECT 3
113
113
114
+ /* ******************************************************************************
115
+ * Declaration for Battery
116
+ *******************************************************************************/
117
+ #define BATTERY_POWER_OFF 0
118
+ #define BATTERY_POWER_STARTUP 1
119
+ #define BATTERY_POWER_NORMAL 2
120
+ #define BATTERY_POWER_CHECK 3
121
+ #define BATTERY_POWER_WARNNING 4
122
+
123
+ static bool setup_end = false ;
124
+ static uint8_t battery_voltage = 0 ;
125
+ static float battery_valtage_raw = 0 ;
126
+ static uint8_t battery_state = BATTERY_POWER_OFF;
127
+
128
+
129
+
130
+
131
+
114
132
/* ******************************************************************************
115
133
* Setup function
116
134
*******************************************************************************/
@@ -159,6 +177,8 @@ void setup()
159
177
pinMode (13 , OUTPUT);
160
178
161
179
SerialBT2.begin (57600 );
180
+
181
+ setup_end = true ;
162
182
}
163
183
164
184
/* ******************************************************************************
@@ -205,6 +225,9 @@ void loop()
205
225
// Show LED status
206
226
showLedStatus ();
207
227
228
+ // Update Voltage
229
+ updateVoltageCheck ();
230
+
208
231
// Call all the callbacks waiting to be called at that point in time
209
232
nh.spinOnce ();
210
233
}
@@ -792,3 +815,184 @@ void updateGyroCali(void)
792
815
gyro_cali = false ;
793
816
}
794
817
}
818
+
819
+ /* ******************************************************************************
820
+ * updateVoltageCheck
821
+ *******************************************************************************/
822
+ void updateVoltageCheck (void )
823
+ {
824
+ static bool startup = false ;
825
+ static int vol_index = 0 ;
826
+ static int prev_state = 0 ;
827
+ static int alram_state = 0 ;
828
+ static int check_index = 0 ;
829
+
830
+ int i;
831
+ float vol_sum;
832
+ float vol_value;
833
+
834
+ static uint32_t process_time[8 ] = {0 ,};
835
+ static float vol_value_tbl[10 ] = {0 ,};
836
+
837
+ float voltage_ref = 11.0 + 0.0 ;
838
+ float voltage_ref_warn = 11.0 + 0.0 ;
839
+
840
+
841
+ if (startup == false )
842
+ {
843
+ startup = true ;
844
+ for (i=0 ; i<8 ; i++)
845
+ {
846
+ process_time[i] = millis ();
847
+ }
848
+ }
849
+
850
+ if (millis ()-process_time[0 ] > 100 )
851
+ {
852
+ process_time[0 ] = millis ();
853
+
854
+ vol_value_tbl[vol_index] = getPowerInVoltage ();
855
+
856
+ vol_index++;
857
+ vol_index %= 10 ;
858
+
859
+ vol_sum = 0 ;
860
+ for (i=0 ; i<10 ; i++)
861
+ {
862
+ vol_sum += vol_value_tbl[i];
863
+ }
864
+ vol_value = vol_sum/10 ;
865
+ battery_valtage_raw = vol_value;
866
+
867
+ // Serial.println(vol_value);
868
+
869
+ battery_voltage = vol_value;
870
+ }
871
+
872
+
873
+ if (millis ()-process_time[1 ] > 1000 )
874
+ {
875
+ process_time[1 ] = millis ();
876
+
877
+ // Serial.println(battery_state);
878
+
879
+ switch (battery_state)
880
+ {
881
+ case BATTERY_POWER_OFF:
882
+ if (setup_end == true )
883
+ {
884
+ alram_state = 0 ;
885
+ if (battery_valtage_raw > 5.0 )
886
+ {
887
+ check_index = 0 ;
888
+ prev_state = battery_state;
889
+ battery_state = BATTERY_POWER_STARTUP;
890
+ }
891
+ else
892
+ {
893
+ noTone (BDPIN_BUZZER);
894
+ }
895
+ }
896
+ break ;
897
+
898
+ case BATTERY_POWER_STARTUP:
899
+ if (battery_valtage_raw > voltage_ref)
900
+ {
901
+ check_index = 0 ;
902
+ prev_state = battery_state;
903
+ battery_state = BATTERY_POWER_NORMAL;
904
+ setPowerOn ();
905
+ }
906
+
907
+ if (check_index < 5 )
908
+ {
909
+ check_index++;
910
+ }
911
+ else
912
+ {
913
+ if (battery_valtage_raw > 5.0 )
914
+ {
915
+ prev_state = battery_state;
916
+ battery_state = BATTERY_POWER_CHECK;
917
+ }
918
+ else
919
+ {
920
+ prev_state = battery_state;
921
+ battery_state = BATTERY_POWER_OFF;
922
+ }
923
+ }
924
+ break ;
925
+
926
+ case BATTERY_POWER_NORMAL:
927
+ alram_state = 0 ;
928
+ if (battery_valtage_raw < voltage_ref)
929
+ {
930
+ prev_state = battery_state;
931
+ battery_state = BATTERY_POWER_CHECK;
932
+ check_index = 0 ;
933
+ }
934
+ break ;
935
+
936
+ case BATTERY_POWER_CHECK:
937
+ if (check_index < 5 )
938
+ {
939
+ check_index++;
940
+ }
941
+ else
942
+ {
943
+ if (battery_valtage_raw < voltage_ref_warn)
944
+ {
945
+ setPowerOff ();
946
+ prev_state = battery_state;
947
+ battery_state = BATTERY_POWER_WARNNING;
948
+ }
949
+ }
950
+ if (battery_valtage_raw >= voltage_ref)
951
+ {
952
+ setPowerOn ();
953
+ prev_state = battery_state;
954
+ battery_state = BATTERY_POWER_NORMAL;
955
+ }
956
+ break ;
957
+
958
+ case BATTERY_POWER_WARNNING:
959
+ alram_state ^= 1 ;
960
+ if (alram_state)
961
+ {
962
+ tone (BDPIN_BUZZER, 1000 , 500 );
963
+ }
964
+
965
+ if (battery_valtage_raw > voltage_ref)
966
+ {
967
+ setPowerOn ();
968
+ prev_state = battery_state;
969
+ battery_state = BATTERY_POWER_NORMAL;
970
+ }
971
+ else
972
+ {
973
+ setPowerOff ();
974
+ }
975
+
976
+ if (battery_valtage_raw < 5.0 )
977
+ {
978
+ setPowerOff ();
979
+ prev_state = battery_state;
980
+ battery_state = BATTERY_POWER_OFF;
981
+ }
982
+ break ;
983
+
984
+ default :
985
+ break ;
986
+ }
987
+ }
988
+ }
989
+
990
+ void setPowerOn ()
991
+ {
992
+ digitalWrite (BDPIN_DXL_PWR_EN, HIGH);
993
+ }
994
+
995
+ void setPowerOff ()
996
+ {
997
+ digitalWrite (BDPIN_DXL_PWR_EN, LOW);
998
+ }
0 commit comments