2016-11-12 8 views
0

Bluetoothモジュールと振動モーターが付いているarduino UNOがあります。私はバイブレーターをオンにすることはできますが、それをオフにすることはできません。ここではブルートゥース端子にコード入力後にArduinoが振動をオフにしない0

#include<SoftwareSerial.h>//import the serial library 

int vib=8; 
SoftwareSerial Genotronex(10,11);//RX,TX 
int BluetoothData;//the data given 

void setup() { 
Genotronex.begin(9600); 
Genotronex.println("Bluetooth on please press 1 to vibrate"); 
pinMode(vib,OUTPUT); 
// put your setup code here, to run once: 
} 

void loop() { 
if (Genotronex.available()){ 
BluetoothData=Genotronex.read();{ 
if(BluetoothData='1'){ 
    digitalWrite(vib,'1'); 
    Genotronex.println("Vibrator on"); 
    delay(500); 

    } 
    else if (BluetoothData='0'){ 
    digitalWrite(vib,'0'); 
    Genotronex.println("Vibrator off"); 
    delay(500); 

    } 
    } 
    } 
delay(100); 
// put your main code here, to run repeatedly: 
} 

だ、それは とき、私入力「1」 に < 1>バイブレータを述べただけでなく、 < 0を明記)バイブレータ とき、私は入力に「0」ときそれが必要バイブレーターがオフになっています。

すべてのヘルプ

+2

「 '0'」と「 '' 1」は「0」と「1」と同じではありません。最初のセットは文字列(またはchar)で、2番目のセットは整数です。あなたの 'BluetoothData'変数は整数なので、整数値と比較する必要があります。あなたの 'digitalWrite'関数も同様です。これらを整数に変更するか、' HIGH'と 'LOW'を使いたいでしょう – TyloBedo

+0

@TyloBedo:' '1''は文字列ではありません。これは文字( 'char'型)です。これは 'C++ 'なので、文字は数値データ型です。したがって、charとintを比較するのは問題ありません(読み込むデータがない限り)。しかし、 'digitalWrite(vib、 '0')'についての良い点です。これは別の問題です。比較演算子の代わりに代入演算子を使用するだけではありません – KIIV

+0

解決済み!ありがとうございます:) – AFME

答えて

2
if(BluetoothData='1'){ 
       ^

に感謝シングル=が割り当てです。比較には==を使用してください。

また、は、おそらくloop()のローカル変数として定義する必要があります。いずれにしてもうまくいくが、少し効率的な(より読みやすい!)コードにコンパイルされます。

+0

'BluetoothData'もintとして定義されており、文字列との比較を試みています。 – TyloBedo

+0

式 'digitalWrite(vib、 '0');'も論理1になります。したがって、「常に真」のステートメント条件を修正するだけでは不十分です – KIIV

関連する問題