Skip to content

Commit 9bccf18

Browse files
authored
Merge pull request #41 from ROBOTIS-GIT/develop
merge from develop
2 parents d663e5c + 9d0ca75 commit 9bccf18

File tree

4 files changed

+440
-1
lines changed

4 files changed

+440
-1
lines changed

arduino/opencr_arduino/opencr/libraries/turtlebot3/turtlebot3_burger/turtlebot3_core/turtlebot3_core.ino

+204
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,24 @@ float joint_states_eff[2] = {0.0, 0.0};
111111
#define LED_LOW_BATTERY 2
112112
#define LED_ROS_CONNECT 3
113113

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+
114132
/*******************************************************************************
115133
* Setup function
116134
*******************************************************************************/
@@ -159,6 +177,8 @@ void setup()
159177
pinMode(13, OUTPUT);
160178

161179
SerialBT2.begin(57600);
180+
181+
setup_end = true;
162182
}
163183

164184
/*******************************************************************************
@@ -205,6 +225,9 @@ void loop()
205225
// Show LED status
206226
showLedStatus();
207227

228+
// Update Voltage
229+
updateVoltageCheck();
230+
208231
// Call all the callbacks waiting to be called at that point in time
209232
nh.spinOnce();
210233
}
@@ -792,3 +815,184 @@ void updateGyroCali(void)
792815
gyro_cali = false;
793816
}
794817
}
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

Comments
 (0)