私は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);
}
通信はバイト単位で行われます。 –
また、両端でも同様のエンコーディングタイプを使用していますか? –
はい、通常、私はbtSocket.getOutputStream()を使用して方向を送信しています。write( "F" .getBytes());同様に、私はbtSocket.getOutputStream()を試みた。書き込み((バイト)速度);何も変わっていない。また試しましたString outputData = String.valueOf(speed); btSocket.getOutputStream.write(speed.getBytes()); – ysfcyln