Arduinoスケッチがリセットしないと動作しない

このQ&Aのポイント
  • Arduino UNO R3とArduino Nano互換機でI2Cで動く液晶をコントロールするスケッチをプログラミングしましたが、リセットしないと正しく動作しません。
  • ArduinoのFAQには解決策が提示されていますが、RXとGNDを接続したり、RXとTXをショートさせる方法では解決しませんでした。
  • 単体での電源供給時にスケッチを正しく起動させる方法を教えてください。
回答を見る
  • ベストアンサー

Arduinoスケッチがリセットしないと動作しない

Arduino UNO R3とArduino Nano互換機でI2Cで動く液晶を、標準Wireライブラリーでコントロールするスケッチをプログラミングしました。 しかしながら、Arduino IDEでスケッチを描き込んだ直後は動作するのですが、電源を入れ直すと電源ランプが点灯するだけで、プログラムが実行されなくなります。 一方で、この状態でリセットボタンを押すと、意図したとおりにプログラムが動作するので、おそらく一度はリセットしないと、正しく動かないようです。 ArduinoのFAQではブートローダーによるシリアル通信の関係で、RXを10kΩの抵抗を介してGNDにつなげるか、RXとTXをショートさせると良いとあったのですが、この方法では解決しませんでした。 Arduino単体(パソコンにつなげずに電源のみの供給)で、スケッチを正しく起動させるにはどうしたらよいでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • lumiheart
  • ベストアンサー率48% (1103/2297)
回答No.1

>電源を入れ直すと電源ランプが点灯するだけで、プログラムが実行されなくなります。 憶測ですが、プログラムが実行されてないのではなくて 液晶画面が表示されていないだけでしょう ただ単に液晶画面のI2Cがプロトコル異常とかで停止してるだけじゃあないかな? (電源投入シーケンスの問題) 指し当たって、液晶表示プログラムにLチカプログラムを追加してみましょう https://deviceplus.jp/hobby/entry_004/ 恐らく、液晶画面は消えたままでLEDは正常に点滅するんでは? よーするに、CPUは正常にRUNしてるが、I2Cは異常停止してる そこでリセットすると液晶I2Cが通信開始される そんなとこでは?

votakoeg
質問者

お礼

ご指摘の通り、GPIOにLEDを同時に繋ぐと、電源投入時もLEDは動作しているので、I2Cの設定もしくは接続に問題があるようです。I2Cのトラブルであることを前提に、引き続きこの問題への対処法を調べていきます。

関連するQ&A

  • Arduino の不可解なリセットの回避について

    Arduinoの互換機(ArduinoUNOと同じようなもの)を使って電子工作の練習をしている初学者なのですが、不可解なリセットに悩まされています。リセットが起きてしまう状況を自分なりに調べてみたのですが、よくわかりませんでした。以下に状況を示しますのでリセットの原因や回避方法を教えてください。 ・モータードライバでモーターを動かしたときにリセットする(モーターは別電源で動かしている) ・かなりの確率でリセットするが、モーターを動かしてもリセットしないこともある。 ・テスターで測ったところ異常に大きな電流は流れていなかったし、逆電流もなかった。 ・正転、逆転のどちらでもリセットが起きていた。モーターの両極にコンデンサーをつないでみてもリセットした。 ・Arduino のGPIOピンを2か所のGNDだけ刺さっている状況にして、別電源だけでモータードライバとモータを動作させてもリセットが起こった。 ・GNDのピンを1か所減らした回路にしてみたら、リセットが起こりづらくなった。 ・5Vの電源ピンを別のセンサーにつなぐとリセットが再発した。よってこれを外したところ、リセットは殆ど無くなったように見えた。(Vccは別電源と定電圧レギュレータを用いることにした) ・モータードライバとモーターを2つずつにしてみたところ、リセットが起こった。モータードライバを新品のスペアに替えてみると、リセット確率は低下したが稀にリセットした。 以上です。モータードライバはTA7291P、モーターはFA130を使っています。ぼくはもうお手上げなのでどうかよろしくお願いします。

  • Arduinoのスケッチでエラーがでてしまいます。

    【電子工作関連】Arduinoでボタンを押すとランダムに3つのモーターのうち一つが回転するというスケッチを書きたいのですが、エラーが出てしまいます。どこが間違っているのでしょう? Arduinoで、ボタンを押すとランダムに3つのモーターのうち一つが回転するというスケッチを書きたいのですが、コンパイル使用とすると、 「error: expected unqualified-id before numeric constant」 というエラーが出てしまいます。 どこが間違っているのでしょう? 下がそのスケッチです。 なお、モータードライバにはTA7291Pを使用。 信号ピンである5番6番ピンをArduino5~10番ピンに振り分けて、それぞれにモーターを接続、 電源やGNDは共有してます。 なお、ボタンを使わず、単純に3つのモーターのうち一つが回転するというというスケッチは出来ていて、実際にその通り動いています。 ------------------------------ //3つのモーターをランダムに動かす int val = 0 //入力ピンの状態がこの変数に記憶される void setup(){ pinMode(2,INPUT); //ボタンを入力に設定 pinMode(5,OUTPUT); //モーター(1)のドライバー5番ピンを出力に設定 pinMode(6,OUTPUT); //モーター(2)のドライバー5番ピンを出力に設定 pinMode(7,OUTPUT); //モーター(3)のドライバー5番ピンを出力に設定 pinMode(8,OUTPUT); //モーター(1)のドライバー6番ピンを出力に設定 pinMode(9,OUTPUT); //モーター(2)のドライバー6番ピンを出力に設定 pinMode(10,OUTPUT); //モーター(3)のドライバー6番ピンを出力に設定 } void loop(){ val = digitalRead(2); //入力を読み取りvalに格納 if (val == HIGH){ digitalWrite(random(5,8),HIGH);//ランダムにモーターを正回転させる } else { digitalWrite(5,LOW); digitalWrite(6,LOW); digitalWrite(7,LOW);//モータを止める } }

  • ArduinoでAVR328のみを使う場合の注意

    こんにちは. マイコンを勉強しています.ArduinoやARMを使って勉強しています. Arduinoは,Arduinoの基盤を用いずにATMega328マイコンのみを用いて使うことができますが,この場合使えなくなる機能などはないのでしょうか? 先日,写真のような回路を組んでオルゴールを作ってみました.事前にArduinoのブートローダを書き込んだATMega328を,Arduinoボードを用いてプログラムを書き込みました.セラロック16MHzのものを加えた以外に,回路はArduinoボードを使って動かすのと変わりません. つまりこれは,クロックさえ供給してやれば,ATMega328のみで動かしても,Arduinoボードを用いて居る場合と同じことができるという理解で合っていますか? さらには,arduinoボードとは,PCとの通信,マイコンへの書き込み,リセットスイッチや動作確認のLED,クロックなどを供給するもので,製品として組み込む場合は特に必要ないもの,あるいは自分で簡単に追加出来るもの,という理解で合っているのでしょうか?もし,マイコンボードが必要な理由,などがあればこちらも回答お願いします . あと少し逸れていても,詳しく解説してある資料など大歓迎です.

  • OSOYOO製 arduino unoの使い方

    OSOYOO製 arduino uno スターターキット6を購入しました。 合わせてarduinoを始めようの本も購入しIDEのインストール、ドライバーの設定を完了しました。 次にポートの確認をするよう書かれており arduinoの互換ボードをUSBに接続し青ランプがついた状態でツールメニューからarduinoボードのポートを選択するよう書かれていますがポート欄は表示されずです。どうしたらポートが開けるようになるのかお教えください。 ポートが見つからないと次に進めないのでしょうか。例題のLEDを点滅させるプログラムを入力してもエラーがかかってしまいます。 入力間違いはありません。 使用のPCはw10とw7です。

  • arduinoのプログラム実行について

    本日arduinoを購入し,arduinoに接続したLEDを点灯させることができました.arduinoの動作を終了させるには,電源供給をやめればよい,今回の場合はパソコンとのUSB接続を切ればよいということなので,USBを抜きました. ここで次のことを思いました.次回,arduino周辺の回路を組み替えて新しいプログラムを書き込む際,パソコンに繋いだ瞬間は今回(LED点灯)のプログラムが動作し始めると思います.そのとき,回路によってはarduinoが破損してしまうのではないでしょうか?どうすれば今回のプログラムを実行させないままパソコンに接続することができますか?

  • atmega328-puの書き込みに付いて。

    atmega328-puの外部と内部のclockの取り扱いについてお尋ねします。 先ずブートローダーを書き込んだり、書き込みに失敗すると外部クロックに切り替わり その後は書き込めなくなる様な説明が有りました。 このことは、二度目以降のブートローダーが書き込めなくなると言うことでしょうか 又、書き込みに失敗した時、そのavrは全く他の用途にも使えなくなり、マイコンとしての 機能を失ってしまうと言うことですか。 それでは、AvrIsp-MkIIの書き込み器を使って、外部クロック用の水晶発振素子等を取り付けて 新しくプログラムを書き込むことは可能ですか。 ブートローダーの解釈として、私が理解しているのは、ブートローダーと言うのは 書き込まれるマイコンが、書き込まれたプログラム通りに働かせる為のプログラム では無く、そのプログラムをAVRマイコンに読み込ませる為の導入プログラム と言うことで良いのでしょうか。 atmega328-puのマイコンに書き込むための説明に、ARDUINOよるブートローダーの書き込み方が沢山紹介されていますが、これはARDUINOのボードでプログラムを書き込んだりするとき スケッチと言うプログラムを作成してARDUINOに書き込みプログラムを走らせますが このスケッチを書き込む時に必要なソフトが、ブートローダーなのでしょうか。 では以前このOK-WAVEで教えていただいた回答内容では、AVRマイコンに書き込む為には AVRISP-MKIIの書き込み器を使えば、ブートローダーは必ずしも必要ないと言うように私は理解 したのですが、正しいのでしょうか。 例えばブートローダーを書き込んだATMEGA328-PUをaruduinoで私が書き込もうとする プログラムをスケッチに書いて書き込んだら、基本的には(動作クロック等は別として) 動作するのでしょうか。 すみません、色々調べたのですが基本的な事の疑問が、解けずにいますので 教えてください。

  • Arduinoと電磁弁について

    arduinoを使用して電磁弁(va01rsc24-1p)を作動させたいのですがどのようにやればよいかわかりません。 arduinoの基本的なこと(arduino IDE使用方法)などはわかりますが、わからない点としては、 ●電磁弁の基本的な操作方法(コードが2本出ていますが、そのままarduino無しでも通電すればバルブが解放されるのか) ●arduinoは5Vまでですか、電磁弁は24V必要(外部電源をどのように接続すればよいか) ●arduinoを使用して電磁弁を解放するときのプログラム 以上の点よろしくお願いいたします。

  • LED点灯回路

    LEDが順番に光る回路をArduino nano ver.3.0を使ってプリント基板上につくっています。 USBケーブルにつなぐとちゃんとプログラムが動いてLEDが順番に点灯しますが、USBケーブルを抜いて乾電池を外部電源としてプラス側をvinとマイナス側をgrnにつないだら、プログラムが動かず、はじめからLEDが全部ついたままになります。 その上、Arudino上のRXランプとTXランプも点灯したままの状態(USBケーブルにつないだときはおきません)です。半田付けが失敗したのかといろいろ考えてみるのですが、わけがわからず途方にくれています。ArduinoのtutorialサイトにRxピントTxピンを直接つなぐといいと書いてあったのでそれもクリップを使ってやってみましたが、直りません。 どうやったら解決するでしょうか。

  • Arduino UNO R3とモーターシールド

    Arduino UNO R3とモーターシールドL298を使用して制御を行おうとしています. シールドはArduinoだけでは電流値が足りず, 外部電源(単三乾電池4本)を用いるために導入したのですが, このシールドを用いるとテスターで確認してもプログラム通りに電圧を出力してくれません. プログラムは,Arduino単体で動かした時には正常に動いたものを モーターシールドを動かすために改変したもので,間違いは無いと思われます. モーターシールドはこれを使っています. http://www.elecfreaks.com/wiki/index.php?title=L298_Motor_Shield 電圧が供出力されない原因はなにか,まったくわかりません. 回答の程よろしくお願い致します.

  • Arduino uno 本体と基板を切り離して

    マイコンといえばPICしか知らず、プログラムを 勉強しようと思っていたところ、Arduinoという のが初心者向けだと知りました。 まだ何も分からない状態なのですが、動画を見ると 皆さん本体から基板(ブレッドボード)にジャンパワイヤ を接続して動作させています。 当方がやりたいのはPICで例えると、PICKitからブレッドボード に差したPIC10F200などのICにプログラムを書きこみ、ICを 基板に実装して動かしたいんです。 少し検索したところ見つけたのですが https://burariweb.info/electronic-work/arduino-atmega328p-alone-operate.html このようにするしかないんでしょうか? 車のルームランプに基板を入れたいのでICは小さいに 越したことはなく、PICのように8ピンで出来れば、と 思っています。