Changeset - 64275d7d6618
[Not reviewed]
default
0 5 0
Ethan Zonca - 9 months ago 2024-09-03 20:32:26
ez@ethanzonca.com
More LED work, etc
5 files changed with 137 insertions and 41 deletions:
0 comments (0 inline, 0 general)
main/display_gui.c
Show inline comments
 
@@ -12,8 +12,6 @@
 
#include "freertos/task.h"
 

	
 

	
 

	
 

	
 
static lv_obj_t *ui_Screen1;
 
static lv_obj_t *ui_redsquare;
 

	
 
@@ -34,10 +32,7 @@ LV_IMG_DECLARE(red_square)
 

	
 
void display_gui_homescreen(void)
 
{
 

	
 
    // Actually create homescreen widgets
 

	
 
    
 
    // Create homescreen widgets
 
    display_lock(0);
 

	
 
    label = lv_label_create(lv_scr_act());
 
@@ -70,14 +65,17 @@ void display_gui_homescreen(void)
 
uint32_t value = 0;
 
void display_gui_process(void)
 
{
 
    
 
    display_lock(0);
 
    for(;;)
 
    {
 
        display_lock(0);
 

	
 
    //set_value(meter_indic1, value);
 
    
 
    //value = (value + 1) % 100;
 
        //set_value(meter_indic1, value);
 
        
 
        //value = (value + 1) % 100;
 

	
 
    display_unlock();
 
        display_unlock();
 
        vTaskDelay(pdMS_TO_TICKS(100));
 
    }
 

	
 
}
 

	
main/ledstrip.c
Show inline comments
 
@@ -11,19 +11,19 @@
 

	
 
// Settings
 
#define LED_STRIP_GPIO  11
 
#define LED_STRIP_NUM_LEDS 150
 
#define LED_STRIP_NUM_LEDS 250
 
#define LED_STRIP_RMT_FREQ_HZ  (10 * 1000 * 1000)
 
static const char *TAG = "ledstrip";
 

	
 

	
 
// Private Prototypes
 
static uint8_t process_effect_rainbow();
 
static uint8_t process_effect_singlechase();
 

	
 
static uint8_t process_effect_rainbow(void);
 
static uint8_t process_effect_singlechase(void);
 
static uint8_t process_effect_cauldron(void);
 

	
 
// Private variables
 
static led_strip_handle_t led_strip;
 
static effect_t current_effect = EFFECT_NONE;
 
static led_mode_t mode = LEDMODE_AUTO;
 

	
 
// Initialize WS2812 strip
 
void ledstrip_init(void)
 
@@ -60,6 +60,7 @@ void ledstrip_set_modifier(float frac)
 

	
 
void ledstrip_set_effect(effect_t effect)
 
{
 
  mode = LEDMODE_AUTO;
 
  current_effect = effect;
 
}
 

	
 
@@ -67,8 +68,9 @@ void ledstrip_set_effect(effect_t effect
 
// Set entire strip to RGB value
 
void ledstrip_set(uint32_t r, uint32_t g, uint32_t b)
 
{
 
    mode = LEDMODE_MANUAL;
 
    for (int i = 0; i < LED_STRIP_NUM_LEDS; i++) {
 
        ESP_ERROR_CHECK(led_strip_set_pixel(led_strip, i, r, g, b));
 
        ESP_ERROR_CHECK(led_strip_set_pixel(led_strip, i, g, r, b));
 
    }
 
    led_strip_refresh(led_strip);
 
}
 
@@ -76,27 +78,47 @@ void ledstrip_set(uint32_t r, uint32_t g
 
// Run effect and refresh strip
 
void ledstrip_refresh(void)
 
{
 
  switch(current_effect)
 
  for(;;)
 
  {
 

	
 
    case EFFECT_RAINBOW:
 
    if(mode == LEDMODE_MANUAL)
 
    {
 
      if(process_effect_rainbow() & 0x01)
 
        led_strip_refresh(led_strip);
 
    } break;
 
    
 
    case EFFECT_SINGLECHASE:
 
        // do nothing
 
    }
 

	
 
    else
 
    {
 
      if(process_effect_singlechase() & 0x01)
 
        led_strip_refresh(led_strip);
 
    } break;
 
      switch(current_effect)
 
      {
 

	
 
        case EFFECT_RAINBOW:
 
        {
 
          if(process_effect_rainbow() & 0x01)
 
            led_strip_refresh(led_strip);
 
        } break;
 
        
 
        case EFFECT_SINGLECHASE:
 
        {
 
          if(process_effect_singlechase() & 0x01)
 
            led_strip_refresh(led_strip);
 
        } break;
 

	
 
    case EFFECT_NONE:
 
    default:
 
    {
 
      ledstrip_set(10,10,10);
 
      led_strip_refresh(led_strip);
 
    } break;
 
        case EFFECT_CAULDRON:
 
        {
 
          if(process_effect_cauldron() & 0x01)
 
            led_strip_refresh(led_strip);
 
        } break;
 

	
 
        case EFFECT_NONE:
 
        default:
 
        {
 
          ledstrip_set(10,10,10);
 
          led_strip_refresh(led_strip);
 
        } break;
 
      }
 
    }
 

	
 
    // TODO: DelayUntil
 
    vTaskDelay(pdMS_TO_TICKS(10));
 
  }
 
}
 

	
 
@@ -122,7 +144,7 @@ static void __reset(void)
 

	
 

	
 

	
 
static uint8_t process_effect_rainbow() {
 
static uint8_t process_effect_rainbow(void) {
 
    // Strip ID: 0 - Effect: Rainbow - LEDS: 120
 
    // Steps: 60 - Delay: 20
 
    // Colors: 3 (255.0.0, 0.255.0, 0.0.255)
 
@@ -157,7 +179,7 @@ static uint8_t process_effect_rainbow() 
 

	
 

	
 
static uint32_t countloc = 0;
 
static uint8_t process_effect_singlechase() {
 
static uint8_t process_effect_singlechase(void) {
 
  if((xTaskGetTickCount() * portTICK_PERIOD_MS) - effStart < 20 * (effStep)) return 0x00;
 

	
 
  float intensity = (float)countloc / (float)LED_STRIP_NUM_LEDS;
 
@@ -165,7 +187,6 @@ static uint8_t process_effect_singlechas
 
    if(j == countloc)
 
    {
 
      ESP_ERROR_CHECK(led_strip_set_pixel(led_strip, j, 255, 255 * (1.0-intensity), 255 * (1.0-intensity)));
 
      ESP_LOGI(TAG, "Friggn intensity %f", intensity);
 
    }
 
    else
 
      ESP_ERROR_CHECK(led_strip_set_pixel(led_strip, j, 0,0,0));
 
@@ -175,3 +196,53 @@ static uint8_t process_effect_singlechas
 
  return 0x01;
 
}
 

	
 

	
 

	
 

	
 
//127, 122
 

	
 
// static uint32_t countloc = 0;
 
float intensity = 1.0f;
 
uint8_t intensity_up = 0;
 
uint8_t modmod = 0;
 
uint32_t last_modmod = 0;
 

	
 
static uint8_t process_effect_cauldron(void) {
 
  if((xTaskGetTickCount() * portTICK_PERIOD_MS) - effStart < 20 * (effStep)) return 0x00;
 

	
 
  if(intensity_up)
 
  {
 
    intensity += 0.01f;
 
    if(intensity > 0.98f)
 
      intensity_up = 0;
 
  }
 
  else
 
  {
 
    intensity -= 0.01f;
 
    if(intensity < 0.7f)
 
      intensity_up = 1;
 
  }
 
  // ESP_LOGI(TAG, "Friggn intensity %f", intensity);
 

	
 
  if((xTaskGetTickCount() * portTICK_PERIOD_MS) - last_modmod > 25)
 
  {
 
    last_modmod = (xTaskGetTickCount() * portTICK_PERIOD_MS);
 
    modmod +=1;
 
  }
 

	
 
  for(uint16_t j=0;j<LED_STRIP_NUM_LEDS;j++) {
 
    
 
      float posmod = (float)((j)%10) / 5.0f;
 
      posmod /= 1.0;
 
      posmod += 0.0;
 
        // ESP_LOGI(TAG, "Friggn intensity %f", posmod);
 

	
 

	
 
      ESP_ERROR_CHECK(led_strip_set_pixel(led_strip, j, 255 * (intensity), 120 * (intensity) * posmod, 0));
 
    
 
    //  ESP_ERROR_CHECK(led_strip_set_pixel(led_strip, j, 0,0,0));
 
  }
 
  //countloc = (countloc + 1) % LED_STRIP_NUM_LEDS;
 

	
 
  return 0x01;
 
}
main/ledstrip.h
Show inline comments
 
@@ -6,8 +6,14 @@ typedef enum _effect {
 
  EFFECT_NONE = 0,
 
  EFFECT_RAINBOW,
 
  EFFECT_SINGLECHASE,
 
  EFFECT_CAULDRON,
 
} effect_t;
 

	
 
typedef enum _mode_led {
 
  LEDMODE_AUTO = 0,
 
  LEDMODE_MANUAL = 1,
 
} led_mode_t;
 

	
 

	
 
void ledstrip_init(void);
 
void ledstrip_set(uint32_t r, uint32_t g, uint32_t b);
main/main.c
Show inline comments
 
@@ -55,12 +55,14 @@ void app_main(void)
 
    // Initialize canbus
 
    //can_init();
 

	
 
    // Start tasks
 
    xTaskCreatePinnedToCore(ledstrip_refresh,    "ledstrip_refresh", 4096, NULL, 10, NULL, 1);
 
    xTaskCreatePinnedToCore(display_gui_process, "display_gui_process", 4096, NULL, 10, NULL, 1);
 

	
 

	
 
    while(1)
 
    {
 
        display_gui_process();
 
        ledstrip_refresh();
 
        vTaskDelay(pdMS_TO_TICKS(10));
 
        vTaskDelay(pdMS_TO_TICKS(100));
 
    }
 

	
 
}
main/osc_control.c
Show inline comments
 
@@ -36,6 +36,10 @@ static void sender()
 
  }
 
}
 

	
 
static uint8_t r_man = 0;
 
static uint8_t g_man = 0;
 
static uint8_t b_man = 0;
 

	
 

	
 
static bool callback(const char *topic, const char *format, esp_osc_value_t *values)
 
{
 
@@ -73,6 +77,21 @@ static bool callback(const char *topic, 
 
        {
 
          ledstrip_set_modifier(values[i].f);
 
        }
 
        else if(strcmp(topic, "/led_manual_r") == 0)
 
        {
 
          r_man = values[i].f * 255.0;
 
          ledstrip_set(r_man, g_man, b_man);
 
        }
 
        else if(strcmp(topic, "/led_manual_g") == 0)
 
        {
 
          g_man = values[i].f * 255.0;
 
          ledstrip_set(r_man, g_man, b_man);
 
        }
 
        else if(strcmp(topic, "/led_manual_b") == 0)
 
        {
 
          b_man = values[i].f * 255.0;
 
          ledstrip_set(r_man, g_man, b_man);
 
        }
 
      } break;
 

	
 
      case 'd':
0 comments (0 inline, 0 general)