質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

2回答

1895閲覧

Arduinoについて

s_o00o

総合スコア6

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2018/07/31 18:18

編集2018/08/02 05:39

前提・実現したいこと

センサで測定した値を8pino(Arduino互換のマイコン)にI2C通信して送り、その値を8pinoから送信モジュールに送るプログラムを作りました。
最終的には、受信モジュールで受け取った値をArduinoUNOを介してパソコンで表示します。
このプログラムを書き込んだ8pinoとセンサと送信モジュールをはんだ付けでくっつけたもの(簡単するためこれをセンサ粒子と呼びます)が3つあり、すべて機能しておりました。このセンサ粒子以外にブレッドボード上で回路を作っており、それも以前まではちゃんと動いていました。そのあと期間が1か月ほど空いてしまいましたが、ブレッドボードで作った回路の方でプログラムを書き込みし作動させたところ機能しなくなりました(パソコンに表示されなくなった)。

発生している問題・エラーメッセージ

エラーメッセージなし

該当のソースコード

#include <TinyWireM.h> //#include <TimerOne.h> #include <VirtualWireM.h> const int transmit_pin = 3; const int receive_pin = 2; #define MPU9250_ADDRESS 0x68 #define MAG_ADDRESS 0x0C #define GYRO_FULL_SCALE_250_DPS 0x00 #define GYRO_FULL_SCALE_500_DPS 0x08 #define GYRO_FULL_SCALE_1000_DPS 0x10 #define GYRO_FULL_SCALE_2000_DPS 0x18 #define ACC_FULL_SCALE_2_G 0x00 #define ACC_FULL_SCALE_4_G 0x08 #define ACC_FULL_SCALE_8_G 0x10 #define ACC_FULL_SCALE_16_G 0x18 // This function read Nbytes bytes from I2C device at address Address. // Put read bytes starting at register Register in the Data array. void I2Cread(uint8_t Address, uint8_t Register, uint8_t Nbytes, uint8_t* Data) { // Set register address TinyWireM.beginTransmission(Address); TinyWireM.write(Register); TinyWireM.endTransmission(); // Read Nbytes TinyWireM.requestFrom(Address, Nbytes); uint8_t index=0; while (TinyWireM.available()) Data[index++]=TinyWireM.read(); } // Write a byte (Data) in device (Address) at register (Register) void I2CwriteByte(uint8_t Address, uint8_t Register, uint8_t Data) { // Set register address TinyWireM.beginTransmission(Address); TinyWireM.write(Register); TinyWireM.write(Data); TinyWireM.endTransmission(); } // Initial time long int ti; // Initializations void setup() { // Arduino initializations TinyWireM.begin(); // Set accelerometers low pass filter at 5Hz I2CwriteByte(MPU9250_ADDRESS,29,0x06); // Set gyroscope low pass filter at 5Hz I2CwriteByte(MPU9250_ADDRESS,26,0x06); // Configure gyroscope range I2CwriteByte(MPU9250_ADDRESS,27,GYRO_FULL_SCALE_1000_DPS); // Configure accelerometers range I2CwriteByte(MPU9250_ADDRESS,28,ACC_FULL_SCALE_4_G); // Set by pass mode for the magnetometers I2CwriteByte(MPU9250_ADDRESS,0x37,0x02); // Request continuous magnetometer measurements in 16 bits I2CwriteByte(MAG_ADDRESS,0x0A,0x16); // Store initial time ti=millis(); // Initialise the IO and ISR vw_set_tx_pin(transmit_pin); vw_set_rx_pin(receive_pin); vw_set_ptt_inverted(true); // Required for DR3100 vw_setup(7500); // Bits per sec } byte count = 1; // Main loop, read and display data void loop() { // ____________________________________ // ::: accelerometer and gyroscope ::: // Read accelerometer and gyroscope uint8_t Buf[21]; I2Cread(MPU9250_ADDRESS,0x3B,14,Buf); // Read register Status 1 and wait for the DRDY: Data Ready uint8_t ST1; do { I2Cread(MAG_ADDRESS, 0x02, 1, &ST1); } while (!(ST1 & 0x01)); // Read magnetometer data uint8_t Mag[7]; I2Cread(MAG_ADDRESS, 0x03, 7, Mag); int i=0; do { Buf[14 + i] = Mag[i]; i++; }while(i<8); vw_send(Buf, 21); vw_wait_tx(); // Wait until the whole message is gone // delay(1000); count = count + 1; }

試したこと

以前まで動いていたセンサ粒子に上記のプログラムを書き込まず、作動させたところPCに表示されたので、受信側のプログラムは間違えていないと判断し、送信側のプログラムに問題があることが分かりました。
プログラムのコンパイル時にエラーはありません。
部品や配線はすべて確認し、また8pinoから送信モジュールも簡単なプログラムを書き込みすると機能しました。
故障する前後ではArduinoの更新、ファイルの移動をしていました。ファイルを移動したことが原因なのか、ライブラリが一度消えており、
再インストールしています。

補足情報(FW/ツールのバージョンなど)

Arduinoのバージョンは1.8.2です。
ボードはArduino Gemma、書込装置はUSBtinyISPを使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2018/08/01 00:03

「いろいろ試した結果、送信側のプログラムに問題があることが分かりました。」の根拠を教えてください
s_o00o

2018/08/02 05:40

説明不足があり、申し訳ございません。補足したので、ご確認よろしくお願いいたします。
guest

回答2

0

まずはどこまでがキチンと動いてるのかきっちり確認しましょう
8pinoからの送信データがきっちり送信されているかを、どうにかしてPCで受信するとかはできないでしょうか。また、オシロなどで信号を見てみるとか。

ハード的な問題もあり得る状況で、コードだけをいくらにらめっこしたところでどうしようもないですぜ

投稿2018/07/31 23:56

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s_o00o

2018/08/02 05:45

ご回答ありがとうございます。 上記に記入しておりますが、8pinoから送信に”hello"を送るという簡単なプログラムを作ったところ、PCに表示されたので、8pinoから送信の部分に故障はないと考えました。
y_waiwai

2018/08/02 06:11

なら、ArduinoUNO側に問題があるということですね
guest

0

まず’8pino’は3.3V機ですが、UNOは5V機。レベル変換のハードは?

投稿2018/07/31 23:22

MasahikoHirata

総合スコア3747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s_o00o

2018/07/31 23:38

ご回答ありがとうございます。 UNOの電源は3.3Vと5Vがあり、8pinoはUNOの3.3Vから電源供給しています。
MasahikoHirata

2018/07/31 23:46

電源では無くて信号線のレベルの話です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問