2016-03-31 44 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と抵抗を取り付けました。チップがコードを実行し始めると、私はすべてこのような点滅とシリアルデータを得ます。

.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 

を、あなたはあなたの側で予期しない結果を生成し、正確なコードを貼り付けていますか?数字の前の点は、多くの奇妙なものの1つに過ぎません。もちろん交互の値は別のものです。 .10と同じように、突然serosとfivesの後に現れます。要するに、怪しさはアナログ・ライトとは無関係のようです。

ハードウェアに問題がなければ、どのような値の抵抗?抵抗とLEDは直列接続されていますか? 0.5Hzの周波数と0.5のデューティサイクルでLEDが点滅していますか?か否か?

でも...代わりに255の256彼のバージョンを確認し、あなたの状態は確かに良いですが、これが問題だった場合は、異なる動作

+0

それは抵抗の問題でした...それはあまりにも小さかった...大きな抵抗はトリックでした... "。 "私が使用しているシリアルモニタだけです...少し上にそれをきれいにしておくべきです –

+0

あなたのプログラムがうまくいきました。それでも、シリアルモニタに表示される結果に抵抗がどのように影響するかはわかりません。何が起きているのか、なぜ起きているのかを完全に把握するには、もう少し調査する必要があります。 –

0

明白な問題は、この行を次のとおりです。各反復で

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

あなたが追加(または減算)によりbrightnessを変更しているので、5および256は、どちらのエンドポイントがうまくテストするために起こっている5で割り切れません。 ==テストを不等式に変更してください。

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

を見るでしょう。これは、株式スケッチであればところで、RBerteigが正しいだろう私がanalogWriteを持っていれば、それは失敗します...私はちょうど同じことを試みました。 –

関連する問題