Test application for the STMicroelectronics X-NUCLEO-LED61A1 LED Control Expansion Board showing several LED control modes, built against mbed OS.

Dependencies:   X_NUCLEO_LED61A1

Fork of LedDimming_LED61A1 by ST

LED Control with the X-NUCLEO-LED61A1 Expansion Board

This application provides an example of usage of the X-NUCLEO-LED61A1 LED Control Expansion Board. It shows how to control a LED stripe load connected to the board through the following control modes:

  1. Manual PWM Dimming;
  2. Manual Analog Dimming;
  3. Sinusoidal PWM Dimming;
  4. Sinusoidal Analog Dimming;
  5. Photo-based Analog Dimming.

The button of the MCU board, when available, can be used in the following ways:

  • Short Button Press [<0.5s] for Manual Dimming;
  • Medium Button Press to Switch Demo;
  • Long Button Press [>2s] to Switch Power ON/OFF.

The program starts in mode 1.

Revision:
14:f2ba2ca417d3
Parent:
7:5763474c7551
Child:
15:ea1e402ce919
--- a/main.cpp	Fri Mar 11 15:54:52 2016 +0000
+++ b/main.cpp	Mon Mar 14 10:07:04 2016 +0000
@@ -50,25 +50,22 @@
 
 /* PI. */
 #ifndef M_PI
-    #define M_PI                      (3.14159265358979323846f)
+    #define M_PI                          (3.14159265358979323846f)
 #endif
 
 /* Loop period in micro-seconds. */
-#define LOOP_PERIOD_us                (1E5)
+#define LOOP_PERIOD_us                    (1E5)
 
 /* Sin period in micro-seconds. */
-#define PWM_SIN_PERIOD_us             (1E7)
-#define ANALOG_SIN_PERIOD_us          (1E7)
+#define PWM_SIN_PERIOD_us                 (1E7)
+#define ANALOG_SIN_PERIOD_us              (1E7)
 
 /* Duration of button press in milli-seconds. */
-#define SWITCH_DEMO_BUTTON_PRESS_ms   (500)
-#define SWITCH_POWER_BUTTON_PRESS_ms  (2000)
-
-/* Duration of initialization interval in milli-seconds. */
-#define INITIALIZATION_INTERVAL_ms    (2000)
+#define SWITCH_DEMO_BUTTON_PRESS_ms       (500)
+#define SWITCH_POWER_BUTTON_PRESS_ms      (2000)
 
 /* Dimming Step. */
-#define DIMMING_STEP                  (0.05f)
+#define DIMMING_STEP                      (0.05f)
 
 
 /* Types ---------------------------------------------------------------------*/
@@ -110,19 +107,15 @@
 LED6001 *led;
 
 /* Interrupt flags. */
-static volatile bool ticker_irq_triggered;
-static volatile bool button_irq_triggered;
-static volatile bool xfault_irq_triggered;
+static volatile bool ticker_irq_triggered = false;
+static volatile bool button_irq_triggered = false;
+static volatile bool xfault_irq_triggered = false;
 
 /* Demo State. */
 static volatile LED_Demo_t demo;
 static volatile LED_Action_t action;
 static volatile bool power_on;
 
-/* PWM and Analog dimming values. */
-static float pwm_dimming;
-static float analog_dimming;
-
 /* Demos' Names. */
 static char* demos[] =
 {
@@ -137,36 +130,15 @@
 /* Functions -----------------------------------------------------------------*/
 
 /**
- * @brief  Initilizing the demo.
+ * @brief  Initializing the demo.
  * @param  None.
  * @retval None.
  */
-void LEDInit(void)
+void InitDemo(void)
 {
-    /* Printing to the console. */
-    printf("Initializing LED driver...");
-
-    /* Initializing Interrupt flags. */
-    button_irq_triggered = false;
-    xfault_irq_triggered = false;
-    ticker_irq_triggered = false;
-
-    /* Initializing Demo. */
     power_on = true;
     action = SWITCH_DEMO;
     demo = (LED_Demo_t) (LED_DEMO_SIZE - 1);
-
-    /* Initializing PWM and Analog dimming to maximum values. */
-    pwm_dimming = 1.0f;
-    analog_dimming = 1.0f;
-
-    /* Start-up sequence. */
-    led->PowerOFF();
-    wait_ms(INITIALIZATION_INTERVAL_ms);
-    led->PowerON();
-
-    /* Printing to the console. */
-    printf("Done.\r\n\nDemo:\r\n");
 }
 
 /**
@@ -177,6 +149,8 @@
 void LEDHandler(void)
 {
     static int tick = 0;
+    static float pwm_dimming;
+    static float analog_dimming;
 
     /* Handling the power switch. */
     if (action == SWITCH_POWER)
@@ -347,10 +321,16 @@
 void XFaultHandler(void)
 {
     /* Printing to the console. */
-    printf("XFAULT Interrupt detected! Re-initializing LED driver...\r\n");
+    printf("XFAULT Interrupt detected! Re-initializing LED driver...");
+
+    /* Re-starting-up LED Control Component. */
+    led->StartUp();
+
+    /* Printing to the console. */
+    printf("Done.\r\n\n");
 
     /* Re-initializing the demo. */
-    LEDInit();
+    InitDemo();
 
     led->EnableXFaultIRQ();
 }
@@ -375,7 +355,7 @@
            , SWITCH_DEMO_BUTTON_PRESS_ms / 1000.0f, SWITCH_POWER_BUTTON_PRESS_ms / 1000.0f);
 
     /* Initializing LED Control Component. */
-    led = new LED6001(D4, A3, D6, D5);
+    led = new LED6001(D4, A3, D7, D5);
     if (led->Init() != COMPONENT_OK)
         exit(EXIT_FAILURE);
 
@@ -386,8 +366,11 @@
     led->EnableXFaultIRQ();
     ticker.attach_us(TickerIRQ, LOOP_PERIOD_us);
 
+    /* Starting-up LED Control Component. */
+    led->StartUp();
+
     /* Initializing the demo. */
-    LEDInit();
+    InitDemo();
 
 
     /*----- LED Control. -----*/