前回スレッドで16F819PICとRGBセンサー(tcs34725)をI2c通信でつなげ、LCDに読みだそうとしましたが、難しすぎてあきらめました。 みけさんをはじめ皆様にアドバイス頂いたのにも関わらず失敗におわってしまい申し訳ありません。自作で作品を作るのが今回が二回目だったので全然うまくいきませんでしたが、より一層なにかを完成させたいと思いました!
そこで、もっと簡単なことからはじめようと思い、違うセンサーボード(TCS230)を買いました。
周波数の違いでRGBの数値を取得できるらしいです。↓↓
http://nn-hokuson.hatenablog.com/entry/ ... /03/193449
これをArduinoではなく、C言語でPIC16F819にプログラミングしたいと考えているのですが、
やっぱりコードの流れがさっぱりわかりません。
最初は指定した色を3色に限定して、それらをLCDに読み出したいです。
例: 赤の紙をかざした時、LCDには ”RED DETECTED”と出したいです。
回路は画像のようにする予定です(5V レギュレーターも付きます)。
https://d.kuku.lu/3879d7be31
C言語においてはド素人です。他力本願で申し訳ありません。
よろしくお願いいたします。
ひよたん
あきらめて違うセンサーにしました。
Re: あきらめて違うセンサーにしました。
先ほどのarduino のコードを参考に書きだしました。
#include<16F819.h>
#FUSES NOWDT
#FUSES INTRC_IO,NOWDT,NOPROTECT,MCLR,NOBROWNOUT
#FUSES CCPB2 // CCP1_RB1 = OUT_PIN
#use delay (clock=8000000)
#use rs232(baud=9600,xmit=PIN_A1,rcv=PIN_A2,STREAM=PC) //PIN_A1=tx,PIN_A2=rx
//defined PINS
#define S0 PIN_B7
#define S1 PIN_B6
#define S2 PIN_B5
#define S3 PIN_B3
#define OUT PIN_B2
//Calibration Black & WhiteRGB
int white_R =?;
int white_G=?;
int white_B=?;
int black_R=?;
int black_G=?;
int black_B=?;
void setup(){
//Set PINs I/O
output_bit(PIN_B7);
output_bit(PIN_B6);
output_bit(PIN_B3);
input(PIN_B2); //OUT PIN receives RGB sensor ?
Void loop(){
//Red Sensor
Output_low(S2,S3);
//ここからはまだ未知です
if (int r<HIGH ){
}
Re: あきらめて違うセンサーにしました。
まずはセンサーの値を読み込む方法を考えるのは一旦やめて、
「読み込んだ値を返す」関数を固定値を返すダミーで作ることをおすすめします。
そして、その関数を用い、読み込んだ値(ダミー)に基づいてLCDに出力する部分を先に作ることをおすすめします。
関数が作れない・作った関数をうまく使えないのであれば、
将来センサーから読み込むことになる値を読み込む変数を用意し、
そこにダミーの値を入れておくというのでもいいでしょう。
「読み込んだ値を返す」関数を固定値を返すダミーで作ることをおすすめします。
そして、その関数を用い、読み込んだ値(ダミー)に基づいてLCDに出力する部分を先に作ることをおすすめします。
関数が作れない・作った関数をうまく使えないのであれば、
将来センサーから読み込むことになる値を読み込む変数を用意し、
そこにダミーの値を入れておくというのでもいいでしょう。
オフトピック
OUTピンをB2…すなわちCCP1に接続するのですね。
ということは、キャプチャモジュールを使ってパルスの幅を測る感じになりそうですね。
interrupt-on-changeはB4~B7だけで、B2では使えないようですし。
そもそも、パルスの幅、すなわち時間を自分で測定することが要求される今回のセンサーより、
測定値をそのまま数として取得でき、読み込むコードもできてきていた前回のセンサーのほうが
簡単そうな気がしますが…それでもセンサーを変えたいのであれば、好きにすればいいでしょう。
ということは、キャプチャモジュールを使ってパルスの幅を測る感じになりそうですね。
interrupt-on-changeはB4~B7だけで、B2では使えないようですし。
そもそも、パルスの幅、すなわち時間を自分で測定することが要求される今回のセンサーより、
測定値をそのまま数として取得でき、読み込むコードもできてきていた前回のセンサーのほうが
簡単そうな気がしますが…それでもセンサーを変えたいのであれば、好きにすればいいでしょう。
オフトピック
難しい目標に挑戦することは悪くないでしょう。
しかし、今のひよたんさんの実力はどの程度でしょうか?
今の目標は、実力と離れすぎていないでしょうか?
Lチカやナイトライダー(1列に並んだLEDが順に点灯し、点灯する位置が往復するもの)など、
もう少し実力に合った簡単な目標から取り組んでみるというのはどうでしょうか?
しかし、今のひよたんさんの実力はどの程度でしょうか?
今の目標は、実力と離れすぎていないでしょうか?
Lチカやナイトライダー(1列に並んだLEDが順に点灯し、点灯する位置が往復するもの)など、
もう少し実力に合った簡単な目標から取り組んでみるというのはどうでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)