2016-04-28 8 views
0

私はBluetooth経由でArduinoに通信するアプリを持っています。私はシークバーを使用してDCモータの速度を変更したい、通信に関する問題はない、私はバーを移動している間、私はArduinoシリアルポート画面からの結果をチェックし、 "# '$)(* <:それらのいくつかはA、B、Cのような通常の文字です... 0-255の間の整数だけが必要ですthese answerを見つけましたが、役に立たなかったArduino - Android Communication SeekBarの値

これはAndroidの部分です

seekbar = (SeekBar)findViewById(R.id.seekBar); 
seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

     int speed= 0; 

     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 

      speed = progress; 

      if(btSocket!=null){ 
       try { 
        btSocket.getOutputStream().write(speed); 
       } catch (IOException e){ 
        msg("Error"); 
       } 
      } 
     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 

     } 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 

     } 
    }); 

これは私がAndroidとArduinoの間のBluetooth接続を行うためにクラスを書いた私のコードはgithubの上でArduinoのパート

int pwm_a = 3; 
int pwm_b = 11; 
int dir_a = 12; 
int dir_b = 13; 
char incomingByte; //incoming data for directions 
int speed; // incoming data for speed 

void setup() 
{ 
    Serial.begin(9600); 
    pinMode(pwm_a, OUTPUT); 
    pinMode(pwm_b, OUTPUT); 
    pinMode(dir_a, OUTPUT); 
    pinMode(dir_b, OUTPUT); 

    analogWrite(pwm_a, 0); 
    analogWrite(pwm_b, 0); 

} 

void loop() 
{ 
    if(Serial.available() > 0){ //if the data came 
incomingByte = Serial.read(); 
speed = Serial.read(); 


if (incomingByte == 'F'){ 
forward();} 
    else if (incomingByte == 'B'){ 
back();} 
if (incomingByte == 'R'){ 
right();} 
if (incomingByte == 'L'){ 
left();} 
if (incomingByte == 'S'){ 
stop(); 
    } 
    } 
} 

void forward() 
{ digitalWrite(dir_a, HIGH); 
    digitalWrite(dir_b, HIGH); 
    analogWrite(pwm_a, speed);  
    analogWrite(pwm_b, speed); 
} 

void back() 
{ digitalWrite(dir_a, LOW); 
    digitalWrite(dir_b, LOW); 
    analogWrite(pwm_a, speed);  
    analogWrite(pwm_b, speed); 
} 
void right() 
{ digitalWrite(dir_a, LOW); 
    digitalWrite(dir_b, HIGH); 
    analogWrite(pwm_a, speed);  
    analogWrite(pwm_b, speed); 
} 

void left() 
{ digitalWrite(dir_a, HIGH); 
    digitalWrite(dir_b, LOW); 
    analogWrite(pwm_a, speed);  
    analogWrite(pwm_b, speed); 
} 
void stop() 
{ digitalWrite(dir_a, LOW); 
    digitalWrite(dir_b, LOW); 
    analogWrite(pwm_a, 0);  
    analogWrite(pwm_b, 0); 
} 
+0

通信はバイト単位で行われます。 –

+0

また、両端でも同様のエンコーディングタイプを使用していますか? –

+0

はい、通常、私はbtSocket.getOutputStream()を使用して方向を送信しています。write( "F" .getBytes());同様に、私はbtSocket.getOutputStream()を試みた。書き込み((バイト)速度);何も変わっていない。また試しましたString outputData = String.valueOf(speed); btSocket.getOutputStream.write(speed.getBytes()); – ysfcyln

答えて