Arduino Uno R4で急に書き込みができなくなった時の対処法

Arduino Uno R4 Minimaで作業をしていたら、急に書き込み時にエラーが出るようになり、スケッチの書き替えができなくなってしまいました。
この時の対処法を紹介します。Arduino Uno R4 Wifiでもたぶん使えると思います。

起きたこと

コンパイル完了後、「書き込み中」の表示になってから妙に時間がかかった後、こんなメッセージが出ます。

dfu-util 0.11-arduino4

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2021 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/

Opening DFU capable USB device...
Device ID 2341:0069
Run-Time device DFU version 0101
Claiming USB DFU (Run-Time) Interface...
Setting Alternate Interface zero...
Determining device status...
Failed to retrieve language identifiers
Failed to retrieve language identifiers
error get_status: LIBUSB_ERROR_TIMEOUT
Failed uploading: uploading error: exit status 74

最後の4行がエラーですね。

どうもシリアル通信を使ったプログラムで、書き込み時にArduino内の旧スケッチが大量のシリアルを出力しているとこうなるらしいです。
ただ僕が試してみたところ、シリアルモニタをひらいているかどうかも関係がある気がします。
なので…

対処法1

  1. シリアルモニタをひらいている場合は閉じる
  2. Arduinoをリセットする(USBケーブルを抜き差しするか、ボード上のRESETボタンを押す)
  3. 再度書き込む

で直るときは直ります。ただこれでも直らないときもありました。その場合は…

対処法2

  1. ボード上のRESETボタンを素早く二度押しする
    • ボタンが固いので意外に難しい…!
    • 成功するとボード上のオレンジのLED(「L」って書いてあるやつ)が、ぼやーんとソフトに点滅します
  2. 再度書き込む

これで直ると思います。
以降はこれまでどおり普通に使うことができます。

この操作は何?

RESETボタンを二度押しするとセットアップモードというのに入り、スケッチの実行が行われなくなるみたいです。なので旧スケッチのシリアル出力に邪魔されることなく書き込みができるようですね。
そもそもの原因はスケッチが大量のデータを送っていることにあるので、繰り返し起きる場合はプログラムを見直した方がよさそうです。

なお、この二度押しはそもそもボードが認識されなくなってしまった時も使えるようです。
参考:Arduino UNO R4に書き込めなくなったらDFUモードを使え | jh4vaj

上記ページによると、そのときは二度押し後に

この見慣れないアイコンのボードを選んでスケッチを書き込むと直るとのこと。対処法2の途中でもこのボードは表示されるので、興味がある人は試してみてもよいと思います(試しました)。

以上です。