【树莓派】树莓派调光

一、树莓派非PWM引脚,模拟PWM调光

#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
#include <pthread.h>
unsigned int bedroom_brightness;
void *bedroom_brightness_set(void *arg)//线程函数
{	
	while(1){  // 设置一个周期为1ms,占空比为60%
			//2引脚低电平时发光
			digitalWrite(2, LOW);
			delayMicroseconds(1000-(bedroom_brightness*100));
			//高电平时熄灭
			digitalWrite(2, HIGH);
			delayMicroseconds(bedroom_brightness*100);  // 微秒级延迟,0.4ms
//		}
	}
}
void main(){
	pthread_t id;
	id = pthread_create(&id, NULL, bedroom_brightness_set, NULL);//创建线程
	
	wiringPiSetup();  //初始化硬件环境
	pinMode(2, OUTPUT);   
	while(1)
	{
		printf("brightness;");
		scanf("%d", &bedroom_brightness);//设定亮度,数值(0-10)
	}
}

二、树莓派PWM引脚调光

PS:仅支持PWM引脚,树莓派PWM引脚默认有GPIO1,其他参考引脚图

#include <wiringPi.h>
void bedroom_brightness_set(int *bedroom_brightness, int *bright_last)
{

	
	if(*bedroom_brightness < *bright_last)//调低亮度(下一次设定的亮度小于当前亮度)
	{
		for(*bright_last; *bedroom_brightness<*bright_last; --*bright_last)
		{
			pwmWrite(1, *bright_last);//向pwm中写入任意自己想要的值(默认0-1024)
			delay(1);
		}
		printf("亮度变低\n");
	}
	else if(*bedroom_brightness > *bright_last)//调高亮度(下一次设定的亮度大于当前亮度)
	{
		for(*bright_last; *bright_last<*bedroom_brightness; ++*bright_last)
		{
			pwmWrite(1, *bright_last);  //数值范围(0-1024)
			delay(1);
		}
		printf("亮度变高\n");
	}
	*bright_last = *bedroom_brightness;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值