GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
GR-SAKURAでカラーセンサをから色情報を取得し、teratermでRGBをそれぞれ表示するというプログラムを組んで動かそうと思ったのですが、うまく動きません。
まだ、マイコンの操作やプログラムについて日が浅いためこのプログラムについてどういじってよいかわかりません。どうすればよいでしょうか。
ここの続きですよね?
japan.renesasrulz.com/.../3675.aspx
「arduinoでは正常に動きました」との事ですが、同じソースで動いたのでしょうか?
また、Wire関連はここに書かれてますが、gadget.renesas.com/.../library_wire.html
endTransmissionには戻り値があるようなので、それを足掛かりにしては如何でしょうか。
返信ありがとうございます。
そちらの続きであっています。
arduinoで動かした時はまったく同じソースでした。
戻り値はどのようにして確認すればよいのでしょうか。
添付のtxtを見る限りではV1.08ライブラリを使われているようですが、最新のV2.13を使って試していただくことできますか?
V2にする際、ソースの一番上にあるincludeはrxduino.hではなく以下にしてください。
#include <Arduino.h>
あるいは、以下のgithubをZipでダウンロードし、V2.13テンプレートにZipのままアップロードしてビルドするでもいいと思います。プロジェクトルートで右クリック(Macではダブルタッチ)からアップロードできます。
github.com/.../Adafruit_TCS34725
アップロード後、exampleフォルダにある.pdeを開いて全てコピーし、#include <Arduino.h>だけ残してgr_sketch.cppにコピーすれば、サンプルを試すことができます。
ちょっと実物がないので動作はしてませんが、ビルドエラーができないことは確認しています。
> 戻り値はどのようにして確認すればよいのでしょうか。
rgbを表示しているように、UARTで見ればいいかと。
int dt;
dt = Wire.endTransmission();
Serial.println(String(dt));
こんなかんじ?
…あれ。そもそもSerial.printに直接Doubleって、ちゃんと表示できましたっけ?
double b;
b = 3.141592;
Serial.println(b);
これちゃんと表示されますかね?
ご助言ありがとうございます!
戻り値を確認することはでたのですが、0と表示されていましたのでI2C通信は成功したということなのでしょうか。
しかし、RGBの値が正常に表示されていないので、取得できているのかいないのかわかりません……。
逆に考えるんだ(AA略
戻り値が正常なのかどうか確認したければ、「あえてエラーが起きる環境にして戻り値を見る」というような方法があります。I2Cのアドレスを存在しないものにするとか、デバイスを外して動かしてみるとか。それでエラーはちゃんと機能しているなら、I2C通信はOKと考えていいんじゃないかと思います。
ちなみに、ソース上のすべてのendTransmissionが正常終了なんでしょうか?
とりあえず、このようなプログラムにしてRGBだけを読み込んで表示するようにしました。
最初のうちはteratermで正常に読み込んでいるのですが、途中から画像のような表示が出てしまいました。
何が原因なのでしょうか?
すみません、こちらがプログラムです
おお、進んでるんですね!I2Cとか、どこ直したらイケたとかのネタも、良ければ是非教えて下さい。
さておき表示が変になる現象ですが、、うーん、間違ってたらゴメンナサイですが、Serial.printを連続して投げてるとタマにヘンになる事があったような無かったような。以下のような記述で改善したりしますか?
============================================================
String str;
str = " r " + red_color + " g " + green_color + " b " + blue_color;
str += " r " + r + " g " + g + " b " + b;
Serial.println(str);
直んなかったらゴメンナサイ。
tamori114514様
.
プログラムとキャプチャ画像により「ゼロ除算」が原因のエラーかと思います。
どんな型のプログラム言語であれ、「数値÷0」の答えは「無限大(Inf.)」となり数値として正しく扱えなくなります。
電卓でも「数値÷0」を計算するとE(エラー)が表示されるはず。(この計算でゼロが表示される電卓は小中学生用の学習電卓)
センサーより取得したred_color、green_color、blue_colorが全部ゼロかそれに等しい数値の場合(色でいうと真っ黒)、
「double colorAvg = (red_color+green_color+blue_color)/3;」で求めた答えは「(0+0+0)÷3」で0となります。
その次の行で「double r = red_color/colorAvg;」としていますので、「0÷0」を計算し、答えは「無限大」となります。
変数r、g、bにはdouble型で表すことができる限界値やNaNが格納されているかと。
おそらくこれが答えかと思います。
プログラムの書き方やコンパイラの種類によっては「ゼロ除算」が発生した時点で例外がスローされプログラムが停止します。
割り算を使用する際は「ゼロで数値を割る」にならないようif文などで回避したり、そもそも「ゼロ」として扱わないように工夫する必要があります。
がじぇるね岡宮です。
V2ライブラリを提案した手前、秋月さんでAdafruitのTCS34725モジュールを購入して試してみました。
Wireの接続はA4/SDA, A5/SCLと電源GNDです。結果としては以下の通り、正常に動作しますので、宜しければお試しください。
以下のAdafruitのライブラリを使ってます。
https://github.com/adafruit/Adafruit_TCS34725
皆さん、様々なご助言ありがとうございます。
fluxさんのプログラムはうまくコンパイルできませんでした。申し訳ありません。
Cursorさんの0に近い値は、出ないようにしたのですが、結果止まってしまいました。申し訳ありません。
岡宮さんのご助言通りAdafruitのライブラリを使用し、プログラムをコンパイルしようとしたのですが、
gr_sakura_wire/InstWire.cpp:3:9: error: no matching function for call to 'TwoWire::TwoWire()'
TwoWire Wire;
といったようなエラーが出てしましました。
ライブラリからインポートしたwireを削除してコンパイルしてみましたが、その場合はteratermで何も表示sれませんでした。
どのように解決すればよいでしょうか。
エラーの内容をテキストファイルに載せます。
使用したプログラムはAdafruitのライブラリに入っていたttcs34725.pdeです。
回答遅くなりすみません。
V2ライブラリを使用する場合、Webコンパイラのプロジェクトテンプレート「GR-SAKURA_Sketch_V2.13」を選んでプロジェクトを作ってください。
V2ライブラリではWireも含めて標準のライブラリが始めから入っていますので、ライブラリインポートは不要です。
前述の通りライブラリをインポートしてビルドをしてみてください。
返信遅くなってしまい申し訳ございません。
ご助言通り試してみたところ問題なく動かすことができました。
本当にありがとうございます。