我在做原型的时候写了一幅关于我的阿迪诺·梅加的草图。后来,我把它像一个atmega328芯片一样闪过。草图上到处都是奇怪的结果。为了修复它,我逐个模块地复制到一个新的IDE窗口中,这时我发现analogWrite函数有些可疑。为了去掉所有其他变量,我上传了这个草图,它是一个稍微修改过的淡出示例草图。
int led = 6;
int brightness = 0;
int fadeAmount = 5;
void setup() {
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop() {
Serial.println(brightness);
analogWrite(led, brightness);
brightness = brightness + fadeAmount;
if (brightness == 0 || brightness == 255) {
fadeAmount = -fadeAmount ;
}
delay(1000);
}它上传非常好,没有错误,我附加了一个引线和电阻到那个引脚上。当芯片开始运行代码时,我得到的全部是led闪烁和这样的串行数据
.5
.0
.5
.0
.5
.0
.5
.0
.5
.0
.5
.0
.5
.10它会有什么问题?
发布于 2016-04-01 00:43:53
奇怪的事情正在发生。我在复制和粘贴您的代码之后运行了这个程序,并得到了预期的结果:
0
5
10
15
20
25
30
35
40
45
50
55
60
65
70
75
80
85
90
95
100
105
110
115
120
125
130
135
140
145
150
155
160
165
170
175
180
185
190
195
200
205
210
215
220
225
230
235
240
245
250
255
250
245
240
235
230
225
220您确定已经粘贴了在您的侧产生意外结果的确切代码吗?数字前面的圆点只是许多奇怪的东西之一。当然,交替值是另一种。就像突然出现在seros和fives之后的.10一样。简而言之,可疑似乎与类似的写作无关。
除非是硬件问题。什么值电阻?电阻和LED是串联的吗?LED闪光灯的频率为0.5赫兹,占空比为0.5?还是不想?
顺便说一句,如果您的条件是用256而不是255来检查的话,RBerteig将是正确的。他的说法确实更好,但如果这是问题所在,你就会看到另一种行为。
发布于 2016-03-31 21:36:04
一个明显的问题是这一行:
if (brightness == 0 || brightness == 255) {由于您是通过在每次迭代中添加(或减去) 5来修改brightness的,而且256个不能被5整除,所以两个端点都不会测试。将==测试更改为不等式。
if (brightness <= 0 || brightness >= 255) {https://stackoverflow.com/questions/36344072
复制相似问题