ここから本文です

arduinoでアナログジョイスティックを扱いたいです。

miyachon712さん

2016/7/423:16:14

arduinoでアナログジョイスティックを扱いたいです。

そこでジョイスティックの方向を数値に変換したいと思い、以下のようなプログラムを書きました。しかしジョイスティックをいくら動かしても数値は0のままでした。
おそらくプログラムのミスでしょうが、どこが間違っているのかわかりません。わかる方御教授よろしくお願いします。
一応、ジョイスティックの値は画像を参考にしてください。(汚い)




--プログラム--



#define X A4
#define Y A3
int rocate;
void setup() {
Serial.begin(9600);
pinMode(B,INPUT);
pinMode(X,INPUT);
pinMode(Y,INPUT);

}

void loop() {

if(500<analogRead(X)<600 && 500<analogRead(Y)<600){
rocate = 0;
}else if(1000<analogRead(X)<1100 && 500<analogRead(Y)<600){
rocate = 1;
}else if(1000<analogRead(X)<1100 && 1000<analogRead(Y)<1100){
rocate = 2;
}else if(500<analogRead(X)<600 && 1000<analogRead(Y)<1100){
rocate = 3;
}else if(0<=analogRead(X)<100 && 1000<analogRead(Y)<1100){
rocate = 4;
}else if(0<=analogRead(X)<100 && 500<analogRead(Y)<600){
rocate = 5;
}else if(0<=analogRead(X)<100 && 0<=analogRead(Y)<100){
rocate = 6;
}else if(500<analogRead(X)<600 && 0<=analogRead(Y)<100){
rocate = 7;
}else if(1000<analogRead(X)<1100 && 0<=analogRead(Y)<100){
rocate = 8;
}else {}
Serial.println(rocate);
delay(1000);
}

補足中央:0
上:1
右上:2
右:3
右下:4
下:5
左下:6
左:7
左上:8

値は以上のように変換したいです。

analogRead,rocate,else if,ジョイスティック,pinMode,Serial.print,Serial.println

閲覧数:
27
回答数:
1

違反報告

ベストアンサーに選ばれた回答

koujikuuさん

2016/7/501:30:15

(1) アナログ入力なので、pinMode(X,INPUT); は不要
(2) 500<analogRead(X)<600 この比較は出来ません2っに分割します

プログラム例
アナログ入力は0~1023 なので3分割しました 0 - 341 - 642 - 1023

#define XP A1 // x analog port
#define YP A0 // y analog port
#define AL 341 // 1023 / 3 比較用設定値
#define AH 642 // 1023 / 3 * 2

unsigned char dat_tbl[9]={ 8,1,2,7,0,3,6,5,4 }; // locate 変換テーブル

// (8) (1) (2)
// (7) (0) (3)
// (6) (5) (4)

void setup(void){
Serial.begin(9600);
while( !Serial );
Serial.println("Arduino Program Start !!");
}
void loop(void){
unsigned long x,y;
unsigned char swp=0,locate;
x=analogRead( XP ); y=analogRead( YP );
// if ( x <= AL ){ swp=0; }
if ( x > AL && x <= AH ){ swp=1; }
if ( x > AH ){ swp=2; }
// if ( y <= AL ){ swp +=0; }
if ( y > AL && y <= AH ){ swp +=3; }
if ( y > AH ){ swp +=6; }
locate = dat_tbl[ swp ];
Serial.print(" locate= "); Serial.print( locate );
Serial.print(" swp= "); Serial.print( swp );
Serial.print(" X= "); Serial.print( x );
Serial.print(" Y= "); Serial.print( y );
Serial.println();
delay(1000);
}

この質問は投票によってベストアンサーに選ばれました!

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

5文字以上入力してください

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。