Scott Bezek преди 4 години
родител
ревизия
a33c46b29b
променени са 4 файла, в които са добавени 80 реда и са изтрити 55 реда
  1. 1 1
      firmware/platformio.ini
  2. 72 50
      firmware/src/interface_task.cpp
  3. 7 1
      firmware/src/interface_task.h
  4. 0 3
      firmware/src/main.cpp

+ 1 - 1
firmware/platformio.ini

@@ -41,4 +41,4 @@ build_flags =
   -DTFT_BL=4
   -DLOAD_GLCD=1
   -DLOAD_GFXFF=1
-  -DSPI_FREQUENCY=50000000
+  -DSPI_FREQUENCY=40000000

+ 72 - 50
firmware/src/interface_task.cpp

@@ -1,70 +1,92 @@
+#include <AceButton.h>
 #include "interface_task.h"
 
+using namespace ace_button;
+
 #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() {}
 
 void InterfaceTask::run() {
-    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,
-        },
-    };
+    AceButton button(36);
+    pinMode(36, INPUT);
+    button.getButtonConfig()->setIEventHandler(this);
 
-    int current_config = 0;
-
-    motor_task_.setConfig(configs[current_config]);
+    motor_task_.setConfig(configs[0]);
     while (1) {
+        button.check();
         if (Serial.available()) {
             int v = Serial.read();
             if (v == ' ') {
-                current_config = (current_config + 1) % COUNT_OF(configs);
-                Serial.printf("Chaning config to %d\n", current_config);
-                motor_task_.setConfig(configs[current_config]);
+                nextConfig();
             }
         }
+        // Serial.println(digitalRead(36));
         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_]);
+}

+ 7 - 1
firmware/src/interface_task.h

@@ -1,20 +1,26 @@
 #pragma once
 
+#include <AceButton.h>
 #include <Arduino.h>
 
 #include "motor_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()
 
     public:
         InterfaceTask(const uint8_t task_core, MotorTask& motor_task);
         ~InterfaceTask();
 
+        void handleEvent(ace_button::AceButton* button, uint8_t event_type, uint8_t button_state) override;
+
     protected:
         void run();
 
     private:
         MotorTask& motor_task_;
+        int current_config_ = 0;
+
+        void nextConfig();
 };

+ 0 - 3
firmware/src/main.cpp

@@ -1,4 +1,3 @@
-#include <AceButton.h>
 #include <Arduino.h>
 #include <FastLED.h>
 #include <SimpleFOC.h>
@@ -9,8 +8,6 @@
 #include "motor_task.h"
 #include "tlv_sensor.h"
 
-using namespace ace_button;
-
 DisplayTask display_task = DisplayTask(1);
 MotorTask motor_task = MotorTask(0, display_task);
 InterfaceTask interface_task = InterfaceTask(1, motor_task);