首页 > 其他分享 >通用定时器功能案例 RGB 直流电机 舵机 超声波

通用定时器功能案例 RGB 直流电机 舵机 超声波

时间:2024-03-18 15:58:30浏览次数:14  
标签:定时器 舵机 配置 flag RGB key 按键

复盘局:

RGB彩灯:(定时器输出比较功能)

        功能效果:按下按键1亮红灯  按下按键2亮绿灯  按下按键3亮蓝灯  按下按键4随机变色

RGB彩灯原理:通过改变三个灯不同的亮度混合在一起形成不同的颜色

总体配置思路:

        1.初始化配置

        {

                /*IO控制器配置*/

                /*定时器控制器通道配置*/

        }

       2. 定时中断函数处理随机颜色变化事件

注意点:彩灯的随机颜色变化只能在定时中断中完成每100msRGB随机变化一次颜色 同时又要配合按键一起使用所以这里需要用到标志位思想 用标志位决定要进入的状态

/***************主函数*****************/

int main(void)
{
	NVIC_SetPriorityGrouping(5);
	usart1_init(115200);
	tim3_ch1_pwm();
 	rgb_init();
	key_init();
	tim7_interrupt_ms(1);
	
	while(1)
	{
		u8 key=0xff;
		key=key_scan();
		if(key==1)
		{
			rgb_flag=0;
			RGB_R=999;
			RGB_G=0;
			RGB_B=0;
		}
		else if(key==2)
		{
			rgb_flag=0;
			RGB_R=0;
			RGB_G=999;
			RGB_B=0;
		}
		else if(key==3)
		{
			rgb_flag=0;
			RGB_R=0;
			RGB_G=0;
			RGB_B=999;
		}
		else if(key==4)
		{
			rgb_flag=1;
		}
		
	}

	
	return 0;
}
/*****每100ms进一次定时中断 满足标志位置一时 随机改变颜色*****/
if(tim7_cnt[2]==100) //RGB
	{
		tim7_cnt[2]=0;
		if(rgb_flag==1)
		{
			RGB_R+=50;
			if(RGB_R>999){RGB_R=0;}
			RGB_G+=150;
			if(RGB_G>999){RGB_G=0;}
			RGB_B+=255;
			if(RGB_B>999){RGB_B=0;}
		}

	}	

直流电机:(定时器输出比较功能)

        功能效果:用按键改变直流电机的转速 按下按键1电机启动,按下按键2电机关机,按下按键3电机加速,按下按键4电机减速

        原理:利用按键扫描函数,当按下按键时改变比较寄存器里的值从而改变电机的转速

        总体配置思路:

        初始化配置

        {

                /*IO控制器配置*/

                /*定时器控制器通道配置*/

        }

优化以及注意点:1.只有在开机状态下才能加速或者减速(定义标志位思想)

                              2.在关机时保存下关机时的速度,下次开机时还能以上次关机时的速度转动

/*********主函数******/

int main(void)
{
	u8 key;
	u16 motor_flag=0;
	u16 m_val=500; //保存每次变化的值
	NVIC_SetPriorityGrouping(5);
	usart1_init(115200);
	motor_init();     //直流电机
	key_init();
	tim7_interrupt_ms(1);
	
	while(1)
	{
		key=key_scan();
		if(key==1)
		{
			MOTOR_VAL = m_val;
			motor_flag=1;
		}
		else if(key==2)
		{
			MOTOR_VAL=0;
			motor_flag=0;
		}
		else if(key==3 && MOTOR_VAL<1000 && motor_flag)
		{
			MOTOR_VAL+=100;
			m_val=MOTOR_VAL;
		
		}
		else if(key==4 && MOTOR_VAL>0 && motor_flag)
		{
			MOTOR_VAL-=100;
			m_val=MOTOR_VAL;
		}
			
	}
		
	
	return 0;
}

舵机:(定时器输出比较功能)

         功能效果:通过红外触感按键,触碰一次转动角度增加45度,当转到180度时回到原置点0度

        原理:给舵机设置一个20ms的时基脉冲,通过改变比较寄存器的值从而改变舵机的角度转变

    初始化配置

        {

                /*IO控制器配置*/

                /*定时器控制器通道配置*/

        }

超声波:(定时器输入捕获功能)

         功能效果:每100ms测量一次距离,当距离小于3cm的时候蜂鸣器报警

          原理:给超声波模块TRIG至少10us的高电平触发测距,模块自动发送8个40hz的方波,自动检测是否有信号返回,如果有遮挡物就有信号返回,通过IO口ECHO输出一个高电平,高电平的持续时间就是超声波从发射到返回的时间。根据说明书提供的公式就能得到距离

        总体配置思路:

                定时器初始化配置函数

                {

                        ECHO端口寄存器配置

                        定时器控制器初始化配置

                        NVIC控制器配置

                }

                传感器功能函数

                {

                        定时器初始化配置函数

                        TRIG端口控制器配置

                }

                中断服务函数

                {

                        //更新中断(记录周期溢出次数)

                        //触发中断

                }

                定时中断函数

                {

                        开始测距

                }

标签:定时器,舵机,配置,flag,RGB,key,按键
From: https://blog.csdn.net/weixin_61618197/article/details/136805056

相关文章

  • STM32 TIM3 定时器应用之数码管显示定时时间
     实现目标1、STM32基于HAL库定时器的使用;2、加强数码管的学习。一、定时器概述?1、生活中哪些场景会用到定时器?2、STM32F1定时器二、原理图设计三、STM32CubeMX配置1.定时器时钟配置2.定时器3、数码管、蜂鸣器的配置  3.开启定时器3中断四、程序......
  • 使用定时器中断进行延时,可能会遇到的一个小bug
    之前分享过一篇“使用定时器中断进行延时,取代delay”的文章:(https://blog.csdn.net/qq_44139306/article/details/136481381?spm=1001.2014.3001.5501)在后续的使用过程中,发现了一个bug:即:定时器标志不要在刚使用完一次时就清零,可以在下一次赋值计数值前把它清零。特别是......
  • 多线程(代码案例: 单例模式, 阻塞队列, 生产者消费者模型,定时器)
    设计模式是什么类似于棋谱一样的东西计算机圈子里的大佬为了能让小菜鸡的代码不要写的太差针对一些典型的场景,给出了一些典型的解决方案这样小菜鸡们可以根据这些方案(ACM里面叫板子,象棋五子棋里叫棋谱,咱这里叫设计模式),略加修改,这样代码再差也差不到哪里去......
  • XADC采集外部信号实时显示在RGB屏幕中
    概述XADC在Xilinx7系列器件上可用。TheXADCisavailableinallArtix-7,Kintex-7,Virte-7,andZynq-7000SoCdevices.XADC需要例化使用,但是如果使用JTAG访问的话,就不需要例化,直接在Vivado软件中就可以直接访问XADC的各项数据,包括芯片温度、电压等数据。The......
  • 89C52RC定时器(自用复习笔记)
    一、定时器作用(1)用于计时系统,可实现软件计时,或者使用程序每隔一固定时间完成一项操作。(2)替代长时间的Delay,提高CPU的运行效率和处理速度。(3)...操作系统任务切换,多任务执行。二、定时器资源定时器个数:3个(T0、T1、T2),T0,T1与传统51单片机兼容。三、定时器工作原理定时器......
  • RGBA中的阿尔法通道
    RGB颜色模型是一种基于红色(R)、绿色(G)、蓝色(B)三个颜色通道的加色模型,用于通过不同的颜色混合产生广泛的颜色。而在RGB模型基础上添加的阿尔法通道(Alphachannel)则用于表示透明度信息,可以控制颜色的不透明度或透明度,使得可以实现颜色的混合以及创建具有透明或半透明效果的图像。......
  • 定时器
    Timerimportjava.util.Timer;importjava.util.TimerTask;/***@authorPickle*@versionV1.0*@date2024/3/1215:06*/publicclassTimerDemo{publicstaticvoidmain(String[]args){//Timer本身也是一个线程finalTimertimer=new......
  • C#3种常见的定时器(多线程)
    总结以下三种方法,实现c#每隔一段时间执行代码:方法一:调用线程执行方法,在方法中实现死循环,每个循环Sleep设定时间;调用线程执行方法,在方法中实现死循环,每个循环Sleep设定时间Threadthread=newThread(newThreadStart(obj.Method1));thread.Start();方法二:使用System.Timers......
  • STM32标准库通用定时器输出比较
    STM32标准库通用定时器输出比较1.初始化voidTIM2_Init(){ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能TIM2时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA时钟 GPIO_InitTypeDefGPIO_InitSt......
  • STM32标准库通用定时器输入捕获
    STM32标准库定时器输入捕获1.输入捕获介绍输入捕获为STM32定时器的一个功能,可以用来测量输入信号的频率和占空比。具体原理:当输入信号经过比较捕获通道时,STM32会依据通道的极性设置决定是否触发捕获中断TIM_IT_CCx。此时定时器会将当前计数值TIMx->CNT的值保存在TIMx->CCRx中,通......