如何正确设置PWM寄存器,以控制LED的亮度? c/arduino uno
const int photo_resistor PROGMEM = 0;
const int red_pin PROGMEM = 6;
void setup(){
TCCR0A = 0;
TCCR0B = 0;
// output for traffic light led
SET_BIT(DDRD, red_pin);
//photo resistor
CLEAR_BIT(DDRC, photo_resistor);
//adc topic 10
SET_BIT(ADCSRA, ADEN);
SET_BIT(ADCSRA, ADPS2);
SET_BIT(ADCSRA, ADPS1);
SET_BIT(ADCSRA, ADPS0);
SET_BIT(ADMUX, REFS0);
//pwm with timer 0 Red & Yellow Led
//prescale
CLEAR_BIT(TCCR0B, CS01);
SET_BIT(TCCR0B, CS02);
SET_BIT(TCCR0B, CS00);
//Compare for red
CLEAR_BIT(TCCR0A, COM0A0);
SET_BIT(TCCR0A, COM0A1);
Serial.begin(115200);
//WGM-Fast PWM
SET_BIT(TCCR0A, WGM00);
SET_BIT(TCCR0A, WGM01);
CLEAR_BIT(TCCR0B, WGM02);
}
/////////////////////////////////////////////////
void process(){
//sensor
char sensor_buffer[64];
SET_BIT(ADCSRA, ADSC);
while(ADCSRA & (1 << ADSC) ) {}
uint16_t sensor_data = ADC;
itoa(sensor_data, (char *)sensor_buffer,10);
Serial.println(sensor_data);
//always on green
OCR0A = sensor_data/4;
}
/////////////////////////////////////////////////
int main(){
setup();
for (;;){
process();
}
}
我的代码的逻辑正在起作用,但不确定我缺少什么。光孔仪正在工作,并为我提供了从969到49的值。在这里,我正在使用ADC转换数据,以便我可以通过PWM控制LED的亮度。我在做什么错?这是Tinkercad中Arduino的图像。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
也许这应该有助于 https://www.youtube.com/watch? >,您可能需要
Alalog_write(red_pin,&lt; Something 0-255&gt;)
maybe this should help https://www.youtube.com/watch?v=EVm0qVJ56II, you might need
analog_write(red_pin, <something 0 - 255>)