Add button support
This commit is contained in:
@@ -41,4 +41,4 @@ build_flags =
|
|||||||
-DTFT_BL=4
|
-DTFT_BL=4
|
||||||
-DLOAD_GLCD=1
|
-DLOAD_GLCD=1
|
||||||
-DLOAD_GFXFF=1
|
-DLOAD_GFXFF=1
|
||||||
-DSPI_FREQUENCY=50000000
|
-DSPI_FREQUENCY=40000000
|
||||||
|
|||||||
@@ -1,70 +1,92 @@
|
|||||||
|
#include <AceButton.h>
|
||||||
#include "interface_task.h"
|
#include "interface_task.h"
|
||||||
|
|
||||||
|
using namespace ace_button;
|
||||||
|
|
||||||
#define COUNT_OF(A) (sizeof(A) / sizeof(A[0]))
|
#define COUNT_OF(A) (sizeof(A) / sizeof(A[0]))
|
||||||
|
|
||||||
|
static KnobConfig configs[] = {
|
||||||
|
{
|
||||||
|
.num_positions = 0,
|
||||||
|
.position = 0,
|
||||||
|
.position_width_radians = 10 * PI / 180,
|
||||||
|
.detent_strength_unit = 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.num_positions = 11,
|
||||||
|
.position = 0,
|
||||||
|
.position_width_radians = 10 * PI / 180,
|
||||||
|
.detent_strength_unit = 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.num_positions = 2,
|
||||||
|
.position = 0,
|
||||||
|
.position_width_radians = 60 * PI / 180,
|
||||||
|
.detent_strength_unit = 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.num_positions = 256,
|
||||||
|
.position = 127,
|
||||||
|
.position_width_radians = 1 * PI / 180,
|
||||||
|
.detent_strength_unit = 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.num_positions = 256,
|
||||||
|
.position = 127,
|
||||||
|
.position_width_radians = 1 * PI / 180,
|
||||||
|
.detent_strength_unit = 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.num_positions = 32,
|
||||||
|
.position = 0,
|
||||||
|
.position_width_radians = 8.225806452 * PI / 180,
|
||||||
|
.detent_strength_unit = 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.num_positions = 32,
|
||||||
|
.position = 0,
|
||||||
|
.position_width_radians = 8.225806452 * PI / 180,
|
||||||
|
.detent_strength_unit = 0.1,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
InterfaceTask::InterfaceTask(const uint8_t task_core, MotorTask& motor_task) : Task{"Interface", 8192, 1, task_core}, motor_task_(motor_task) {
|
InterfaceTask::InterfaceTask(const uint8_t task_core, MotorTask& motor_task) : Task{"Interface", 8192, 1, task_core}, motor_task_(motor_task) {
|
||||||
}
|
}
|
||||||
|
|
||||||
InterfaceTask::~InterfaceTask() {}
|
InterfaceTask::~InterfaceTask() {}
|
||||||
|
|
||||||
void InterfaceTask::run() {
|
void InterfaceTask::run() {
|
||||||
KnobConfig configs[] = {
|
AceButton button(36);
|
||||||
{
|
pinMode(36, INPUT);
|
||||||
.num_positions = 0,
|
button.getButtonConfig()->setIEventHandler(this);
|
||||||
.position = 0,
|
|
||||||
.position_width_radians = 10 * PI / 180,
|
|
||||||
.detent_strength_unit = 0,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.num_positions = 11,
|
|
||||||
.position = 0,
|
|
||||||
.position_width_radians = 10 * PI / 180,
|
|
||||||
.detent_strength_unit = 0,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.num_positions = 2,
|
|
||||||
.position = 0,
|
|
||||||
.position_width_radians = 60 * PI / 180,
|
|
||||||
.detent_strength_unit = 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.num_positions = 256,
|
|
||||||
.position = 127,
|
|
||||||
.position_width_radians = 1 * PI / 180,
|
|
||||||
.detent_strength_unit = 0,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.num_positions = 256,
|
|
||||||
.position = 127,
|
|
||||||
.position_width_radians = 1 * PI / 180,
|
|
||||||
.detent_strength_unit = 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.num_positions = 32,
|
|
||||||
.position = 0,
|
|
||||||
.position_width_radians = 8.225806452 * PI / 180,
|
|
||||||
.detent_strength_unit = 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.num_positions = 32,
|
|
||||||
.position = 0,
|
|
||||||
.position_width_radians = 8.225806452 * PI / 180,
|
|
||||||
.detent_strength_unit = 0.1,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
int current_config = 0;
|
motor_task_.setConfig(configs[0]);
|
||||||
|
|
||||||
motor_task_.setConfig(configs[current_config]);
|
|
||||||
while (1) {
|
while (1) {
|
||||||
|
button.check();
|
||||||
if (Serial.available()) {
|
if (Serial.available()) {
|
||||||
int v = Serial.read();
|
int v = Serial.read();
|
||||||
if (v == ' ') {
|
if (v == ' ') {
|
||||||
current_config = (current_config + 1) % COUNT_OF(configs);
|
nextConfig();
|
||||||
Serial.printf("Chaning config to %d\n", current_config);
|
|
||||||
motor_task_.setConfig(configs[current_config]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Serial.println(digitalRead(36));
|
||||||
delay(10);
|
delay(10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InterfaceTask::handleEvent(AceButton* button, uint8_t event_type, uint8_t button_state) {
|
||||||
|
Serial.println("EVENT!");
|
||||||
|
switch (event_type) {
|
||||||
|
case AceButton::kEventPressed:
|
||||||
|
nextConfig();
|
||||||
|
break;
|
||||||
|
case AceButton::kEventReleased:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void InterfaceTask::nextConfig() {
|
||||||
|
current_config_ = (current_config_ + 1) % COUNT_OF(configs);
|
||||||
|
Serial.printf("Changing config to %d\n", current_config_);
|
||||||
|
motor_task_.setConfig(configs[current_config_]);
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,20 +1,26 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <AceButton.h>
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
#include "motor_task.h"
|
#include "motor_task.h"
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
|
|
||||||
class InterfaceTask : public Task<InterfaceTask> {
|
class InterfaceTask : public Task<InterfaceTask>, public ace_button::IEventHandler {
|
||||||
friend class Task<InterfaceTask>; // Allow base Task to invoke protected run()
|
friend class Task<InterfaceTask>; // Allow base Task to invoke protected run()
|
||||||
|
|
||||||
public:
|
public:
|
||||||
InterfaceTask(const uint8_t task_core, MotorTask& motor_task);
|
InterfaceTask(const uint8_t task_core, MotorTask& motor_task);
|
||||||
~InterfaceTask();
|
~InterfaceTask();
|
||||||
|
|
||||||
|
void handleEvent(ace_button::AceButton* button, uint8_t event_type, uint8_t button_state) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void run();
|
void run();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
MotorTask& motor_task_;
|
MotorTask& motor_task_;
|
||||||
|
int current_config_ = 0;
|
||||||
|
|
||||||
|
void nextConfig();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
#include <AceButton.h>
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <FastLED.h>
|
#include <FastLED.h>
|
||||||
#include <SimpleFOC.h>
|
#include <SimpleFOC.h>
|
||||||
@@ -9,8 +8,6 @@
|
|||||||
#include "motor_task.h"
|
#include "motor_task.h"
|
||||||
#include "tlv_sensor.h"
|
#include "tlv_sensor.h"
|
||||||
|
|
||||||
using namespace ace_button;
|
|
||||||
|
|
||||||
DisplayTask display_task = DisplayTask(1);
|
DisplayTask display_task = DisplayTask(1);
|
||||||
MotorTask motor_task = MotorTask(0, display_task);
|
MotorTask motor_task = MotorTask(0, display_task);
|
||||||
InterfaceTask interface_task = InterfaceTask(1, motor_task);
|
InterfaceTask interface_task = InterfaceTask(1, motor_task);
|
||||||
|
|||||||
Reference in New Issue
Block a user