Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/us charger #8

Merged
merged 6 commits into from
Apr 25, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 23 additions & 4 deletions main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -399,6 +399,15 @@ class auto_charger { // Variables Half-Implemented (Not Thermistors ADC)
set_enable(false);
send_heartbeat();
}
bool is_charger_ready() const {
if (connector_v > (CHARGING_VOLTAGE * 0.9)) {
LOG("charger ready voltage:%f.\n", connector_v);
return true;
} else {
LOG("connector_v:%f THRESH:%f\n", connector_v, (CHARGING_VOLTAGE * 0.9));
return false;
}
}
void get_connector_temperature(int &positive, int &negative) const {
positive = clamp(static_cast<int>(connector_temp[0]), 0, 255);
negative = clamp(static_cast<int>(connector_temp[1]), 0, 255);
Expand Down Expand Up @@ -475,7 +484,15 @@ class auto_charger { // Variables Half-Implemented (Not Thermistors ADC)
send_heartbeat();
}
void send_heartbeat() { /* Creates the message to send to the robot using the "compose" function below */
uint8_t buf[8], param[3]{++heartbeat_counter, static_cast<uint8_t>(sw.read()), rsoc}; // Message composed of 8 bytes, 3 bytes parameters -- Declaration
uint8_t sw_state{0};

if (is_connected()) {
sw_state = 1;
} else {
sw_state = 0;
}

uint8_t buf[8], param[3]{++heartbeat_counter, sw_state, rsoc}; // Message composed of 8 bytes, 3 bytes parameters -- Declaration
serial_message::compose(buf, serial_message::HEARTBEAT, param);
#ifndef SERIAL_DEBUG
serial.write(buf, sizeof buf);
Expand Down Expand Up @@ -882,8 +899,10 @@ class state_controller { // Variables Implemented
LOG("plugged to manual charger\n");
set_new_state(POWER_STATE::MANUAL_CHARGE);
} else if (!charge_guard_asserted && ac.is_docked() && bmu.is_chargable()) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ac.is_docked()とis_charger_ready()の2つで電圧を評価しているのがやや気持ち悪い感じがします。is_docked()が本来は充電中ではない充電器が出している5Vを検出するための関数であるのに、目的外の利用になっているような感じです。
ただ弊害はなく、is_dockedを消しちゃうと温度センサの評価が無くなったりもするので、このまま修正しなくていいのかなと思いました。

LOG("docked to auto charger\n");
set_new_state(POWER_STATE::AUTO_CHARGE);
if (ac.is_charger_ready() == true) {
LOG("docked to auto charger\n");
set_new_state(POWER_STATE::AUTO_CHARGE);
}
}
break;
case POWER_STATE::AUTO_CHARGE:
Expand Down Expand Up @@ -1105,7 +1124,7 @@ class state_controller { // Variables Implemented
watchdog.kick();
}
void poll_10s() {
uint8_t buf[8]{'2', '1', '0'}; // version
uint8_t buf[8]{'2', '2', '0'}; // version
can.send(CANMessage{0x203, buf});
}
can_driver can;
Expand Down
Loading