[+] Multithreading
This commit is contained in:
+32
-4
@@ -4,6 +4,9 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "Adafruit_NeoPixel.h"
|
#include "Adafruit_NeoPixel.h"
|
||||||
#include "Encoder.h"
|
#include "Encoder.h"
|
||||||
|
#include "main.h"
|
||||||
|
#include <FreeRTOS.h>
|
||||||
|
#include <task.h>
|
||||||
|
|
||||||
// ========================================
|
// ========================================
|
||||||
// Code
|
// Code
|
||||||
@@ -62,6 +65,8 @@ u32 pot_states[P_PINS_PER_MUX];
|
|||||||
Encoder *encoders[P_NUM_ROTARY];
|
Encoder *encoders[P_NUM_ROTARY];
|
||||||
int encoder_states[P_NUM_ROTARY];
|
int encoder_states[P_NUM_ROTARY];
|
||||||
|
|
||||||
|
TaskHandle_t thread1, thread2;
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
// Initialize pins
|
// Initialize pins
|
||||||
@@ -93,6 +98,9 @@ void setup()
|
|||||||
p_led_key.begin();
|
p_led_key.begin();
|
||||||
p_led_knob.begin();
|
p_led_knob.begin();
|
||||||
p_led_rotary.begin();
|
p_led_rotary.begin();
|
||||||
|
|
||||||
|
// xTaskCreate(loopKeyboard, "loopKeyboard", 4096, nullptr, 1, &thread1);
|
||||||
|
xTaskCreate(loopPanel, "loopPanel", 4096, nullptr, 1, &thread2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -179,7 +187,7 @@ int multisampleRead(int pin, int samples)
|
|||||||
return (int) round(((double) sum) / samples);
|
return (int) round(((double) sum) / samples);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loopPanel()
|
void readPanel()
|
||||||
{
|
{
|
||||||
const auto hue_interval = 512;
|
const auto hue_interval = 512;
|
||||||
last_hue += hue_interval;
|
last_hue += hue_interval;
|
||||||
@@ -250,7 +258,16 @@ void loopPanel()
|
|||||||
p_led_rotary.show();
|
p_led_rotary.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
void loopKeyboard()
|
[[noreturn]] void loopPanel(void* pvParameters)
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
readPanel();
|
||||||
|
taskYIELD();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void readKeyboard()
|
||||||
{
|
{
|
||||||
u64 time = timeMillis();
|
u64 time = timeMillis();
|
||||||
u64 elapsed = time - last_refresh_time;
|
u64 elapsed = time - last_refresh_time;
|
||||||
@@ -279,6 +296,7 @@ void loopKeyboard()
|
|||||||
// i >> j is the jth bit of i
|
// i >> j is the jth bit of i
|
||||||
digitalWrite(MUX_SEL_OUT[j], (i >> j) & 1);
|
digitalWrite(MUX_SEL_OUT[j], (i >> j) & 1);
|
||||||
}
|
}
|
||||||
|
delayMicroseconds(100);
|
||||||
|
|
||||||
// Read four input pins from the multiplexer
|
// Read four input pins from the multiplexer
|
||||||
for (int j = 0; j < NUM_MUX; j++)
|
for (int j = 0; j < NUM_MUX; j++)
|
||||||
@@ -299,8 +317,18 @@ void loopKeyboard()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[[noreturn]] void loopKeyboard(void* pvParameters)
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
readKeyboard();
|
||||||
|
// vTaskDelay(pdMS_TO_TICKS(1));
|
||||||
|
taskYIELD();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
loopKeyboard();
|
readKeyboard();
|
||||||
loopPanel();
|
// readPanel();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
//
|
||||||
|
// Created by Hykilpikonna on 4/13/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef FIRMWARE_MAIN_H
|
||||||
|
#define FIRMWARE_MAIN_H
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <chrono>
|
||||||
|
#include "macros.h"
|
||||||
|
#include "config.h"
|
||||||
|
#include "Adafruit_NeoPixel.h"
|
||||||
|
#include "Encoder.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the sensor value changes
|
||||||
|
*
|
||||||
|
* @param id Sensor index
|
||||||
|
*/
|
||||||
|
void on_sensor_update(int id, u64 time, u32 last, u32 current);
|
||||||
|
|
||||||
|
void onKey(int id, bool state);
|
||||||
|
void onBtn(int id, bool state);
|
||||||
|
void onPotRead(int id, u8 value);
|
||||||
|
void onPotChange(int id, u8 value);
|
||||||
|
|
||||||
|
int multisampleRead(int pin, int samples);
|
||||||
|
|
||||||
|
[[noreturn]] void loopPanel(void* pvParameters);
|
||||||
|
[[noreturn]] void loopKeyboard(void* pvParameters);
|
||||||
|
|
||||||
|
#endif //FIRMWARE_MAIN_H
|
||||||
Reference in New Issue
Block a user