新手入门
- 积分
- 16
- 金钱
- 16
- 注册时间
- 2023-4-4
- 在线时间
- 5 小时
|
stm32f1想通过mpu6050控制灯带顺时针或逆时针流水一次就停止。直到标志位MPU6050_GetFlag()变化才再流水。不知道怎么设置程序。目前处于一直流水,标志位MPU6050_GetFlag()变化会更新方向,但是还是一直流水。
- #include "stm32f10x.h" // Device header
- #include "OLED.h"
- #include "MPU6050.h"
- #include "DMP.h"
- #include "Delay.h"
- #include "LED.h"
- #include "Key.h"
- #include "RCC.h"
- #include "IO.h"
- #include "TIM3.h"
- #include "WS2812B.h"
- #include "OLED.h"
- #include <stdlib.h>
- #include "MPU6050_INT.h"
- #define Brightness 0x010101
- //关于MPU6050
- uint8_t ID, INT;
- int16_t AX, AY, AZ, GX, GY, GZ;
- float pitch, roll, yaw;
- uint8_t KeyNum, Count=0;
- uint8_t Lock=0, Flow, FlowCount;
- //关于WS2812B
- uint8_t MODE=1;
- uint8_t UpdateFlag=1;
- uint8_t Light_Mode, Light_Flag, AngleFlag=0;
- uint16_t Light_Time;
- #define WS2812B_LED_QUANTITY 29 //灯珠数量-1
- //后置函数的提前定义
- void Close(void);
- void WhiteLight(void);
- void WhiteLight_Up(void);
- void WhiteLight_Down(void);
- void MainLoop(void);
- void Init(void)
- {
- RCC_Init();
- Key_Init();
- WS2812B_Init();
- TIM3_SetIRQHandler(MainLoop);
- TIM3_Init();
- LED_Init();
- OLED_Init();
- MPU6050_Init();
- }
- int main(void)
- {
- Init();
- while(1)
- {
- get_angles((float)AX, (float)AY, (float)AZ, (float)GX, (float)GY, (float)GZ, &pitch, &roll, &yaw);
-
- KeyNum=Key_GetNum();
- if(KeyNum==0)
- {
- Lock=!Lock;
- if(Lock==1)
- {
- Light_Flag=1;
- Close();
- }
- else
- {
- Light_Flag=0;
- }
- }
- if(Lock==0)
- {
- // if(MPU6050_GetFlag()==1 && UpdateFlag==1)
- // {
- if(MPU6050_GetFlag()==1)
- {
- if(MPU6050_GetFlag()==1)
- {
- UpdateFlag=0;
- }
- if(MPU6050_GetFlag()==2)
- {
- UpdateFlag=1;
- }
- MODE=2;
- }
- // if(MPU6050_GetFlag()==2 && UpdateFlag==1)
- // {
- if(MPU6050_GetFlag()==2)
- {
- if(MPU6050_GetFlag()==2)
- {
- UpdateFlag=0;
- }
- if(MPU6050_GetFlag()==1)
- {
- UpdateFlag=1;
- }
- MODE=3;
- }
- }
- else
- {
- OLED_ShowString(2,11,"LOCK ");
- }
- switch(MODE)
- {
- case 1:Close();break;
- case 2:WhiteLight_Up();break;
- case 3:WhiteLight_Down();break;
- }
- }
- }
- void Close(void) //MODE=1
- {
- WS2812B_SetBuf(0x000000);
- WS2812B_UpdateBuf();
- }
- void WhiteLight_Up(void) //MODE=2
- {
- if(Light_Flag==0)
- {
- // if(UpdateFlag==1)
- // {
- uint8_t i;
- static uint8_t j;
- Light_Time=10;
- for(i=0;i<WS2812B_LED_QUANTITY;i++)
- {
- WS2812B_Buf[i]=WS2812B_Buf[i+1];
- }
- if(j<5)
- {
- WS2812B_Buf[WS2812B_LED_QUANTITY]=Brightness;
- }
- else
- {
- WS2812B_Buf[WS2812B_LED_QUANTITY]=0;
- }
-
- j++;
- j%=40;
- WS2812B_UpdateBuf();
- // }
- }
- }
- void WhiteLight_Down(void) //MODE=3
- {
- if(Light_Flag==0)
- {
- // if(UpdateFlag==1)
- // {
- uint8_t i;
- static uint8_t j;
- Light_Time=10;
- for(i=WS2812B_LED_QUANTITY;i>0;i--)
- {
- WS2812B_Buf[i]=WS2812B_Buf[i-1];
- }
- if(j<5)
- {
- WS2812B_Buf[0]=Brightness;
- }
- else
- {
- WS2812B_Buf[0]=0;
- }
- j++;
- j%=40;
- WS2812B_UpdateBuf();
- // }
- }
- }
- void MainLoop(void)
- {
- static uint16_t LoopCount;
- LoopCount++;
- if(LoopCount>=Light_Time)
- {
- LoopCount=0;
- }
- }
复制代码
|
|