Jump to content

Управление лампой WS2812B_RGB с помощью HMI


Recommended Posts

Данный проект предназначен для управления RGB лампами с помощью дисплейного модуля STONE:
 
1. Управление цветом света 

2. Управление яркостью света 

3. Управление четырьмя режимами работы лампы

spacer.png

Принцип работы управляющего tft-lcd дисплея STONE
 
Модуль tft-lcd взаимодействует с MCU клиента посредством команд (шестнадцатеричный код), а MCU затем управляет работой подключенного устройства в соответствии с полученными командами.

spacer.png

Разработка графического интерфейса пользователя

spacer.png

Проводка и сварка
 
Завершив вышеописанное управление сенсорным дисплеем, мы можем сосредоточиться на разработке MCU и ламп WS2812B_RGB.

Но перед этим нам нужно провести сварочные работы.

Схема подключения

spacer.png

Адаптер питания 12В, который необходим для питания дисплейного модуля STONE STVC070WT-01 и для питания модуля MCU и лампы WS2812B_RGB путем понижения напряжения до 5В через dc-dc buck.

Аксессуары, используемые в проекте

spacer.png

сварка
 
Сварите эти части вместе, и эффект будет следующим:

spacer.png

Код драйвера STM32

Скрытый текст

#include "../BOARD/ws2812/ws2812.h"

#include "usart.h"

#include "delay.h"

 

 uint8_t PIXEL_NUM=60;

 

#define RGB_LED GPIO_Pin_7

#define RGB_LED_HIGH (GPIO_SetBits(GPIOA,RGB_LED))

#define RGB_LED_LOW (GPIO_ResetBits(GPIOA,RGB_LED))

 

void RGB_LED_Init(void)

{

GPIO_InitTypeDef  GPIO_InitStructure;

 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;  

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_SetBits(GPIOA,GPIO_Pin_7);

}

 

/********************************************************/

//

/********************************************************/

void RGB_LED_Write0(void)

{

RGB_LED_HIGH;

__nop();__nop();__nop();__nop();__nop();__nop();

RGB_LED_LOW;

__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();

__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();

__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();

__nop();__nop();

}

 

/********************************************************/

//

/********************************************************/

 

void RGB_LED_Write1(void)

{

RGB_LED_HIGH;

__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();

__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();

__nop();__nop();

RGB_LED_LOW;

__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();

__nop();__nop();

}

 

void RGB_LED_Reset(void)

{

RGB_LED_LOW;

delay_us(80);

}

 

void RGB_LED_Write_Byte(uint8_t byte)

{

uint8_t i;

 

for(i=0;i<8;i++)

{

if(byte&0x80)

{

RGB_LED_Write1();

}

else

{

RGB_LED_Write0();

}

byte <<= 1;

}

}

 

void RGB_LED_Write_24Bits(uint8_t red,uint8_t green,uint8_t blue)

{

uint16_t i=0;

for( i=0;i

{

RGB_LED_Write_Byte(green);

RGB_LED_Write_Byte(red);

RGB_LED_Write_Byte(blue);

}

 

}

 

void RGB_LED_Write_24Bits_Efect(uint8_t red,uint8_t green,uint8_t blue)

{

RGB_LED_Write_Byte(green);

RGB_LED_Write_Byte(red);

RGB_LED_Write_Byte(blue);

}

 

 

void RGB_LED_Red(void)

{

 uint8_t i;

//4?LED???

for(i=0;i

{

RGB_LED_Write_24Bits(0, 0xff, 0);

}

}

 

void RGB_LED_Green(void)

{

uint8_t i;

 

for(i=0;i

{

RGB_LED_Write_24Bits(0xff, 0, 0);

}

}

 

void RGB_LED_Blue(void)

{

uint8_t i;

 

for(i=0;i

{

RGB_LED_Write_24Bits(0x40, 0x50, 0);

}

}

 

 

#ifndef __WS2812_H

#define __WS2812_H

 

#include "stm32f10x.h"

 

//#define PIXEL_NUM 120

extern uint8_t PIXEL_NUM;

#define WS_HIGH 0XF8

#define WS_LOW  0XE0

 

 

#define RED_COLOR     0x07

#define GREEN_COLOR    0x08

#define BLUE_COLOR  0x09

#define WHITE_COLOR  0x06

#define LED_ALL_ONOFF  0x01

 

#define BLINK1         0x0A        

#define BLINK2         0x0B  

#define BLINK3         0x0C  

#define BLINK4         0x0D  

#define LightOn      0x00

#define LightOff     0x01

void RGB_LED_Reset(void);

void RGB_LED_Init(void);

void RGB_LED_Reset(void);

void RGB_LED_Write_24Bits(uint8_t red,uint8_t green,uint8_t blue);

void RGB_LED_Write_24Bits_effect(uint8_t red,uint8_t green,uint8_t blue);

uint32_t ws281x_wheel(uint8_t wheelPos);

void RGB_LED_Write_24Bits_Efect(uint8_t green,uint8_t red,uint8_t blue);

#endif /* __WS2812_H */

Код STM32
 
Кнопки и текст на экране дисплея имеют соответствующие адреса. В данном проекте адреса компонентов экрана дисплея следующие:

Скрытый текст

#define RED_COLOR     0x07

#define ICON_WHITE_ADDR  0x02

#define ICON_RED_ADDR    0x03

#define ICON_GREEN_ADDR  0x04

#define ICON_BLUE_ADDR   0x05

 

#define TEXT_RED_ADDR         0x07

#define TEXT_GREEN_ADDR       0x08

#define TEXT_BLUE_ADDR        0x09

#define TEXT_WHITE_ADDR       0x06

 

#define SWITCH_ONOFF_ADDR     0x01

 

#define ICON_ON          0x01

#define ICON_OFF         0x00

u8 data_send[8]=  {0xA5, 0x5A, 0x05, 0x82, 0x00, 0x00, 0x00,0x00};

 

Data sent to the display screen should be sent according to the corresponding format:

U8 data_send[8]= {0xA5, 0x5A, 0x05, 0x82, 0x00,0x00,0x00,0x00};

Data [4]\ data[5] is the high and low order of component addresses.

Data [6]\ data[7] is the data to be displayed by the component.

The main logical code will be provided below:

#include "stm32f10x.h"

#include "usart.h"

#include "delay.h"

#include "../BOARD/ws2812/ws2812.h"

struct RGB_COLOR

{

u8 C_RED;

u8 C_GREEN;

u8 C_BLUE;

u8 C_WHITE;

 

u8 C_RED_FLAG;

u8 C_GREEN_FLAG;

u8 C_BLUE_FLAG;

};

#define ICON_WHITE_ADDR  0x02

#define ICON_RED_ADDR    0x03

#define ICON_GREEN_ADDR  0x04

#define ICON_BLUE_ADDR   0x05

 

#define TEXT_RED_ADDR         0x07

#define TEXT_GREEN_ADDR       0x08

#define TEXT_BLUE_ADDR        0x09

#define TEXT_WHITE_ADDR       0x06

#define SWITCH_ONOFF_ADDR     0x01

#define ICON_ON          0x01

#define ICON_OFF         0x00

u8 data_send[8]=  {0xA5, 0x5A, 0x05, 0x82, 0x00, 0x00, 0x00,0x00};

void UART1_Send_Array(u8 send_array[],unsigned char num)

{

        u8 i=0;  

        while(i

        {

                USART_SendData(USART1,send_array[i]);  

                while( USART_GetFlagStatus(USART1,USART_FLAG_TC)!= SET);  

                i++;  

        }

}

int main(void)

{

  uart_init(115200);

  delay_init();

struct RGB_COLOR USER_RGB_COLOR;

USER_RGB_COLOR.C_BLUE=0;

USER_RGB_COLOR.C_GREEN=0;

USER_RGB_COLOR.C_RED=0;

USER_RGB_COLOR.C_RED_FLAG=1;

USER_RGB_COLOR.C_GREEN_FLAG=1;

USER_RGB_COLOR.C_BLUE_FLAG=1;

u16 k,q;

u8 BLINK_2=0;

u8 USER_R=0,USER_G=0,USER_B=0,COLOR_TYPE=0,COLOR_DIR=0;

u8 blink_type=0;

u16 times=0;

RGB_LED_Init();

while(1)

{

if(USART_RX_END)

{    

switch (USART_RX_BUF[5])

{

case 0x33:

PIXEL_NUM=USART_RX_BUF[8];

break;

case LED_ALL_ONOFF:

blink_type=0;

if(USART_RX_BUF[8]==0)

{

data_send[5]=ICON_RED_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_RED_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

 

data_send[5]=ICON_GREEN_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_GREEN_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

 

data_send[5]=ICON_BLUE_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_BLUE_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

 

USER_RGB_COLOR.C_BLUE=0;

USER_RGB_COLOR.C_GREEN=0;

USER_RGB_COLOR.C_RED=0;

data_send[5]=ICON_WHITE_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_WHITE_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

USER_RGB_COLOR.C_WHITE=0;

}

else

{

USER_RGB_COLOR.C_BLUE=0x32;

USER_RGB_COLOR.C_GREEN=0x10;

USER_RGB_COLOR.C_RED=0x24;

USER_RGB_COLOR.C_RED_FLAG=0;

USER_RGB_COLOR.C_GREEN_FLAG=0;

USER_RGB_COLOR.C_BLUE_FLAG=0;

 

data_send[5]=ICON_RED_ADDR;

data_send[7]=ICON_ON;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_RED_ADDR;

data_send[7]=0x24;

UART1_Send_Array(data_send,8);

 

data_send[5]=ICON_GREEN_ADDR;

data_send[7]=ICON_ON;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_GREEN_ADDR;

data_send[7]=0x10;

UART1_Send_Array(data_send,8);

 

data_send[5]=ICON_BLUE_ADDR;

data_send[7]=ICON_ON;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_BLUE_ADDR;

data_send[7]=0x32;

UART1_Send_Array(data_send,8);

}

RGB_LED_Write_24Bits(USER_RGB_COLOR.C_RED, USER_RGB_COLOR.C_GREEN, USER_RGB_COLOR.C_BLUE);

 

break;

case RED_COLOR:

blink_type=0;

if(USER_RGB_COLOR.C_RED_FLAG==1)

{

if(USART_RX_BUF[8]==0)

break;

}

data_send[5]=ICON_WHITE_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

 

data_send[5]=TEXT_WHITE_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

USER_RGB_COLOR.C_WHITE=0;

 

data_send[5]=SWITCH_ONOFF_ADDR;

data_send[7]=ICON_ON;

UART1_Send_Array(data_send,8);

 

data_send[5]=ICON_RED_ADDR;

if(USART_RX_BUF[8]>0)data_send[7]=ICON_ON;

else data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

 

USER_RGB_COLOR.C_RED=USART_RX_BUF[8];

USER_RGB_COLOR.C_RED_FLAG=0;

if(USER_RGB_COLOR.C_RED==0)USER_RGB_COLOR.C_RED_FLAG=1;

 

if((USER_RGB_COLOR.C_RED==0x00)&&(USER_RGB_COLOR.C_GREEN==0x00)&&(USER_RGB_COLOR.C_BLUE==0x00)&&(USER_RGB_COLOR.C_WHITE==0x00))

{

data_send[5]=SWITCH_ONOFF_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

}

RGB_LED_Write_24Bits(USER_RGB_COLOR.C_RED, USER_RGB_COLOR.C_GREEN, USER_RGB_COLOR.C_BLUE); // Red

 

break;

case GREEN_COLOR:

blink_type=0;

if(USER_RGB_COLOR.C_GREEN_FLAG==1)

{

if(USART_RX_BUF[8]==0)

break;

}

data_send[5]=ICON_GREEN_ADDR;

if(USART_RX_BUF[8]>0)data_send[7]=ICON_ON;

else data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

 

data_send[5]=ICON_WHITE_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_WHITE_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

USER_RGB_COLOR.C_WHITE=0;

 

data_send[5]=SWITCH_ONOFF_ADDR;

data_send[7]=ICON_ON;

UART1_Send_Array(data_send,8);

 

USER_RGB_COLOR.C_GREEN=USART_RX_BUF[8];

USER_RGB_COLOR.C_GREEN_FLAG=0;

if(USER_RGB_COLOR.C_GREEN==0)USER_RGB_COLOR.C_GREEN_FLAG=1;

 

if((USER_RGB_COLOR.C_RED==0x00)&&(USER_RGB_COLOR.C_GREEN==0x00)&&(USER_RGB_COLOR.C_BLUE==0x00)&&(USER_RGB_COLOR.C_WHITE==0x00))

{

data_send[5]=SWITCH_ONOFF_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

}

RGB_LED_Write_24Bits(USER_RGB_COLOR.C_RED, USER_RGB_COLOR.C_GREEN, USER_RGB_COLOR.C_BLUE);  // Green

break;

case BLUE_COLOR:

blink_type=0;

if(USER_RGB_COLOR.C_BLUE_FLAG==1)

{

if(USART_RX_BUF[8]==0)

break;

}

data_send[5]=ICON_BLUE_ADDR;

if(USART_RX_BUF[8]>0)data_send[7]=ICON_ON;

else data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

 

data_send[5]=ICON_WHITE_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_WHITE_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

USER_RGB_COLOR.C_WHITE=0;

 

data_send[5]=SWITCH_ONOFF_ADDR;

data_send[7]=ICON_ON;

UART1_Send_Array(data_send,8);

 

USER_RGB_COLOR.C_BLUE=USART_RX_BUF[8];

USER_RGB_COLOR.C_BLUE_FLAG=0;

if(USER_RGB_COLOR.C_BLUE==0)USER_RGB_COLOR.C_BLUE_FLAG=1;

 

if((USER_RGB_COLOR.C_RED==0x00)&&(USER_RGB_COLOR.C_GREEN==0x00)&&(USER_RGB_COLOR.C_BLUE==0x00)&&(USER_RGB_COLOR.C_WHITE==0x00))

{

data_send[5]=SWITCH_ONOFF_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

}

RGB_LED_Write_24Bits(USER_RGB_COLOR.C_RED, USER_RGB_COLOR.C_GREEN, USER_RGB_COLOR.C_BLUE); // Blue

break;

case WHITE_COLOR:

blink_type=0;

data_send[5]=ICON_WHITE_ADDR;

if(USART_RX_BUF[8]>0)data_send[7]=ICON_ON;

else data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

 

data_send[5]=ICON_RED_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

 

data_send[5]=TEXT_RED_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

 

data_send[5]=ICON_GREEN_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_GREEN_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

 

data_send[5]=ICON_BLUE_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_BLUE_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

 

USER_RGB_COLOR.C_BLUE=0;

USER_RGB_COLOR.C_GREEN=0;

USER_RGB_COLOR.C_RED=0;

USER_RGB_COLOR.C_RED_FLAG=1;

USER_RGB_COLOR.C_GREEN_FLAG=1;

USER_RGB_COLOR.C_BLUE_FLAG=1;

data_send[5]=SWITCH_ONOFF_ADDR;

data_send[7]=ICON_ON;

UART1_Send_Array(data_send,8);

USER_RGB_COLOR.C_WHITE=USART_RX_BUF[8];

 

if((USER_RGB_COLOR.C_RED==0x00)&&(USER_RGB_COLOR.C_GREEN==0x00)&&(USER_RGB_COLOR.C_BLUE==0x00)&&(USER_RGB_COLOR.C_WHITE==0x00))

{

data_send[5]=SWITCH_ONOFF_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

}

RGB_LED_Write_24Bits(USER_RGB_COLOR.C_WHITE, USER_RGB_COLOR.C_WHITE, USER_RGB_COLOR.C_WHITE);

break;

case BLINK1:

blink_type=1;

data_send[5]=ICON_RED_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_RED_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

 

data_send[5]=ICON_GREEN_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_GREEN_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

 

data_send[5]=ICON_BLUE_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_BLUE_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

 

USER_RGB_COLOR.C_BLUE=0;

USER_RGB_COLOR.C_GREEN=0;

USER_RGB_COLOR.C_RED=0;

data_send[5]=ICON_WHITE_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_WHITE_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

USER_RGB_COLOR.C_WHITE=0;

 

data_send[5]=SWITCH_ONOFF_ADDR;

data_send[7]=ICON_ON;

UART1_Send_Array(data_send,8);

 

break;

case BLINK2:

blink_type=2;

data_send[5]=ICON_RED_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_RED_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

 

data_send[5]=ICON_GREEN_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_GREEN_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

 

data_send[5]=ICON_BLUE_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_BLUE_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

 

USER_RGB_COLOR.C_BLUE=0;

USER_RGB_COLOR.C_GREEN=0;

USER_RGB_COLOR.C_RED=0;

data_send[5]=ICON_WHITE_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_WHITE_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

USER_RGB_COLOR.C_WHITE=0;

 

data_send[5]=SWITCH_ONOFF_ADDR;

data_send[7]=ICON_ON;

UART1_Send_Array(data_send,8);

 

break;

 

case BLINK3:

blink_type=3;

data_send[5]=ICON_RED_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_RED_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

 

data_send[5]=ICON_GREEN_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_GREEN_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

 

data_send[5]=ICON_BLUE_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_BLUE_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

 

USER_RGB_COLOR.C_BLUE=0;

USER_RGB_COLOR.C_GREEN=0;

USER_RGB_COLOR.C_RED=0;

// USER_RGB_COLOR.C_RED_FLAG=1;

// USER_RGB_COLOR.C_GREEN_FLAG=1;

// USER_RGB_COLOR.C_BLUE_FLAG=1;

 

data_send[5]=ICON_WHITE_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_WHITE_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

USER_RGB_COLOR.C_WHITE=0;

 

data_send[5]=SWITCH_ONOFF_ADDR;

data_send[7]=ICON_ON;

UART1_Send_Array(data_send,8);

break;

case BLINK4:

blink_type=4;

data_send[5]=ICON_RED_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_RED_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

 

data_send[5]=ICON_GREEN_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_GREEN_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

 

data_send[5]=ICON_BLUE_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_BLUE_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

 

USER_RGB_COLOR.C_BLUE=0;

USER_RGB_COLOR.C_GREEN=0;

USER_RGB_COLOR.C_RED=0;

data_send[5]=ICON_WHITE_ADDR;

data_send[7]=ICON_OFF;

UART1_Send_Array(data_send,8);

data_send[5]=TEXT_WHITE_ADDR;

data_send[7]=0x00;

UART1_Send_Array(data_send,8);

USER_RGB_COLOR.C_WHITE=0;

 

data_send[5]=SWITCH_ONOFF_ADDR;

data_send[7]=ICON_ON;

UART1_Send_Array(data_send,8);

break;

default:

USART_RX_END=0;

USART_RX_STA=0;

break;

}

USART_RX_STA=0;

USART_RX_END=0;

}

else

{

if(blink_type==1)

{

times++;

if(times>=14)

{

times=0;

if(COLOR_DIR==0)

{

if(COLOR_TYPE==0)

{

USER_R++;

USER_G=0;

USER_B=0;

}

else if(COLOR_TYPE==1)

{

USER_R=0;

USER_G++;

USER_B=0;

}

else if(COLOR_TYPE==2)

{

USER_R=0;

USER_G=0;

USER_B++;

}

else if(COLOR_TYPE==3)

{

USER_R++;

USER_G++;

USER_B=0;

}

else if(COLOR_TYPE==4)

{

USER_R=0;

USER_G++;

USER_B++;

}

else if(COLOR_TYPE==5)

{

USER_R++;

USER_G=0;

USER_B++;

}

if((USER_R>=250)||(USER_G>=250)||(USER_B>=250))

{

COLOR_DIR=1;

}

}

else

{

if(COLOR_TYPE==0)

{

USER_R--;

USER_G=0;

USER_B=0;

}

else if(COLOR_TYPE==1)

{

USER_R=0;

USER_G--;

USER_B=0;

}

else if(COLOR_TYPE==2)

{

USER_R=0;

USER_G=0;

USER_B--;

}

else if(COLOR_TYPE==3)

{

USER_R--;

USER_G--;

USER_B=0;

}

else if(COLOR_TYPE==4)

{

USER_R=0;

USER_G--;

USER_B--;

}

else if(COLOR_TYPE==5)

{

USER_R--;

USER_G=0;

USER_B--;

}

if((USER_R==0x02)||(USER_G==0x02)||(USER_B==0x02))

{

COLOR_DIR=0;

COLOR_TYPE++;

if(COLOR_TYPE>5)

COLOR_TYPE=0;

}

}

RGB_LED_Write_24Bits(USER_R,USER_G,USER_B);

}

delay_ms(1);

}

else if(blink_type==2)

{

k++;

if(k>=150)

{

k=0;

q=200;

{

BLINK_2++;

if(BLINK_2>8)BLINK_2=0;

}

if(BLINK_2==0)

RGB_LED_Write_24Bits(q,0,0);

else if(BLINK_2==1)

RGB_LED_Write_24Bits(0,q,0);

else if(BLINK_2==2)

RGB_LED_Write_24Bits(0,0,q);

else if(BLINK_2==3)

RGB_LED_Write_24Bits(q,q,0);

else if(BLINK_2==4)

RGB_LED_Write_24Bits(0,q,q);

else if(BLINK_2==5)

RGB_LED_Write_24Bits(q,0,q);

else if(BLINK_2==6)

RGB_LED_Write_24Bits(q-100,q,0);

else if(BLINK_2==7)

RGB_LED_Write_24Bits(0,q-80,q);

else if(BLINK_2==8)

RGB_LED_Write_24Bits(q,0,q-120);

else if(BLINK_2==9)

RGB_LED_Write_24Bits(40,q-100,q-70);

else if(BLINK_2==10)

RGB_LED_Write_24Bits(q,100,q-80);

 

}

delay_ms(1);

}

else if(blink_type==3)

{

k++;

if(k>=1000)

{

k=0;

{

BLINK_2++;

if(BLINK_2>5)BLINK_2=0;

}

{

if(BLINK_2==0)

RGB_LED_Write_24Bits(q,0,0);

else if(BLINK_2==1)

RGB_LED_Write_24Bits(0,q,0);

else if(BLINK_2==2)

RGB_LED_Write_24Bits(0,0,q);

else if(BLINK_2==3)

RGB_LED_Write_24Bits(q,q,0);

else if(BLINK_2==4)

RGB_LED_Write_24Bits(0,q,q);

else if(BLINK_2==5)

RGB_LED_Write_24Bits(q,0,q);

}

}

delay_ms(1);

}

else if(blink_type==4)

{

k++;

if(k>=500)

{

k=0;

q=0;

BLINK_2++;

if(BLINK_2>5)BLINK_2=0;

}

q++;

if(q>=250)q=0;

if(BLINK_2==0)

RGB_LED_Write_24Bits(q,0,0);

else if(BLINK_2==1)

RGB_LED_Write_24Bits(0,q,0);

else if(BLINK_2==2)

RGB_LED_Write_24Bits(0,0,q);

else if(BLINK_2==3)

RGB_LED_Write_24Bits(q,q,0);

else if(BLINK_2==4)

RGB_LED_Write_24Bits(0,q,q);

else if(BLINK_2==5)

RGB_LED_Write_24Bits(q,0,q);

delay_ms(1);

}

else

{

 

 

}

}

}  

}

Наконец, код загружается в микросхему STM32, и готовая печатная плата подключается к экрану дисплея управления, при этом гарантируется стабильность электропитания. Затем яркость и цвет RGB-лампы можно контролировать с помощью модуля дисплея управления STONE.

Окончательная схема подключения оборудования

spacer.png

Эффект бега

spacer.png

spacer.png

видеодемонстрация

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Сообщения


  • Проверенный временем качественный Японский припой. Содержит: 63SN, 37PB, канифоли 1.2%. Вес: 50г, 100г и 500г. Диаметр: 0.3мм, 0.5мм, 0.6мм, 0.8мм, 1мм

  • Similar Content

    • By Fordli
      Необходимые материалы
      ESP32
      Электронный замок KOB
      Реле
      Сенсорный дисплей STONE STWI070WT-01
      Модуль MFRC522
      Реализованная функция
      1. регистрация карты.
      2. регистрация имени пользователя и пароля.
      3. проведение картой для разблокировки электронного замка.
      4. Имя пользователя и пароль для разблокировки электронного замка.
      Схема подключения

      Разработка графического интерфейса пользователя

      видеодемонстрация
       
       
    • By Fordli
      Как заставить яркость светодиодов меняться при сложении и вычитании чисел?
      Я просматриваю множество способов использования PWM или analogwrite() в Интернете и предполагаю, что возвращаемое значение моей кнопки будет таким
      A5 5A 06 83 00 01 01 00 01
      A5 5A 06 83 00 01 01 00 02
      A5 5A 06 83 00 01 01 00 03
      И так далее, то есть я использую analogwrite() для прямого считывания последней цифры?
      Ниже приводится содержание моего дисплея.

    • By Fordli
      Недавно я завершил проект по отпиранию двери с помощью сенсорного экрана с пронесенной картой.
      Как решить проблему, когда MFRC522 не называет тип при запуске Arduino
      #include <SoftwareSerial.h> #include <Servo.h> #include <SPI.h> #include <MFRC522.h> #include <IRremote.h> #define SS_PIN 10 // customize the two PIN ports of the RC522 #define RST_PIN 9 #define RECV_PIN 5 // IR receive pins #define CARDS 4 //number of cards #define SERVO_PIN 6 // Servo port #define BUZZ_PIN 8 //buzzer pin long int IR_ID = 0xFFABCD; //define IR variable string ESP01S_Data = "". decode_results result. const byte User_ID[CARDS][4] = { {0xDD, 0xAA, 0xBB, 0x11}, // campus card {0xAD, 0x99, 0xDD, 0xEE}, }; //Save multiple card uid values MFRC522 rfid(SS_PIN, RST_PIN); //new RC522 object Servo myservo; SoftwareSerial EspSerial(3, 2); // RX, TX IRrecv irrecv(RECV_PIN);  
    • By Fordli
      Какой интерфейс использует STM32? Когда я использую arduino для соединения с моим lcd, интерфейс меняется на TTL, может ли STM32 использовать TTL интерфейс?
    • By Fordli
      У меня есть предварительная идея, что я хотел бы сделать металлоискатель, используя сенсорный дисплей. Сейчас у меня есть сенсорный дисплей, микроконтроллер ESP8266, зуммер, и я приобрел дополнительный чувствительный элемент Холла.
      Это все, что мне нужно использовать? Может ли кто-нибудь с опытом в этой области подсказать мне идею?
×
×
  • Create New...