Arduinoトラブルシューティング

Arduinoガイド(Getting Started)の日本語訳のページです
garretlab
Arduinoトラブルシューティング

ArduinoのTroubleshootingのページの翻訳です。

Arduino トラブルシューティング

トラブルシューティング
1 Arduinoボードにプログラムをアップロードできないのはなぜですか?
2 (Mac OS Xで)"Build folder disappeared or could not be written"が出るのはなぜですか?
3 MacでJavaを更新した後、Arduinoソフトウェアを起動できないのはなぜですか?
4 プログラムをコンパイルするときに、java.lang.StackOverflowErrorが出るのはなぜですか?
5 (Arduino Diecimilaより古い場合)Arduinoボードに外部電源から電力を供給したときにスケッチが開始しないのはなぜですか?
6 (Windowsで)プログラムをアップロードするときにArduinoソフトウェアが固まるのはなぜですか?
7 Arduinoボードが起動しないのはなぜですか(緑の電源LEDが点灯しません)?
8 Diecimilaがスケッチを開始するのに長時間(6から8秒)かかるのはなぜですか?
9 WindowsでArduino.exeを実行したときにエラーが出たらどうすればいいですか?
10 古いMac OS XでArduinoソフトウェアが動かないのはなぜですか?
11 Arduinoソフトウェアを起動するとき、ネイティブライブラリであるlibrxtxDerial.jnilib 関連して、UnsatisfiedLinkError が出たときにどうすればいいですか?
12 "Could not find the main class."というエラーの場合はどうすればいいですか?
13 Windowsでcygwinと競合するときはどうすればいいですか?
14 (Windowsで)Arduinoソフトウェアの起動や Tools メニューを開くのに時間がかかるのはなぜですか?
15 ArduinoボードがTools > Serial Portメニューに現れないのはなぜですか?
16 (Macで)コードをアップロードしたりシリアルモニタを使うときに、gnu.io.PortInUseExceptionが出るときはどうすればいいですか?
17 FTDI USBドライバに問題があります。
18 Arduinoボードの電源を入れたときやリセットしたときにスケッチが開始しないのはなぜですか?
19 スケッチのアップロードは成功したように見えるのに、何も起こらないのはなぜですか?
20 スケッチの大きさを小さくするにはどうすればいいですか?
21 analogWrite()を3、5、6、9、10、11番以外のピンに対して実行したときに、PWM(アナログ出力)が得られないのはなぜですか?
22 関数や変数が未定義というエラーはなぜ出るのですか?
23 スケッチをアップロードする際に、invalid device signatureというエラーが出るのはなぜですか?

Arduinoボードにプログラムをアップロードできないのはなぜですか?

プログラムをArduinoボードにアップロードするには多くの要素が関連しています。それらの要素のどれか一つでも正しくなければ、アップロードは失敗します。アップロードに関連する要素を以下に示します。

  • Arduinoボード用のドライバ
  • ArduinoソフトウェアでのArduinoボードとシリアルポートの選択
  • シリアルポートへのアクセス
  • Arduinoボードとの物理接続
  • 8U2上のファームウェア(UnoとMega2560)
  • Arduinoボードのメインマイクロコントローラ上のブートローダ
  • マイクロコントローラのヒューズ設定
  • その他

各要素についてのトラブルシューティング方法を示します。

Arduinoソフトウェア

  • Arduinoソフトウェアの、Tools > Board メニューで正しい項目を選択しているか確認してください。Arduino Unoを使っているときは、それを選択してください。新しいArduino DuemilanoveはATmega328を搭載していますが、古いものはATmega168を搭載しています。確認するには、Arduinoボード上のマイクロコントローラ(大きいチップです)を見てください。ボードメニューの項目の詳細は、環境のページを見てください。
  • 次に、Tools > Serial Portメニューで正しいポートを選んでいるかを確認してください。もし正しいポートが表示されないときは、ArduinoボードをPCに接続したまま、Arduinoソフトウェアを再起動してください。Macでは、シリアルポートは次のようになっている必要があります。/dev/tty.usbmodem621 (Uno もしくは Mega 2560)、もしくは、/dev/tty.usbserial-A02f8e (古い FTDI-based boards)。Linuxでは、 /dev/ttyACM0 のようなデバイス名 (Uno もしくは Mega 2560) or /dev/ttyUSB0 のようなデバイス名 (古いボード)。Windowsでは、COMポート。ただし、デバイスマネージャのポートでどのCOMポートかを調べる必要があります。それでもArduinoボードを接続しているシリアルポートが表示されないときは、以下のドライバに関する情報を参照してください。

ドライバ

ドライバは、PC上のソフトウェア(Arduinoソフトウェア)とPCに接続したハードウェア(Arduinoボード)とが通信するための手段を提供します。Arduinoでは、仮想シリアルポート(もしくは仮想COMポート)を使ってドライバは動作します。Arduino UNOとMega 2560はOSが提供する標準ドライバ(USB CDC)を使ってArduinoボード上のATmega8U2と通信します。他のArduinoボードは、FTDIドライバを使って、Arduinoボード上(もしくはUSB-シリアル変換器内)のFTDIチップと通信します。

Arduinoボードのドライバが正しくインストールされているかを確認する簡単な方法は、Arduinoボードを接続したPC上のArduinoソフトウェアのTools > Serial Portメニューを開いて確認することです。PCにArduinoを接続していないときにメニューを表示させたときと比べると、メニュー項目がされているはずです。メニューから正しい項目を選択していれば、Arduinoボードのシリアルポートにどんな名前が割り与えられるかは問題ではありません。

  • Windows7(特に64ビット版)では、デバイスマネージャを起動し、UnoもしくはMega 2560のドライバを更新する必要があります。ArduinoボードをPCに接続している状態で、デバイスを右クリックし、適切な.infファイルを選択してください。.infファイルはArduinoソフトウェアのdrivers/ディレクトリにあります。その下のFTDI USB Driversディレクトリではありません。(訳者註:Windows7でのインストールは、インストールのページも見てください)
  • Windows XP上でUnoもしくはMega 2560をインストールしているときに、"The system cannot find the file specified"というエラーが出たら、レジストリのHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersionに"RunOnce"キーワードを追加するために、このページを参照してください。
  • Linuxでは、UnoやMega 2560は/dev/ttyACM0という形式のデバイスとして認識されます。これらのデバイスは、Arduinoソフトウェアがシリアル通信に利用する標準のRXTXライブラリではサポートされていません。Linux用のArduinoソフトウェアには、/dev/ttyACM* を検索するようパッチを当てたRXTXライブラリが含まれています。これらのデバイスをサポートする(11.04用の)Ubuntuパッケージもあります。ディストリビューションに付属のRXTXパッケージを使うときには、たとえば/dev/ttyACM0を/dev/ttyUSB0にシンボリックリンクを張り、シリアルポートがArduinoソフトウェア上に現れるようにする必要があります。

シリアルポートへのアクセス

  • Windowsで、起動が遅い、起動時にクラッシュする、Toolsメニューを開くのが遅いという症状があるときは、デバイスマネージャで、Bluetoothシリアルポート、他のネットワーク関連のCOMポートを無効にすることで症状が改善する場合があります。Arduinoソフトウェアは、起動時やToolsメニューを開くときに、デバイスマネージャにあるPC上のすべてのシリアルのCOMポートを検索します。このとき、これらのネットワーク関連のポートが大きな遅延やクラッシュを引き起こすことがあるからです。
  • すべてのシリアルポートを検索するようなプログラムが起動していないことを確認してください。これらのプログラムには、USBセルラーWifiドングル(例えばSprintやVerizon)、PDA同期アプリケーション、Bluetooth-USBドライバ(例えばBlueSoleil)、仮想デーモンツールなどがあります。
  • シリアルポートへのアクセスをブロックするファイアウォールソフトウァ(例えばZoneAlarm)がないことを確認してください。
  • USBやシリアル接続のArduinoボードからデータを取得するために、ProcessingやPD、vvvvなどを使っているのであれば停止してください。
  • Linuxでは、少なくともアップロードの問題が解決するのを確認するまでは一時的に、Arduinoソフトウェアをroot権限で起動してください。

物理接続

  • まず、Arduinoボードの電源が入っていること(緑のLEDが点灯していること)とPCに接続していることを確認してください。
  • Arduino UnoとMega 2560では、USBハブ経由でのMacとの接続には問題があるかもしれません。Tools > Serial Port メニューで何も表示されないときは、ArduinoボードをPCに直接接続し、Arduinoソフトウェアを再起動してください。
  • スケッチをアップロードするときはデジタルピンの0番と1番とに何も接続しないでください。デジタルピンの0番と1番とはPCとのシリアル通信にも利用しているためです。アップロード完了後は、接続して利用することができます。
  • Arduinoボードに何も接続しない状態でアップロードしてください(もちろん、USBケーブルは除きます)。
  • Arduinoボードが金属や電導性のあるものに触っていないか確認してください。
  • USBケーブルを変えてください。ときどきうまく動作しないときがあります。

自動リセット

  • 自動リセットをサポートしないArduinoボードを利用している場合は、アップロードの数秒前にArduinoボードを確実にリセットしてください。ArduinoDiecimilやDuemilanove、Nanoは自動リセットをサポートしています。6ピンのプログラミングヘッダを持つLilyPadやPro、Pro Miniもサポートしています。
  • しかし、一部のDiecimilaは、間違ったブートローダを搭載しているために、アップロードの前に物理的にリセットボタンを押す必要がある場合があります。下の質問を見てください。
  • また、一部のPCでは、Arduinoソフトウェアでアップロードボタンを押した後、Arduinoボードのリセットボタンを押す必要がある場合もあります。2つのボタンを押す間隔を10秒くらいまでの間で試してください。
  • [VP 1]Device is not responding correctly というエラーが出たら、再度アップロードしてください。Arduinoボードをリセットし、もう一度ダウンロードボタン(訳者註:アップロードボタン?)を押してください。

ブートローダ

  • Arduinoボードにブートローダが搭載されていることを確認してください。Arduinoボードのリセットボタンを押し、13番ピンに接続されている内蔵のLEDが点滅すればブートローダは搭載されています。もしも点滅しなければ、Arduinoボードにブートローダが搭載されていない可能性があります。(訳者註:この確認方法は一度もArduinoにスケッチをアップロードしたことがないときだけ有効です)
  • それでも動作しないときは、フォーラムに問い合わせることができます。その際は、以下の情報を投稿してください。
    • OS
    • 一度でもArduinoボードにアップロードできたかどうか。アップロードできたことがある場合は、うまくいっていたときに何をしたのか、その後PCにどういうソフトウェアを追加・削除したのか。
    • verboseモードを有効にし、アップロード時に表示されるのメッセージ。verboseモードを有効にするには、ツールバーでアップロードボタンをクリックするときに、シフトキーも同時に押してください。

(Mac OS Xで)"Build folder disappeared or could not be written"が出るのはなぜですか?

Arduino.cppをディスクイメージから取り出し、例えば、Applicationsフォルダに移しましたか? そうしないと例(訳者註:プログラムのこと?)をアップロードすることはできません。

MacでJavaを更新した後、Arduinoソフトウェアを起動できないのはなぜですか?

Appleの最新のJavaでは、64ビットバージョンのネイティブライブラリを利用しようとします。しかし、Arduinoソフトウェアは、32ビットバージョンのRXTXライブラリを使っています。Arduinoソフトウェアを起動すると、以下のようなエラーが出てきます。

Uncaught exception in main method: java.lang.UnsatisfiedLinkError: /Applications/arduino-0016/Arduino 16.app/Contents/Resources/Java/librxtxSerial.jnilib: no suitableimage found. Did find: /Applications/arduino-0016/Arduino 16.app/Contents/Resources/Java/librxtxSerial.jnilib: no matching architecture in universal wrapper

これを修正するためには、ファインダーでArduinoソフトウェア(例えばArduino 16.app)をクリックし、FileメニューからGet Infoを選択します。infoパネルで、"Open in 32 Bit Mode"チェックボックスをクリックします。そうすると、Arduinoソフトウェアを通常通り起動することができるはずです。(訳者註:Macを持っていないので、実際にどういうメニューが出てくるのかわかっていません。ご存知の方は教えてください)

プログラムをコンパイルするときに、java.lang.StackOverflowErrorが出るのはなぜですか?

Arduinoソフトウェアは、正規表現を使ってスケッチの事前処理を行います。この処理が特定の文字列を操作する際に問題を引き起こすことがあります。例えば、以下のようなエラーが出ます。

java.lang.StackOverflowError
at java.util.Vector.addElement(Unknown Source)
at java.util.Stack.push(Unknown Source)
at com.oroinc.text.regex.Perl5Matcher._pushState(Perl5Matcher.java)

あるいは

at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java)
at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java)
at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java)
at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java)
at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java)
at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java)
at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java)

これが実際に起こっていることです。ダブルクォートやシングルクォート、バックスラッシュ、コメントなどを含む文字列を探してください。例えば、対応するクォートがない場合や、'\"'という文字列が問題を起こします(この場合は、'"'を使ってください)。

(Arduino Diecimilaより古い場合)Arduinoボードに外部電源から電力を供給したときにスケッチが開始しないのはなぜですか?

RXピンに何も接続されていないので、Arduinoボード上のブートローダがごみデータを受信し続けています。つまり、いつまでもタイムアウトしないのでスケッチが開始されません。RXピンを10kΩの抵抗を介して接地してください。もしくは、RXピンとTXピントを直接接続してください。

(Windowsで)プログラムをアップロードするときにArduinoソフトウェアが固まるのはなぜですか?

LogitechのLVPrcSvr.exeとの競合が原因の可能性があります。タスクマネージャを開き、このプログラムが動いているかを確認してください。もし動いていたら、アップロードの前に、このプログラムを停止させてください。詳細はこちらを参照してください。

Arduinoボードが起動しないのはなぜですか(緑の電源LEDが点灯しません)?

Diecimilaやそれより古いArduinoボード(例えばNG)を使っている場合は、ジャンパ線(USBプラグの近くの小さいプラスチック)が正しいピンに接続されていることを確認してください。外部電源から電力を供給している場合は、ジャンパ線は電源プラグにいちばん近い2つのピンに接続されている必要があります。USB経由で電力を供給している場合は、ジャンパ線はUSBプラグにいちばん近い2つのピンに接続されている必要があります。

Diecimilaがスケッチを開始するのに長時間(6から8秒)かかるのはなぜですか?

Arduino Diecimilaボードの中には、間違えて、Arduino NGのブートローダを焼かれたものがあります。それでも問題なく動作するはずですが、Arduinoボードをリセットしたときに長時間の遅延が発生します(NGは自動リセットを持っておらず、アップロードタイミングを手動でとる必要があるためです)。NGブートローダが搭載されているときは、13番ピンのLEDが3回点滅します。Diecimilaのブートローダでは1回点滅します。DiecimilaのブートローダがNGのブートローダを搭載しているときは、スケッチをアップロードする前にArduinoボード上のリセットボタンを押す必要があります。正しいブートローダを焼くこともできます。詳細はブートローダのページを見てください。

WindowsでArduino.exeを実行したときにエラーが出たらどうすればいいですか?

Windowsでarduino.exeをダブルクリックしたときに、例えば以下のようなエラーが出たら、

Arduino has encountered a problem and needs to close.

Arduinoソフトウェアを run.bat を使って起動する必要があります。Arduinoソフトウェアが起動するまで少し時間がかかるので、我慢してください。

古いMac OS XでArduinoソフトウェアが動かないのはなぜですか?

以下のようなエラーが出たら、

Link (dyld) error:

dyld: /Applications/arduino-0004/Arduino 04.app/Contents/MacOS/Arduino Undefined symbols: /Applications/arduino-0004/librxtxSerial.jnilib undefined reference to _printf$LDBL128 expected to be defined in /usr/lib/libSystem.B.dylib

Mac OS X 10.3.9以降にアップグレードする必要があります。古いバージョンでは、いくつかのシステムライブラリに互換のないものが含まれています。

Arduinoソフトウェアを起動するとき、ネイティブライブラリであるlibrxtxDerial.jnilib 関連して、UnsatisfiedLinkError が出たときにどうすればいいですか?

Arduinoソフトウェアを起動するときに以下のようなエラーが出たら、

Uncaught exception in main method: java.lang.UnsatisfiedLinkError: Native Library /Users/anu/Desktop/arduino-0002/librxtxSerial.jnilib already loaded in another classloader

古い通信ライブラリがどこかにある可能性があります。/System/Library/Frameworks/JavaVM.framework/ や、CLASSPATH/PATH環境変数で指定されているディレクトリ配下で comm.jar やjcl.jarを探してください。(訳者註:探した後どうするかは書いてありませんでした。おそらく削除するのだとは思いますが)

"Could not find the main class."というエラーの場合はどうすればいいですか?

Arduinoソフトウェアを起動したときに以下のエラーが出たら、

Java Virtual Machine Launcher: Could not find the main class. Program will exit.

Arduinoのzipファイルを正しく展開できたか確認してください。特に、libディレクトリがArduinoディレクトリの直下にあり、pde.jarファイルがあるかを確認してください。

Windowsでcygwinと競合するときはどうすればいいですか?

PCにすでにcygwinをインストールしているときは、Arduinoソフトウェアでスケッチをコンパイルしようとすると以下のようなエラーが出ることがあります。

6 [main] ? (3512) C:\Dev\arduino-0006\tools\avr\bin\avr-gcc.exe: *** fatal error - C:\Dev\arduino-0006\tools\avr\bin\avr-gcc.exe: *** system shared memory version mismatchdetected - 0x75BE0084/0x75BE009C.

この問題はおそらく互換性のないバージョンのcygwin DLLを使っているために起きています。

Windows上でcygwin1.dllを探し、最新のもの以外はすべて削除してください。最新のバージョンは、x:\cygwin\binにある*はず*です。xはcygwinをインストールしたドライブです。他のcygwin DLLを見つけることができなければ、リブートしてみてください。

Arduinoを使うときにcygwinが動いていないことをまず確認してください。それでも動かないときは、Arduinoディレクトリからcygwin1.dllを削除して、インストール済みのcygwinディレクトリ(おそらくc:\cygwin\bin)にあるcygwin1.dllと置き換えてください。

(Windowsで)Arduinoソフトウェアの起動や Tools メニューを開くのに時間がかかるのはなぜですか?

Arduinoソフトウェアの起動に時間がかかり、Toolsメニューを開くと固まったように見えるときは、システムの他のデバイスと競合している可能性があります。Arduinoソフトウェアの起動時やToolsメニューを開くときには、PC上のすべてのCOMポートのリストを取得しようとします。PC上のデバイスの一つが作成したCOMポートがこの処理を遅くしている可能性があります。デバイスマネージャを確認し、COMポートを使っているデバイス(例えばBluetoothデバイス)を無効にしてください。

ArduinoボードがTools > Serial Portメニューに現れないのはなぜですか?

USBのArduinoボードを使っているときは、FTDIドライバをインストールしているか確認してください。シリアルボードとUSB-シリアルアダプタを使っているときは、そのドライバをインストールしているかを確認してください。

Arduinoボードが接続されているかを確認してください。シリアルポートメニューはToolsメニューを開いたときに更新されるので、単にArduinoボードを抜いただけではメニューには現れません。

すべてのシリアルポートを検索するようなプログラムが動いていないかを確認してください。例えば、PDA同期アプリケーションやBluetooth-USBドライバ、仮想デーモンツールなどです。

Windowsでは、Arduinoボードに割り当てられるCOMポートの番号が大きすぎることがあります。zevelandによると、

USBボードが大きい番号のCOMポートを使おうとしているのであれば、FTDIチップに割り当てるCOMポート番号を小さいものにしてみてください。Bluetooth用に仮想COMポートがたくさんあったので、ArduinoボードはCOM17を使うように設定されていました。ArduinoソフトウェアはArduinoボードを見つけることができなかったので、他の仮想ポートを(XPの)コントロールパネルから削除し、FTDIにCOM2を割り当てました。Arduinoが新しいポートを使うようにしてください。

Macで、古いバージョンのFTDIドライバを使っているときには、それを削除し最新のバージョンのものを再インストールする必要がある場合があります。

(Macで)コードをアップロードしたりシリアルモニタを使うときに、gnu.io.PortInUseExceptionが出るときはどうすればいいですか?

Error inside Serial.<init>()
gnu.io.PortInUseException: Unknown Application
at gnu.io.CommPortIdentifier.open(CommPortIdentifier.java:354)
at processing.app.Serial.<init>(Serial.java:127)
at processing.app.Serial.<init>(Serial.java:72)

これはおそらく、そのポートが他のアプリケーションによって使われていることを意味します。PDA同期アプリケーションやBluetoothデバイスマネージャ、ある種のファイアウォールなど、他のプログラムがシリアルやUSBポートにアクセスしていないか確認してください。Max/MSPなどのあるプログラムは利用していないときもシリアルポートを占有する場合があります。そのような場合は、シリアルポートを使わないよう設定したり、アプリケーションを完全に停止する必要があります。

Arduino 0004より以前のバージョンやProcessingで、このエラーが出たときは、macosx_setup.command を起動し、その後、PCをリスタートする必要があります。Arduino 0004には、すべてのユーザが起動する必要のあるこのスクリプトの修正版が入っています(Arduino0003に付属のスクリプトを起動したユーザも含みます)。/var/spool/uucpディレクトリの内容も削除する必要があります。

FTDI USBドライバに問題があります。

FTDIの最新のドライバをインストールしてください。もしくは、support1@ftdichip.comに連絡してください。

Arduinoボードの電源を入れたときやリセットしたときにスケッチが開始しないのはなぜですか?

最初に起動したときにシリアルデータをArduinoボードに送信しているのがよくある原因です。最初の数秒間、ブートローダ(Arduinoボード上のチップににあらかじめ焼かれているプログラム)はPCがArduinoボードに対して新しいスケッチをアップロードしていないかを確認します。数秒間通信がないと、ブートローダはタイムアウトし、すでにArduinoボード上にあるプログラムを開始します。ブートローダに対してデータを送り続けると、タイムアウトしないのでいつまでたってもスケッチは開始しません。Arduinoボードの電源を入れた最初の数秒間でシリアルデータが到着するのを停止する方法を見つけるか、外部プログラマによりArduinoボード上にスケッチを焼くか、ブートローダを書き換えるかしなければいけません。

スケッチのアップロードは成功したように見えるのに、何も起こらないのはなぜですか?

Tools > Board メニューで間違えた項目を選んでいるかもしれません。選択したボードが正しいことを確認してください。チップの名前はArduinoボードの最も大きいチップに書いてあります。

電源のノイズを確認してください。ノイズによりチップ上のスケッチを失う可能性があります。

また、スケッチがボードの容量を超えている場合もあります。スケッチをアップロードするとき、Arduino 0004は、ATmega8向けにスケッチの大きさを確認します。しかし、そのとき、1キロバイトを基に比較します。Flash上の8キロバイトのプログラムスペースのうち、現在のブートローダが利用する1キロバイトではなく、2キロバイトを占めるブートローダを搭載している場合があります。もしスケッチが大きすぎるときは、スケッチの一部しかアップロードされませんが、ソフトウェアにはそのことはわかりません。そのため、ボードはリセットと停止を繰り返します。

AVR-ISPやパラレルポートにアクセスできるなら、Tools > Burn Bootloader メニューから、最新バージョンのブートローダを焼くことができます。あるいは、preferenceファイルのupload.maximum_size変数を編集して、スケッチが利用できるメモリの大きさを変更することもできます。7168を6144に変更すると、Arduino環境はスケッチが大きすぎると正しく警告することができるようになります。

スケッチの大きさを小さくするにはどうすればいいですか?

Arduinoボードに搭載されているチップのATmega168は安いので、16キロバイトのプログラムコードしか書き込めません。16キロバイトは決して大きくはありません。また、そのうち2キロバイトはブートローダにとられています。

浮動小数を使っているのであれば、整数計算に置き換えてください。これにより、約2キロバイト節約できます。スケッチの最初のほうにある#includeのうち、利用しないライブラリに関連するものを削除してください。

また、プログラムを短くできないか考えてみてください。

analogWrite()を3、5、6、9、10、11番以外のピンに対して実行したときに、PWM(アナログ出力)が得られないのはなぜですか?

Arduinoボード上のマイクロコントローラ(ATmega168)は、特定のピンに対してだけ、PWM/analogWrite()をサポートしています。他のピンに対してanalogWrite()を呼び出すと、デューティ比が128よりも大きいときはHIGH(5ボルト)を、128よりも小さいときはLOW(0ボルト)を出力します。ATmega8を搭載した古いArudinoボードは、9、10、11番ピンだけがPWM出力をサポートしています。

関数や変数が未定義というエラーはなぜ出るのですか?

Arduinoソフトウェアは関数のプロトタイプを自動生成するので、スケッチ内のどこにでも関数を書くことができます。しかし、これは完全というわけではなく、ときどき、わかりづらいメッセージを生成します。

独自の型を宣言し、その型を受け取ったり返却したりする関数を作成すると、スケッチをコンパイルしたときにエラーになります。これは、型の定義の前に自動生成した関数のプロトタイプが配置されるためです。

unsigned intのような2語の戻り値の型を持つ関数を宣言すると、Arduinoソフトウェアはそれが関数であると認識できず、プロトタイプを生成しません。このため、自分でプロトタイプを作成する必要があります。もしくは、その関数の定義をそれを呼ぶ関数の前に配置する必要があります。

スケッチをアップロードする際に、invalid device signatureというエラーが出るのはなぜですか?

以下のようなエラーが出たら、

avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.

Tools > Boardメニューで間違ったボードを選択しているか、正しいバージョンのavrdudeを使っていないかのどちらかが起こっています。ArduinoソフトウェアはArduinoボードにスケッチをアップロードするときに、少し修正した版のavrdudeを使っています。標準のバージョンのavrdudeはブートローダによって理解されない方法でArduinoボードのデバイスシグネチャを取得しようとしするので、エラーになります。Arduinoについてくるavrdudeを使っているか確認してください。

オリジナルのページ

http://arduino.cc/en/Guide/Troubleshooting



メニューを表示するためにJavaScriptを有効にしてください。

inserted by FC2 system