RGB LED: improved set_color
This commit is contained in:
parent
464dbc78e4
commit
32746c111f
@ -188,4 +188,5 @@
|
|||||||
</scannerConfigBuildInfo>
|
</scannerConfigBuildInfo>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="refreshScope"/>
|
<storageModule moduleId="refreshScope"/>
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
|
||||||
</cproject>
|
</cproject>
|
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
#define RGBLED_OK 0
|
#define RGBLED_OK 0
|
||||||
#define RGBLED_ERROR -1 // generic error
|
#define RGBLED_ERROR -1 // generic error
|
||||||
|
#define RGBLED_WRONG_CHANNEL -2 // channel number not in {1,2,3,4}
|
||||||
|
|
||||||
#define RGBLED_PRESCALER 0
|
#define RGBLED_PRESCALER 0
|
||||||
#define RGBLED_PERIOD 255
|
#define RGBLED_PERIOD 255
|
||||||
@ -30,12 +31,22 @@ typedef struct {
|
|||||||
// tim22 ch1 G
|
// tim22 ch1 G
|
||||||
// tim22 ch2 R
|
// tim22 ch2 R
|
||||||
// TODO union, aby se dalo nastavovat LED v cyklu (set_color)
|
// TODO union, aby se dalo nastavovat LED v cyklu (set_color)
|
||||||
TIM_TypeDef *timer_R;
|
union {
|
||||||
TIM_TypeDef *timer_G;
|
struct {
|
||||||
TIM_TypeDef *timer_B;
|
TIM_TypeDef *R;
|
||||||
uint8_t channel_R;
|
TIM_TypeDef *G;
|
||||||
uint8_t channel_G;
|
TIM_TypeDef *B;
|
||||||
uint8_t channel_B;
|
} timer;
|
||||||
|
TIM_TypeDef *timer_array[3];
|
||||||
|
};
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
uint8_t R;
|
||||||
|
uint8_t G;
|
||||||
|
uint8_t B;
|
||||||
|
} channel;
|
||||||
|
uint8_t channel_array[3];
|
||||||
|
};
|
||||||
|
|
||||||
} rgbled_context_t;
|
} rgbled_context_t;
|
||||||
|
|
||||||
@ -44,7 +55,7 @@ typedef struct {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
int8_t rgbled_init(rgbled_context_t *context);
|
int8_t rgbled_init(rgbled_context_t *context);
|
||||||
int8_t rgbled_set_color(uint16_t R, uint16_t G, uint16_t B);
|
int8_t rgbled_set_color(uint8_t R, uint8_t G, uint8_t B);
|
||||||
int8_t rgbled_off(void);
|
int8_t rgbled_off(void);
|
||||||
|
|
||||||
|
|
||||||
|
@ -217,18 +217,17 @@ int main(void)
|
|||||||
|
|
||||||
/* RGB LED context init */
|
/* RGB LED context init */
|
||||||
rgbled_context_t rgbled_context;
|
rgbled_context_t rgbled_context;
|
||||||
rgbled_context.timer_R = TIM22;
|
rgbled_context.timer.R = TIM22;
|
||||||
rgbled_context.timer_G = TIM22;
|
rgbled_context.timer.G = TIM22;
|
||||||
rgbled_context.timer_B = TIM2;
|
rgbled_context.timer.B = TIM2;
|
||||||
rgbled_context.channel_R = 2;
|
rgbled_context.channel.R = 2;
|
||||||
rgbled_context.channel_G = 1;
|
rgbled_context.channel.G = 1;
|
||||||
rgbled_context.channel_B = 1;
|
rgbled_context.channel.B = 1;
|
||||||
rgbled_init(&rgbled_context);
|
rgbled_init(&rgbled_context);
|
||||||
|
|
||||||
rgbled_set_color(255, 0, 0);
|
rgbled_set_color(50, 50, 0);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
// rgbled_set_color(30000, 0, 0);
|
|
||||||
LL_mDelay(1000);
|
LL_mDelay(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,21 +20,37 @@ int8_t rgbled_init(rgbled_context_t *context)
|
|||||||
return RGBLED_OK;
|
return RGBLED_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int8_t rgbled_set_color(uint16_t R, uint16_t G, uint16_t B)
|
int8_t rgbled_set_color(uint8_t R, uint8_t G, uint8_t B)
|
||||||
{
|
{
|
||||||
// tim2 ch1 B
|
uint8_t colors[3];
|
||||||
// tim22 ch1 G
|
uint8_t i;
|
||||||
// tim22 ch2 R
|
|
||||||
if (
|
colors[0] = R;
|
||||||
R > RGBLED_PERIOD || \
|
colors[1] = G;
|
||||||
G > RGBLED_PERIOD || \
|
colors[2] = B;
|
||||||
B > RGBLED_PERIOD)
|
for (i = 0; i < 3; i++) {
|
||||||
{
|
if (colors[i] > RGBLED_PERIOD) {
|
||||||
return RGBLED_ERROR;
|
return RGBLED_ERROR;
|
||||||
}
|
}
|
||||||
LL_TIM_OC_SetCompareCH1(rgbled_context->timer_B, (uint32_t)(RGBLED_PERIOD - B)); // B
|
}
|
||||||
LL_TIM_OC_SetCompareCH1(rgbled_context->timer_G, (uint32_t)(RGBLED_PERIOD - G)); // G
|
for (i = 0; i < 3; i++) {
|
||||||
LL_TIM_OC_SetCompareCH2(rgbled_context->timer_R, (uint32_t)(RGBLED_PERIOD - R)); // R
|
switch (rgbled_context->channel_array[i]) {
|
||||||
|
case 1:
|
||||||
|
LL_TIM_OC_SetCompareCH1(rgbled_context->timer_array[i], (uint32_t)(RGBLED_PERIOD - colors[i]));
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
LL_TIM_OC_SetCompareCH2(rgbled_context->timer_array[i], (uint32_t)(RGBLED_PERIOD - colors[i]));
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
LL_TIM_OC_SetCompareCH3(rgbled_context->timer_array[i], (uint32_t)(RGBLED_PERIOD - colors[i]));
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
LL_TIM_OC_SetCompareCH4(rgbled_context->timer_array[i], (uint32_t)(RGBLED_PERIOD - colors[i]));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return RGBLED_WRONG_CHANNEL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return RGBLED_OK;
|
return RGBLED_OK;
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_shared_stlink" value="false"/>
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_shared_stlink" value="false"/>
|
||||||
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.external_loader" value=""/>
|
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.external_loader" value=""/>
|
||||||
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.external_loader_init" value="false"/>
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.external_loader_init" value="false"/>
|
||||||
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.frequency" value="24000"/>
|
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.frequency" value="8000"/>
|
||||||
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.halt_all_on_reset" value="false"/>
|
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.halt_all_on_reset" value="false"/>
|
||||||
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.log_file" value="/home/mrs/Personal/HDIoT/Smart_Household/iaq_wired_sensor/fw/Debug/st-link_gdbserver_log.txt"/>
|
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.log_file" value="/home/mrs/Personal/HDIoT/Smart_Household/iaq_wired_sensor/fw/Debug/st-link_gdbserver_log.txt"/>
|
||||||
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.low_power_debug" value="enable"/>
|
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.low_power_debug" value="enable"/>
|
||||||
|
Loading…
Reference in New Issue
Block a user