main.cpp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include <Arduino.h>
  2. #include <SimpleFOC.h>
  3. #include <HX711.h>
  4. #if SK_LEDS
  5. #include <FastLED.h>
  6. #endif
  7. #if SK_DISPLAY
  8. #include "display_task.h"
  9. #endif
  10. #include "interface_task.h"
  11. #include "motor_task.h"
  12. #include "tlv_sensor.h"
  13. #include "util.h"
  14. #if SK_DISPLAY
  15. DisplayTask display_task = DisplayTask(1);
  16. #endif
  17. MotorTask motor_task = MotorTask(0);
  18. InterfaceTask interface_task = InterfaceTask(1, motor_task);
  19. #if SK_LEDS
  20. CRGB leds[NUM_LEDS];
  21. #endif
  22. HX711 scale;
  23. static QueueHandle_t knob_state_debug_queue;
  24. void setup() {
  25. Serial.begin(115200);
  26. motor_task.begin();
  27. interface_task.begin();
  28. #if SK_DISPLAY
  29. display_task.begin();
  30. // Connect display to motor_task's knob state feed
  31. motor_task.addListener(display_task.getKnobStateQueue());
  32. #endif
  33. // Create a queue and register it with motor_task to print knob state to serial (see loop() below)
  34. knob_state_debug_queue = xQueueCreate(1, sizeof(KnobState));
  35. assert(knob_state_debug_queue != NULL);
  36. motor_task.addListener(knob_state_debug_queue);
  37. #if SK_LEDS
  38. FastLED.addLeds<SK6812, PIN_LED_DATA, GRB>(leds, NUM_LEDS);
  39. #endif
  40. scale.begin(38, 2);
  41. }
  42. static KnobState state = {};
  43. uint32_t last_debug;
  44. void loop() {
  45. // Print any new state, at most 5 times per second
  46. if (millis() - last_debug > 200 && xQueueReceive(knob_state_debug_queue, &state, portMAX_DELAY) == pdTRUE) {
  47. Serial.println(state.current_position);
  48. last_debug = millis();
  49. }
  50. if (scale.wait_ready_timeout(100)) {
  51. long reading = scale.read();
  52. Serial.print("HX711 reading: ");
  53. Serial.println(reading);
  54. long lower = 950000;
  55. long upper = 2500000;
  56. long value = CLAMP(reading, lower, upper);
  57. float unit = 1. * (value - lower) / (upper - lower);
  58. for (uint8_t i = 0; i < NUM_LEDS; i++) {
  59. leds[i].setHSV(255 * unit, 255, 128);
  60. }
  61. FastLED.show();
  62. } else {
  63. Serial.println("HX711 not found.");
  64. for (uint8_t i = 0; i < NUM_LEDS; i++) {
  65. leds[i] = CRGB::Red;
  66. }
  67. FastLED.show();
  68. }
  69. }