Arduinoで二重定義のコンパイルエラーが出て、解決まで1時間ほど悩まされたので忘れないように記録しておきます。
エラーの内容は以下の通り、初期化とプログラム本体の二重定義です。
test:1: error: redefinition of 'void setup()'
void setup() {
void loop() {
^
exit status 1
redefinition of 'void setup()'
以前コンパイルに成功したものまで同じエラーがでました。
原因は、別のファイルをタブで開いていたためで、二つのタブを一つのファイルとしてコンパイルしようとして二重定義のエラーになってしまったようです。
それならば、タブを一つ閉じればいいのですが、タブを閉じるコマンドが見つかりません。「Arduino IDE」の右上にある逆三角形ボタンを押すと出てくる「削除」を選択すると、ファイル自体が削除されてしまいました。
調べた結果、Arduinoはプロジェクトをフォルダで管理しており、例えば「test」というファイルを保存すると、同名のフォルダにファイルが作成されます。フォルダ内のファイルは一つのプロジェクトとして解釈されるため、フォルダ内に複数のスケッチがあると、それらがすべてタブとして表示され、一つの実行ファイルとしてコンパイルされるようです。
従って、「Arduino IDE」で一つのファイルだけを表示するには、そのファイルが保存してあるフォルダに置くスケッチを一つだけにするしかないようです。また、ファイルをフォルダ名と異なる名前に変更すると、変更したファイル名でフォルダを作成するか確認ウィンドウが出てきます(大文字と小文字は区別していない模様)。
一つのファイルを分割する場合は、必ずフォルダ名と同じ名前のファイルが存在するようにしなければなりません。
今回は、作成したスケッチをバックアップのためにコピーして同じフォルダに入れておいたことがエラーの原因でした。バックアップしたファイルを別のフォルダに移動したらあっさりとエラーは消えました。