Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
B
battery_monitor
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
labrobotica
drivers
battery_monitor
Commits
8dea78a1
Commit
8dea78a1
authored
13 years ago
by
Sergi Hernandez
Browse files
Options
Downloads
Patches
Plain Diff
Chnaged the driver to use the CFTDI class instead of the CRS232 class.
parent
2e52fd37
No related branches found
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
src/examples/segway_battery_test.cpp
+2
-1
2 additions, 1 deletion
src/examples/segway_battery_test.cpp
src/segway_battery.cpp
+60
-17
60 additions, 17 deletions
src/segway_battery.cpp
src/segway_battery.h
+3
-2
3 additions, 2 deletions
src/segway_battery.h
with
65 additions
and
20 deletions
src/examples/segway_battery_test.cpp
+
2
−
1
View file @
8dea78a1
...
...
@@ -2,7 +2,7 @@
#include
"exceptions.h"
#include
<iostream>
std
::
string
battery_dev
=
"
/dev/ttyUSB0
"
;
std
::
string
battery_dev
=
"
A600eByq
"
;
int
main
(
int
argc
,
char
*
argv
[])
{
...
...
@@ -12,6 +12,7 @@ int main(int argc, char *argv[])
{
try
{
std
::
cout
<<
"Battery voltage: "
<<
battery
.
get_current_voltage
()
<<
" V"
<<
std
::
endl
;
std
::
cout
<<
"Battery temperature: "
<<
battery
.
get_current_temperature
()
<<
" ºC"
<<
std
::
endl
;
std
::
cout
<<
"Input current: "
<<
battery
.
get_input_current
()
<<
" mA"
<<
std
::
endl
;
std
::
cout
<<
"Output current: "
<<
battery
.
get_output_current
()
<<
" mA"
<<
std
::
endl
;
std
::
cout
<<
"Remaining capacity: "
<<
battery
.
get_remaining_capacity
()
<<
" mAh"
<<
std
::
endl
;
...
...
This diff is collapsed.
Click to expand it.
src/segway_battery.cpp
+
60
−
17
View file @
8dea78a1
#include
"segway_battery.h"
#include
"exceptions.h"
#include
<iostream>
#include
<math.h>
CSegway_Battery
::
CSegway_Battery
(
std
::
string
&
serial_
dev
)
CSegway_Battery
::
CSegway_Battery
(
std
::
string
&
serial_
num
)
{
TRS232_config
serial_config
;
CFTDIServer
*
ftdi_server
=
CFTDIServer
::
instance
();
TFTDIconfig
ftdi_config
;
try
{
// create the serial port device to communicate with the battery
this
->
serial
=
new
CRS232
(
std
::
string
(
"battery_monitor_dev"
));
// open the serial device
this
->
serial
->
open
((
void
*
)
&
serial_dev
);
serial_config
.
baud
=
9600
;
serial_config
.
num_bits
=
8
;
serial_config
.
parity
=
none
;
serial_config
.
stop_bits
=
1
;
this
->
serial
->
config
(
&
serial_config
);
if
(
ftdi_server
->
get_num_devices
()
>
0
)
{
this
->
serial
=
ftdi_server
->
get_device
(
serial_num
);
if
(
this
->
serial
==
NULL
)
{
/* handle exceptions */
throw
CException
(
_HERE_
,
"No such device"
);
}
ftdi_config
.
baud_rate
=
9600
;
ftdi_config
.
word_length
=
8
;
ftdi_config
.
stop_bits
=
1
;
ftdi_config
.
parity
=
0
;
ftdi_config
.
read_timeout
=
1000
;
ftdi_config
.
write_timeout
=
1000
;
ftdi_config
.
latency_timer
=
16
;
this
->
serial
->
config
(
&
ftdi_config
);
}
// initialize the battery information
this
->
info
.
battery_voltage
=
0.0
;
this
->
info
.
temperature1
=
0.0
;
...
...
@@ -86,6 +97,7 @@ void CSegway_Battery::parse_packet(unsigned char *data, int len)
{
int
i
=
0
;
static
int
pos
=-
2
;
float
vt
=
0.0
,
res
=
0.0
,
k
=
0.0
;
static
unsigned
char
packet_data
[
31
];
for
(
i
=
0
;
i
<
len
;
i
++
)
...
...
@@ -111,6 +123,7 @@ void CSegway_Battery::parse_packet(unsigned char *data, int len)
if
(
pos
==
31
)
{
pos
=-
2
;
// convert voltage
this
->
info
.
battery_voltage
=
(
packet_data
[
0
])
+
(
packet_data
[
1
]
<<
8
);
this
->
info
.
battery_voltage
+=
(
packet_data
[
2
])
+
(
packet_data
[
3
]
<<
8
);
this
->
info
.
battery_voltage
+=
(
packet_data
[
4
])
+
(
packet_data
[
5
]
<<
8
);
...
...
@@ -120,10 +133,26 @@ void CSegway_Battery::parse_packet(unsigned char *data, int len)
this
->
info
.
battery_voltage
+=
(
packet_data
[
12
])
+
(
packet_data
[
13
]
<<
8
);
this
->
info
.
battery_voltage
+=
(
packet_data
[
14
])
+
(
packet_data
[
15
]
<<
8
);
this
->
info
.
battery_voltage
/=
6.5536
;
// convert temperature
vt
=
(
packet_data
[
16
]
+
packet_data
[
17
]
*
256
)
*
2500.0
/
32768.0
;
res
=
230000
*
vt
/
(
3300
-
vt
);
k
=
(
1
/
298.15
)
-
(
log
(
10000.0
/
res
)
/
3435.0
);
this
->
info
.
temperature1
=
(
1
-
273.15
*
k
)
/
k
;
vt
=
(
packet_data
[
18
]
+
packet_data
[
19
]
*
256
)
*
2500.0
/
32768.0
;
res
=
230000
*
vt
/
(
3300
-
vt
);
k
=
(
1
/
298.15
)
-
(
log
(
10000.0
/
res
)
/
3435.0
);
this
->
info
.
temperature2
=
(
1
-
273.15
*
k
)
/
k
;
// get the status
this
->
info
.
status
=
packet_data
[
20
];
// convert input current
this
->
info
.
current_in
=
packet_data
[
21
]
+
packet_data
[
22
]
*
256
;
// convert output current
this
->
info
.
current_out
=
packet_data
[
23
]
+
packet_data
[
24
]
*
256
;
// convert remaining capacity
this
->
info
.
rem_capacity
=
packet_data
[
25
]
+
packet_data
[
26
]
*
256
;
// convert time to charged
this
->
info
.
time_to_charged
=
packet_data
[
27
]
+
packet_data
[
28
]
*
256
;
// convert time to discharged
this
->
info
.
time_to_discharged
=
packet_data
[
29
]
+
packet_data
[
30
]
*
256
;
}
}
...
...
@@ -137,8 +166,7 @@ double CSegway_Battery::get_current_voltage(void)
double
CSegway_Battery
::
get_current_temperature
(
void
)
{
return
0.0
;
return
(
this
->
info
.
temperature1
+
this
->
info
.
temperature2
)
/
2.0
;
}
double
CSegway_Battery
::
get_input_current
(
void
)
...
...
@@ -168,27 +196,42 @@ double CSegway_Battery::get_time_to_discharged(void)
bool
CSegway_Battery
::
is_battery_present
(
void
)
{
return
false
;
if
(
this
->
info
.
status
&
0x01
)
return
true
;
else
return
false
;
}
bool
CSegway_Battery
::
is_charger_present
(
void
)
{
return
false
;
if
(
this
->
info
.
status
&
0x02
)
return
true
;
else
return
false
;
}
bool
CSegway_Battery
::
is_load_enabled
(
void
)
{
return
false
;
if
(
this
->
info
.
status
&
0x04
)
return
true
;
else
return
false
;
}
bool
CSegway_Battery
::
under_voltage_protection
(
void
)
{
return
false
;
if
(
this
->
info
.
status
&
0x08
)
return
true
;
else
return
false
;
}
bool
CSegway_Battery
::
over_voltage_protection
(
void
)
{
return
false
;
if
(
this
->
info
.
status
&
0x10
)
return
true
;
else
return
false
;
}
CSegway_Battery
::~
CSegway_Battery
()
...
...
This diff is collapsed.
Click to expand it.
src/segway_battery.h
+
3
−
2
View file @
8dea78a1
#ifndef _SEGWAY_BATTERY_H
#define _SEGWAY_BATTERY_H
#include
"rs232.h"
#include
"ftdiserver.h"
#include
"ftdimodule.h"
#include
"threadserver.h"
#include
"eventserver.h"
#include
"mutex.h"
...
...
@@ -28,7 +29,7 @@ class CSegway_Battery
{
private:
// serial device object
C
RS232
*
serial
;
C
FTDI
*
serial
;
// thread attributes
CThreadServer
*
thread_server
;
std
::
string
battery_monitor_thread_id
;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment