Test application for the STMicroelectronics X-NUCLEO-LED61A1 LED Control Expansion Board showing several LED control modes.

Dependencies:   X_NUCLEO_LED61A1 mbed

Fork of LedDimming_LED61A1 by ST Expansion SW Team

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.

Files at this revision

API Documentation at this revision

Comitter:
Davidroid
Date:
Thu Jul 13 16:23:20 2017 +0000
Parent:
15:ea1e402ce919
Commit message:
Adapting to ARM mbed coding style.

Changed in this revision

X_NUCLEO_LED61A1.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- a/X_NUCLEO_LED61A1.lib	Mon Mar 14 12:20:07 2016 +0000
+++ b/X_NUCLEO_LED61A1.lib	Thu Jul 13 16:23:20 2017 +0000
@@ -1,1 +1,1 @@
-https://developer.mbed.org/teams/ST/code/X_NUCLEO_LED61A1/#5a7ee8e28f92
+https://developer.mbed.org/teams/ST/code/X_NUCLEO_LED61A1/#8cd869d64965
--- a/main.cpp	Mon Mar 14 12:20:07 2016 +0000
+++ b/main.cpp	Thu Jul 13 16:23:20 2017 +0000
@@ -43,7 +43,7 @@
 #include "mbed.h"
 
 /* Component specific header files. */
-#include "led6001_class.h"
+#include "Led6001.h"
 
 
 /* Definitions ---------------------------------------------------------------*/
@@ -104,7 +104,7 @@
 DigitalOut button_pressed_led(LED1);
 
 /* LED Control Component. */
-LED6001 *led;
+Led6001 *led;
 
 /* Interrupt flags. */
 static volatile bool ticker_irq_triggered = false;
@@ -134,7 +134,7 @@
  * @param  None.
  * @retval None.
  */
-void InitDemo(void)
+void init_demo(void)
 {
     power_on = true;
     action = SWITCH_DEMO;
@@ -146,40 +146,34 @@
  * @param  None.
  * @retval None.
  */
-void LEDHandler(void)
+void led_handler(void)
 {
     static int tick = 0;
     static float pwm_dimming;
     static float analog_dimming;
 
     /* Handling the power switch. */
-    if (action == SWITCH_POWER)
-    {
+    if (action == SWITCH_POWER) {
         /* Switching the LED power ON/OFF. */
         power_on = !power_on;
 
-        if (power_on)
-        {
+        if (power_on) {
             /* Initializing PWM and Analog dimming to maximum values. */
             pwm_dimming = 1.0f;
             analog_dimming = 1.0f;
-        }
-        else
-        {
+        } else {
             /* Printing to the console. */
             printf("%-56s\r", "Power OFF");
 
             /* Powering OFF the LED. */
-            led->PowerOFF();
+            led->power_off();
         }
     }
 
     /* Handling the LED dimming when powered ON. */
-    if (power_on)
-    {
+    if (power_on) {
         /* Switching to the next demo. */
-        if (action == SWITCH_DEMO)
-        {
+        if (action == SWITCH_DEMO) {
             pwm_dimming = 1.0f;
             analog_dimming = 1.0f;
             tick = 0;
@@ -187,12 +181,10 @@
         }
 
         /* Setting the LED dimming depending on the selected demo. */
-        switch (demo)
-        {
+        switch (demo) {
             /* Changing PWM dimming according to the user button. */
             case MANUAL_PWM_DIMMING:
-                if (action == SWITCH_STATE)
-                {
+                if (action == SWITCH_STATE) {
                     pwm_dimming -= DIMMING_STEP;
                     pwm_dimming = (pwm_dimming < 0.0f ? 1.0f : pwm_dimming);
                 }
@@ -200,8 +192,7 @@
 
             /* Changing Analog dimming according to the user button. */
             case MANUAL_ANALOG_DIMMING:
-                if (action == SWITCH_STATE)
-                {
+                if (action == SWITCH_STATE) {
                     analog_dimming -= DIMMING_STEP;
                     analog_dimming = (analog_dimming < 0.0f ? 1.0f : analog_dimming);
                 }
@@ -223,20 +214,19 @@
 
             /* Setting Analog dimming according to the photo sensor. */
             case PHOTO_BASED_ANALOG_DIMMING:
-                analog_dimming = 1.0f - led->GetCurrent();
+                analog_dimming = 1.0f - led->get_current();
                 action = SWITCH_STATE;
                 break;
         }
 
         /* Writing PWM and Analog dimming values to the LED. */
-        if (action != NO_ACTION)
-        {
+        if (action != NO_ACTION) {
             /* Printing to the console. */
             printf("%d) %-26s --> Dimming: %0.2f\r", demo + 1, demos[demo], demo == MANUAL_PWM_DIMMING || demo == AUTOMATIC_PWM_DIMMING ? pwm_dimming : analog_dimming);
 
             /* Writing PWM and Analog dimming values to the LED. */
-            led->SetPWMDimming(pwm_dimming);
-            led->SetAnalogDimming(analog_dimming);
+            led->set_pwm_dimming(pwm_dimming);
+            led->set_analog_dimming(analog_dimming);
         }
     }
     
@@ -249,7 +239,7 @@
  * @param  None.
  * @retval None.
  */
-void TickerIRQ(void)
+void ticker_irq(void)
 {
     ticker_irq_triggered = true;
 }
@@ -259,7 +249,7 @@
  * @param  None.
  * @retval None.
  */
-void ButtonIRQ(void)
+void button_irq(void)
 {
     button_irq_triggered = true;
     button.disable_irq();
@@ -270,10 +260,10 @@
  * @param  None.
  * @retval None.
  */
-void XFaultIRQ(void)
+void xfault_irq(void)
 {
     xfault_irq_triggered = true;
-    led->DisableXFaultIRQ();
+    led->disable_xfault_irq();
 }
 
 /**
@@ -281,31 +271,29 @@
  * @param  None.
  * @retval None.
  */
-void ButtonHandler(void)
+void button_handler(void)
 {
     /* User Button's timer to measure the time the button remains pressed. */
     static Timer button_pressed_timer;
 
     bool button_pressed_flag = (button.read() == 0 ? true : false);
 
-    if (button_pressed_flag)
-    {
+    if (button_pressed_flag) {
         button_pressed_led = 1;
         button_pressed_timer.start();
-    }
-    else
-    {
+    } else {
         button_pressed_led = 0;
         button_pressed_timer.stop();
 
         /* Either changing current demo's state or switching to the next demo. */
         int time_pressed = button_pressed_timer.read_ms();
-        if (time_pressed < SWITCH_DEMO_BUTTON_PRESS_ms)
+        if (time_pressed < SWITCH_DEMO_BUTTON_PRESS_ms) {
             action = SWITCH_STATE;
-        else if (time_pressed < SWITCH_POWER_BUTTON_PRESS_ms)
+        } else if (time_pressed < SWITCH_POWER_BUTTON_PRESS_ms) {
             action = SWITCH_DEMO;
-        else
+        } else {
             action = SWITCH_POWER;
+        }
 
         button_pressed_timer.reset();
     }
@@ -318,21 +306,21 @@
  * @param  None.
  * @retval None.
  */
-void XFaultHandler(void)
+void xfault_handler(void)
 {
     /* Printing to the console. */
     printf("XFAULT Interrupt detected! Re-initializing LED driver...");
 
     /* Re-starting-up LED Control Component. */
-    led->StartUp();
+    led->start_up();
 
     /* Printing to the console. */
     printf("Done.\r\n\n");
 
     /* Re-initializing the demo. */
-    InitDemo();
+    init_demo();
 
-    led->EnableXFaultIRQ();
+    led->enable_xfault_irq();
 }
 
 
@@ -346,8 +334,9 @@
     printf("LED Control Application Example\r\n\n" \
            "Demos:\r\n");
     int demo = 0;
-    for (demo = 0; demo < LED_DEMO_SIZE; demo++)
+    for (demo = 0; demo < LED_DEMO_SIZE; demo++) {
         printf("%d) %-26s\r\n", demo + 1, demos[demo]);
+    }
     printf("\r\nActions:\r\n" \
            "+ Short Button Press [<%.1fs]  --> Manual Dimming\r\n" \
            "+ Medium Button Press         --> Switch Demo\r\n" \
@@ -355,41 +344,38 @@
            , 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);
-    if (led->Init() != COMPONENT_OK)
+    led = new Led6001(D4, A3, D6, D5);
+    if (led->init() != COMPONENT_OK) {
         exit(EXIT_FAILURE);
+    }
 
     /* Attaching interrupt request functions. */
-    button.fall(ButtonIRQ);
-    button.rise(ButtonIRQ);
-    led->AttachXFaultIRQ(&XFaultIRQ);
-    led->EnableXFaultIRQ();
-    ticker.attach_us(TickerIRQ, LOOP_PERIOD_us);
+    button.fall(button_irq);
+    button.rise(button_irq);
+    led->attach_xfault_irq(&xfault_irq);
+    led->enable_xfault_irq();
+    ticker.attach_us(ticker_irq, LOOP_PERIOD_us);
 
     /* Starting-up LED Control Component. */
-    led->StartUp();
+    led->start_up();
 
     /* Initializing the demo. */
-    InitDemo();
+    init_demo();
 
 
     /*----- LED Control. -----*/
 
     /* Either performing the component handler, interrupt handlers, or waiting for events. */
-    while (true)
-    {
-        if (ticker_irq_triggered)
-        {
+    while (true) {
+        if (ticker_irq_triggered) {
             ticker_irq_triggered = false;
-            LEDHandler();
-        } else if (button_irq_triggered)
-        {
+            led_handler();
+        } else if (button_irq_triggered) {
             button_irq_triggered = false;
-            ButtonHandler();
-        } else if (xfault_irq_triggered)
-        {
+            button_handler();
+        } else if (xfault_irq_triggered) {
             xfault_irq_triggered = false;
-            XFaultHandler();
+            xfault_handler();
         } else {
             /* It is recommended that SEVONPEND in the System Control Register is NOT set. */
             __WFE();
--- a/mbed.bld	Mon Mar 14 12:20:07 2016 +0000
+++ b/mbed.bld	Thu Jul 13 16:23:20 2017 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/165afa46840b
\ No newline at end of file
+https://mbed.org/users/mbed_official/code/mbed/builds/22da6e220af6
\ No newline at end of file