2016-03-31 30 views
1

我在原型設計時在Arduino Mega上寫了一個草圖。之後,我將它閃存到atmega328芯片。我在草圖上得到了奇怪的結果。爲了解決這個問題,我通過模塊將模塊複製到一個新的IDE窗口中,那是當我注意到analogWrite函數有些詭異的時候。爲了帶走所有其它變量,我上傳這個草圖其爲略微修改FADE例如草圖arduino atmega328在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和電阻器到該銷。當芯片開始運行代碼時,我所有的LED都閃爍,像這樣的串行數據

.5 
.0 
.5 
.0 
.5 
.0 
.5 
.0 
.5 
.0 
.5 
.0 
.5 
.10 

有什麼可能是錯誤的?

回答

1

奇怪的事情正在發生。我跑了複製和粘貼代碼後的程序,並得到預期的結果:

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 

你確定你已經粘貼產生在你身邊了意想不到的效果確切的代碼?數字前面的小點只是衆多奇怪事物之一。當然,交替的價值是另一回事。就像在10號和5號之後突然出現的那樣。簡而言之,魚腥似乎與模擬寫作無關。

除非是硬件問題。什麼值電阻器?電阻和LED是串聯的嗎? LED是否以0.5 Hz的頻率和0.5的佔空比閃爍?或不?

順便說一句,如果你的條件與256,而不是255檢查RBerteig是正確的他的版本確實比較好,但如果是這樣的問題,你會看到一個不同的行爲

+0

這是一個電阻問題......它太小了...更大的電阻是訣竅......而「。 「只是我使用的串口監視器...應該已經清理了一下 –

+0

我很高興你的程序現在可以工作。儘管如此,我看不出電阻器會如何影響串行監視器中顯示的結果。您可能需要進一步調查才能完全掌握正在發生的事情和原因。 –

0

一個明顯的問題是與這一行:

if (brightness == 0 || brightness == 255) { 

由於要通過添加(或減去)修飾brightness 5在每次迭代和256是不通過5整除,兩個端點都不是要考好。 將==測試更改爲不等式。

if (brightness <= 0 || brightness >= 255) { 
+0

這是股票草圖......即使如果我只有analogWrite,它就會失敗......我只是試過它,仍然是一樣的東西 –