From 0dc52d17ec4077dc5a8f34477c9563b11b7b3d0a Mon Sep 17 00:00:00 2001 From: marchingband Date: Thu, 2 Sep 2021 16:46:31 -0700 Subject: [PATCH] add boards to examples --- examples/wvr_dev_board/wvr_dev_board.ino | 119 +++++++++++++++++ .../wvr_dev_board_usb/wvr_dev_board_usb.ino | 124 ++++++++++++++++++ .../wvr_makers_board/wvr_makers_board.ino | 28 ++++ .../wvr_makers_board_usb.ino | 28 ++++ src/WVR.cpp | 17 +++ src/WVR.h | 4 + src/button.cpp | 8 +- src/encoder.c | 114 +++++++++++----- src/encoder.h | 8 ++ src/file_system.c | 5 + src/file_system.h | 1 + src/pot.c | 29 +++- src/pot.h | 9 ++ src/rgb.cpp | 28 ++-- src/rgb.h | 7 + src/wav_player.c | 7 +- src/wav_player.h | 1 + src/wvr_0.3.cpp | 8 +- src/wvr_ui.h | 2 +- 19 files changed, 485 insertions(+), 62 deletions(-) create mode 100644 examples/wvr_dev_board/wvr_dev_board.ino create mode 100644 examples/wvr_dev_board_usb/wvr_dev_board_usb.ino create mode 100644 examples/wvr_makers_board/wvr_makers_board.ino create mode 100644 examples/wvr_makers_board_usb/wvr_makers_board_usb.ino create mode 100644 src/encoder.h create mode 100644 src/pot.h create mode 100644 src/rgb.h diff --git a/examples/wvr_dev_board/wvr_dev_board.ino b/examples/wvr_dev_board/wvr_dev_board.ino new file mode 100644 index 0000000..fd50fb9 --- /dev/null +++ b/examples/wvr_dev_board/wvr_dev_board.ino @@ -0,0 +1,119 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "rgb.h" +extern "C" { + #include "encoder.h" + #include "pot.h" +} + +WVR wvr; + +Button *switch_one; +Button *switch_two; + +void onEncoderDevBoard(bool down) +{ + // log a running number for the encoder + // static int cnt = 0; + // log_i("%d", down ? --cnt : ++cnt); + + // change what voice is used for midi channel 1 + uint8_t *channel_lut = get_channel_lut(); + if(down) + { + // decrement but not below zero + channel_lut[0] -= (channel_lut[0] > 0); + } + else + { + // incriment but not above 15 + channel_lut[0] += (channel_lut[0] < 15); + } +} + +void onPotDevBoard(uint32_t raw_val) +{ + // log a 7 bit number when the pot moves and set the volume + static uint8_t val = 0; + uint8_t temp = raw_val >> 5; + if(temp != val) + { + val = temp; + log_i("%d", val); + wvr.setGlobalVolume(val); + } +} + +void switch_one_up(void) +{ + log_i("switch one up"); + wvr.unmute(); + // rgb_set_color(100 /* red */,100 /* green */,100 /* blue */); // makes white +} + +void switch_one_down(void) +{ + log_i("switch one down"); + wvr.mute(); + // rgb_set_color(0 ,0 ,0); // turn off RGB LED +} + +void switch_two_up(void) +{ + log_i("switch two up"); + wvr.wifiOn(); +} + +void switch_two_down(void) +{ + log_i("switch two down"); + wvr.wifiOff(); +} + +void setup() { + wvr.useFTDI = true; + wvr.useUsbMidi = false; + wvr.begin(); + + encoder_init(D9, D10); + pot_init(); + + // connect D13 to RGBLED pin on dev board, make sure pin D13 is set to edge:none in WEB GUI + // rgb_init(D13); + + gpio_reset_pin(gpioNumToGpioNum_T(D3)); + gpio_reset_pin(gpioNumToGpioNum_T(D4)); + + pinMode(D3, INPUT_PULLUP); + pinMode(D4, INPUT_PULLUP); + + switch_one = new Button(D3, FALLING, 60); + switch_two = new Button(D4, FALLING, 60); + + switch_one->onPress(switch_one_up); + switch_one->onRelease(switch_one_down); + switch_two->onPress(switch_two_up); + switch_two->onRelease(switch_two_down); + + wvr.wifiIsOn = get_metadata()->wifi_starts_on; + log_i("wifi is %s", wvr.wifiIsOn ? "on" : "off"); + + onEncoder = onEncoderDevBoard; + onPot = onPotDevBoard; +} + +void loop() { + // vTaskDelay(portMAX_DELAY); + vTaskDelete(NULL); +} \ No newline at end of file diff --git a/examples/wvr_dev_board_usb/wvr_dev_board_usb.ino b/examples/wvr_dev_board_usb/wvr_dev_board_usb.ino new file mode 100644 index 0000000..ba6cd43 --- /dev/null +++ b/examples/wvr_dev_board_usb/wvr_dev_board_usb.ino @@ -0,0 +1,124 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "rgb.h" +extern "C" { + #include "encoder.h" + #include "pot.h" +} + +WVR wvr; + +Button *switch_one; +Button *switch_two; + +void onEncoderDevBoard(bool down) +{ + // log a running number for the encoder + // static int cnt = 0; + // log_i("%d", down ? --cnt : ++cnt); + + // change what voice is used for midi channel 1 + uint8_t *channel_lut = get_channel_lut(); + if(down) + { + // decrement but not below zero + channel_lut[0] -= (channel_lut[0] > 0); + } + else + { + // incriment but not above 15 + channel_lut[0] += (channel_lut[0] < 15); + } +} + +void onPotDevBoard(uint32_t raw_val) +{ + // log a 7 bit number when the pot moves and set the volume + static uint8_t val = 0; + uint8_t temp = raw_val >> 5; + if(temp != val) + { + val = temp; + // log_i("%d", val); + wvr.setGlobalVolume(val); + } +} + +void switch_one_up(void) +{ + log_i("switch one up"); + wvr.unmute(); + // rgb_set_color(100 /* red */,100 /* green */,100 /* blue */); // makes white +} + +void switch_one_down(void) +{ + log_i("switch one down"); + wvr.mute(); + // rgb_set_color(0 ,0 ,0); // turn off RGB LED +} + +void switch_two_up(void) +{ + log_i("switch two up"); + wvr.wifiOn(); +} + +void switch_two_down(void) +{ + log_i("switch two down"); + wvr.wifiOff(); +} + +void setup() { + wvr.useFTDI = true; + wvr.useUsbMidi = true; + wvr.begin(); + + // connect D13 to RGBLED pin on dev board, make sure pin D13 is set to edge:none in WEB GUI + // rgb_init(D13); + + gpio_reset_pin(gpioNumToGpioNum_T(D9)); + gpio_reset_pin(gpioNumToGpioNum_T(D10)); + + encoder_init(D9, D10); + log_i("dev board"); + pot_init(); + + + gpio_reset_pin(gpioNumToGpioNum_T(D3)); + gpio_reset_pin(gpioNumToGpioNum_T(D4)); + + pinMode(D3, INPUT_PULLUP); + pinMode(D4, INPUT_PULLUP); + + switch_one = new Button(D3, FALLING, 60); + switch_two = new Button(D4, FALLING, 60); + + switch_one->onPress(switch_one_up); + switch_one->onRelease(switch_one_down); + switch_two->onPress(switch_two_up); + switch_two->onRelease(switch_two_down); + + wvr.wifiIsOn = get_metadata()->wifi_starts_on; + log_i("wifi is %s", wvr.wifiIsOn ? "on" : "off"); + + onEncoder = onEncoderDevBoard; + onPot = onPotDevBoard; +} + +void loop() { + // vTaskDelay(portMAX_DELAY); + vTaskDelete(NULL); +} \ No newline at end of file diff --git a/examples/wvr_makers_board/wvr_makers_board.ino b/examples/wvr_makers_board/wvr_makers_board.ino new file mode 100644 index 0000000..33940f6 --- /dev/null +++ b/examples/wvr_makers_board/wvr_makers_board.ino @@ -0,0 +1,28 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +WVR wvr; + +void setup() { + wvr.useFTDI = false; + wvr.useUsbMidi = false; + wvr.begin(); + wvr.wifiIsOn = get_metadata()->wifi_starts_on; + log_i("wifi is %s", wvr.wifiIsOn ? "on" : "off"); +} + +void loop() { + // vTaskDelay(portMAX_DELAY); + vTaskDelete(NULL); +} \ No newline at end of file diff --git a/examples/wvr_makers_board_usb/wvr_makers_board_usb.ino b/examples/wvr_makers_board_usb/wvr_makers_board_usb.ino new file mode 100644 index 0000000..8ef45db --- /dev/null +++ b/examples/wvr_makers_board_usb/wvr_makers_board_usb.ino @@ -0,0 +1,28 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +WVR wvr; + +void setup() { + wvr.useFTDI = false; + wvr.useUsbMidi = true; + wvr.begin(); + wvr.wifiIsOn = get_metadata()->wifi_starts_on; + log_i("wifi is %s", wvr.wifiIsOn ? "on" : "off"); +} + +void loop() { + // vTaskDelay(portMAX_DELAY); + vTaskDelete(NULL); +} \ No newline at end of file diff --git a/src/WVR.cpp b/src/WVR.cpp index fbee975..2331c12 100644 --- a/src/WVR.cpp +++ b/src/WVR.cpp @@ -3,12 +3,14 @@ #include "wvr_0.3.h" #include "wav_player.h" #include "server.h" +#include "file_system.h" WVR::WVR() { this->wifiIsOn = get_wifi_is_on(); this->useFTDI = false; this->useUsbMidi = false; + this->forceWifiOn = false; } void WVR::begin() @@ -43,4 +45,19 @@ void WVR::toggleWifi() this->wifiIsOn ? wifiOff() : wifiOn(); // wifiIsOn = !wifiIsOn; this->wifiIsOn = get_wifi_is_on(); +} + +void WVR::setGlobalVolume(uint8_t volume) +{ + set_global_volume(volume); +} + +void WVR::mute(void) +{ + set_mute(true); +} + +void WVR::unmute(void) +{ + set_mute(false); } \ No newline at end of file diff --git a/src/WVR.h b/src/WVR.h index 3538e48..779c243 100644 --- a/src/WVR.h +++ b/src/WVR.h @@ -17,12 +17,16 @@ class WVR { void wifiOff(void); void wifiOn(void); void toggleWifi(void); + void setGlobalVolume(uint8_t volume); + void mute(void); + void unmute(void); // int globalVolume; // bool mute; // bool autoConfigPins; bool wifiIsOn; bool useFTDI; bool useUsbMidi; + bool forceWifiOn; }; #endif \ No newline at end of file diff --git a/src/button.cpp b/src/button.cpp index c764724..7898966 100644 --- a/src/button.cpp +++ b/src/button.cpp @@ -42,14 +42,16 @@ static void gpioTask(void* x) { }; } -void IRAM_ATTR isr(void *e){ +// void IRAM_ATTR isr(void *e){ +void isr(void *e){ button_event_t *event = (button_event_t*)e; event->val = digitalRead(event->pin); isr_log_d("read %d",event->val); xQueueSendFromISR(gpio_queue_handle, &event, NULL); } -void IRAM_ATTR touch_isr(void *e){ +// void IRAM_ATTR touch_isr(void *e){ +void touch_isr(void *e){ button_event_t *event = (button_event_t*)e; uint32_t pad_intr = touch_pad_get_status(); touch_pad_clear_status(); @@ -96,7 +98,7 @@ void Button::onPress(void(*handlePress)()){ if(this->touch != 1) { // digital read mode - attachInterruptArg(pin, isr, (void*)&event, CHANGE); + attachInterruptArg((uint8_t)pin, isr, (void*)&event, CHANGE); } else { diff --git a/src/encoder.c b/src/encoder.c index dd7765b..d300755 100644 --- a/src/encoder.c +++ b/src/encoder.c @@ -1,32 +1,52 @@ #include "Arduino.h" #include "wvr_pins.h" #include "ws_log.h" +#include "encoder.h" -#define ROT_ENC_A_GPIO 34 -#define ROT_ENC_B_GPIO 35 -#define GPIO_MASK ((1ULL<> 5); // int new_percent = adc_reading / (0b111111111111 / 100); // if(new_percent != percent) @@ -44,7 +57,9 @@ static void adc_task(void* arg) void pot_init(void){ // analogSetWidth(8); - analogSetCycles(8); + // analogSetCycles(8); // analogSetSamples(4); - xTaskCreate(&adc_task, "adc_task", 1024 * 4, NULL, 3, NULL); + // xTaskCreate(&adc_task, "adc_task", 1024 * 4, NULL, 3, NULL); + onPot = onPot_default; + xTaskCreatePinnedToCore(&adc_task, "adc_task", 1024 * 4, NULL, 3, NULL, 0); } diff --git a/src/pot.h b/src/pot.h new file mode 100644 index 0000000..2204ff4 --- /dev/null +++ b/src/pot.h @@ -0,0 +1,9 @@ +#ifndef POT_H +#define POT_H + +// #include "Arduino.h" + +void (* onPot)(uint32_t); +void pot_init(void); + +#endif \ No newline at end of file diff --git a/src/rgb.cpp b/src/rgb.cpp index 690484b..3cb4a4e 100644 --- a/src/rgb.cpp +++ b/src/rgb.cpp @@ -1,20 +1,20 @@ #include #include "Arduino.h" +#include "wvr_pins.h" #define NUMPIXELS 1 -#define PIN 21 +#define RGB_LED_PIN D2 -void rgb_init(){ - Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); - pixels.begin(); - pixels.clear(); - pixels.setPixelColor(0, pixels.Color(0, 150, 0)); - pixels.show(); - delay(1000); - pixels.setPixelColor(0, pixels.Color(150, 0, 0)); - pixels.show(); - delay(1000); - pixels.setPixelColor(0, pixels.Color(0, 0, 150)); - pixels.show(); - delay(1000); +Adafruit_NeoPixel *rgb; + +void rgb_init(uint16_t pin){ + rgb = new Adafruit_NeoPixel(NUMPIXELS, pin, NEO_GRB + NEO_KHZ800); + rgb->begin(); + rgb->clear(); +} + +void rgb_set_color(int red, int green, int blue) +{ + rgb->setPixelColor(0, rgb->Color(red, green, blue)); + rgb->show(); } \ No newline at end of file diff --git a/src/rgb.h b/src/rgb.h new file mode 100644 index 0000000..e74988a --- /dev/null +++ b/src/rgb.h @@ -0,0 +1,7 @@ +#ifndef RGB_H +#define RGB_H + +void rgb_init(uint16_t pin); +void rgb_set_color(int red, int green, int blue); + +#endif \ No newline at end of file diff --git a/src/wav_player.c b/src/wav_player.c index 14da6d6..a8e9d7d 100644 --- a/src/wav_player.c +++ b/src/wav_player.c @@ -47,7 +47,7 @@ static const char* TAG = "wav_player"; uint8_t channel_lut[16]; struct pan_t channel_pan[16]; -struct metadata_t metadata; +extern struct metadata_t metadata; bool mute = false; struct buf_t { struct wav_lu_t wav_data; @@ -595,4 +595,9 @@ void wav_player_resume(void) vTaskResume(wav_player_task_handle); dac_resume(); log_i("wav player resumed and buffers initialized"); +} + +void set_mute(bool should_mute) +{ + mute = should_mute; } \ No newline at end of file diff --git a/src/wav_player.h b/src/wav_player.h index 4e2d9b9..cbe543a 100644 --- a/src/wav_player.h +++ b/src/wav_player.h @@ -27,6 +27,7 @@ void current_bank_up(void); void current_bank_down(void); void play_wav(uint8_t voice, uint8_t note, uint8_t velocity); void stop_wav(uint8_t voice, uint8_t note); +void set_mute(bool should_mute); #ifdef __cplusplus } diff --git a/src/wvr_0.3.cpp b/src/wvr_0.3.cpp index 5eca00d..b50be13 100644 --- a/src/wvr_0.3.cpp +++ b/src/wvr_0.3.cpp @@ -28,7 +28,7 @@ extern "C" void emmc_init(void); extern "C" void dac_init(void); extern "C" void midi_init(bool useUsbMidi); extern "C" void wav_player_start(void); -extern "C" void encoder_init(void); +// extern "C" void encoder_init(void); extern "C" void touch_test(void); extern "C" void pot_init(void); extern "C" void rpc_init(void); @@ -130,6 +130,12 @@ void wvr_init(bool useFTDI, bool useUsbMidi) { server_pause(); } + // encoder_init(); + // pot_init(); + // rgb_init(); + // neopixel_test(); + + log_pin_config(); // if(wvr->autoConfigPins) diff --git a/src/wvr_ui.h b/src/wvr_ui.h index 3bd26af..f7608a0 100644 --- a/src/wvr_ui.h +++ b/src/wvr_ui.h @@ -1,3 +1,3 @@ const char MAIN_page[] PROGMEM = R"=====( -Waver UI
+Waver UI
)====="; \ No newline at end of file