【やりたいこと】
加速度センサの値に応じて、side=1→2→3→4となるようにしたいです。
また正しい順番(1→2→3→4)でない場合(例1→4,2→4等)は、エラーとしはじきたいです。
Arduino
1 2#include <Wire.h> 3#include <KX224_I2C.h> 4#include <I2Cdev.h> 5float x,y,z; //KX224出力 6String str_out; 7int buzzerPin = 13; //ブザーピンを設定 8 9KX224 kx224(KX224_DEVICE_ADDRESS_1E); //加速度センサA デバイスアドレス 10float acc[3]; 11 12int side = 0; //位置 初期0 13int prevSide = 0; //前回位置 初期0 14 15void setup() { 16 byte rc; 17 Serial.begin(57600); 18 while (!Serial); 19 Wire.begin(); 20 pinMode(13,OUTPUT); //ブザーピンを出力に 21 rc = kx224.init(); 22} 23 24 //Side 25 int toSide(float y){ 26 if(y>-0.2 && y<0.2){ 27 return 1; 28 }else if(y>=0.2 && y<0.5){ 29 return 2; 30 }else if(y>=0.5 && y<0.8){ 31 return 3; 32 }else if(y>=0.8 && y<1.1){ 33 return 4; 34 } 35 } 36 37 //エラー予防 38 int isTransitionOk(int side,int prevSide){ 39 return(side - prevSide) == 1; 40 } 41 42 43void loop() { 44 byte rc; 45 float acc[3]; 46 rc = kx224.get_val(acc); 47 48 x = acc[0]; 49 y = acc[1]; 50 z = acc[2]; 51 52 Serial.println(str_out); 53 str_out = String(side)+", "+String(prevSide)+", "+ String(x)+", "+String(y)+", "+String(z); 54 55 prevSide = side; 56 delay(100); 57 58 side = toSide(y); 59 if(isTransitionOk(side,prevSide)) { 60 if(side == 4) { 61 digitalWrite(13,HIGH); 62 delay(100); 63 digitalWrite(13,LOW); 64 side = 0; 65 } 66 } 67} 68
小生素人のため、どんなアドバイスでもいただければと思います。
宜しくお願い致します。
このコードで実行すると(想定と違って?)どうなるのでしょうか.
加速度センサーで得られるのは加速度です。加速度が位置に「なる」というのはどういう意味でしょうか。2階積分すれば変位は求まりますけれど...もしかして、「向き」ですか?
また、
> side=1→2→3→4となるようにしたい
そうなるように「した」のなら、
> (1→2→3→4)でない場合
にはなりません。
もひとつ、
> エラーとしはじきたいです
はじく、とはなにをすることですか?
プログラミングには素人でも、日本語は出来ますよね? なら、何をやりたいか(手段ではなく、目的)はちゃんと日本語で説明出来るのではないですか?
プログラムは魔法の呪文ではなく、あなたがコンピュータにやらせる命令を書き綴った文書でしかありません。自分が何をやりたいか(コンピュータに何をやらせたいか)を、不明な点がないように、論理的に説明できるようにしないとコンピュータへの命令書は出来ません。
jimbeさん
コメントありがとうございます。
<想定>
sideが1⇔2⇔3⇔4と変化するようにしたいです。
1→3,3→1のような入力は入らないようにしたい。
<実際>
1→3,3→1のような入力が発生してしまいます。
理解が及んでいないことが多いため、上記<想定>を達成するコードをご指南いただけないでしょうか?
宜しくお願い致します。
実際の出力結果を提示してください。
言葉だけでははっきりしません
> 1→3,3→1のような入力が発生してしまいます。
センサーがそういう信号を発生しているのなら、プログラムではどうしようもありません。
y方向に突如大きな加速度が発生すれば、センサーの出力値(=マイコンの入力値)が飛ぶのは当然でしょう。
それとも、センサーが0->0.5という値を出してきたとしても、1->2->3と順次遷移をすればいい、ということでしょうか?
thkanaさん
コメントありがとうございます。
>センサーが0->0.5という値を出してきたとしても、1->2->3と順次遷移をすればいい、ということでしょうか?
センサが1→3の時は3に変化せず、1の状態のままにしておきたいです。
ご指南いただけないでしょうか?
[Serial出力結果です] がファイル名のみで, 見られないのですが...どちらにアップロードされたのでしょう.
回答2件
あなたの回答
tips
プレビュー