使用android控制伺服

时间:2017-06-06 05:20:08

标签: android bluetooth arduino servo

问问题大师,如何使用android通过蓝牙控制伺服的arduino编码?下面的代码不起作用,伺服仅在48 - 56之间运行。

#include <SoftwareSerial.h> #include <SoftwareSerial.h> #include <Servo.h> Servo servo; int bluetoothTx = 10; int bluetoothRx = 11; SoftwareSerial bluetooth(bluetoothTx, bluetoothRx); void setup() {   servo.attach(9);
 Serial.begin(9600); bluetooth.begin(9600);} void loop() {
//read from bluetooth and wrtite to usb serial
if(bluetooth.available()> 0 ){    int servopos = bluetooth.read();
Serial.println(servopos);
servo.write(servopos);}} 

2 个答案:

答案 0 :(得分:1)

您从蓝牙中读取的内容是ascii代码的单个字节。数字的ascii代码从48到57运行。因此,如果你发送例如“10”,那么它发送49然后是48.你只是直接读取值。相反,您需要将读取的字符累积到缓冲区中,直到您拥有它们然后使用atoi转换为您可以使用的实数。

答案 1 :(得分:0)

  1. 使用以下内容将数据作为字符串读取:string input = bluetooth.readString();
  2. 然后使用:int servopos = int(input);
  3. 将字符串转换为int
  4. 然后将位置写入伺服:servo.write(servopos);
  5. 现在,根据您从android发送的数据,您可能需要:
    修剪它:input = input.trim();
    或限制它:servopos = constrain(servopos,0,180);

    您的更正代码:

    #include <SoftwareSerial.h>
    #include <Servo.h>
    Servo servo;
    int bluetoothTx = 10;
    int bluetoothRx = 11;
    SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
    void setup() {
      servo.attach(9);
      Serial.begin(9600);
      bluetooth.begin(9600);
    } 
    
    void loop() {
      //read from bluetooth and wrtite to usb serial
      if (bluetooth.available() > 0 ) {
        String s = bluetooth.readString();
        s.trim();
        float servopos = s.toFloat();
        servopos = constrain(servopos, 0, 180);
        Serial.println("Angle: "+String(servopos));
        servo.write(servopos);
      }
    }