2015-02-01 3 views
1

Я делаю связь между 2013 Nexus 7 с Android 4.4.4 и Arduino Mega 2560 с блоком Bluetooth HC-06. Я установил соединение с Nexus 7 на HC-06 и получил данные о синхронизации с Nexus от Arduino, но я не могу перенести данные из Nexus 7 в Arduino. Я не получаю ошибок при передаче данных на Android, но Arduino получает пробел вместо отправленного мной символа.Android Отправить сообщение Bluetooth Получает космический знак

Android метод записи:

public void write(String message) { 
     Log.d(TAG, "...Data to send: " + message + "..."); 
     byte[] msgBuffer = message.getBytes(); 
     try { 
      mmOutStream.write(msgBuffer); 
     } catch (IOException e) { 
      Log.e(TAG, "...Error data send: " + e.getMessage() + "..."); 
     } 
    } 

Посылает данные:

public static void sendInfo(String info) { 
    boolean isErr = false; 
    if (MainActivity.isConnected) { 
     Log.d(TAG, "In sentInfo()"); 
     //Log.d(TAG, "...Data to send: " + info + "..."); 
     //TO(done)DO: send info to bluetooth device (Arduino) 


     try { 
      mConnectedThread.write(info); 
     } catch (NullPointerException n) { 
      isErr = true; 
      Log.e("Error", "Failed to send message \"" + Arrays.toString(msg) + "\" with error \"" + n.getMessage() + ".\""); 
     } 

     if (!isErr) { 
      Log.i("sentInfo", "In sentInfo(), this was sent: " + Arrays.toString(msg)); 
      //noinspection ALL 
      isErr = false; 
     } 
    } else { 
     Toast.makeText(MainActivity.mThis, "Please connect the Arduino", Toast.LENGTH_SHORT).show(); 
    } 
} 

Arduino получить код:

int setMsg() { 
    if (Serial1.available() > 0) { 
     chars = Serial1.available(); 
     incomingByte = Serial1.read(); 
     putstring("You've Got Mail! Characters: "); 
     Serial.print(chars); 
     putstring(" Message: '"); 
     Serial.print(incomingByte); 
     putstring_nl("'."); 
     if  (incomingByte == 49) { 
     return 1; 
     flashLED(500); 
     Serial.println(msg); 
     } else if (incomingByte == 50) { 
     return 2; 
     flashLED(500); 
     Serial.println(msg); 
    } else if (incomingByte == 51) { 
     return 3; 
     flashLED(500); 
     Serial.println(msg); 
     } else if (incomingByte == 52) { 
     return 4; 
     flashLED(500); 
     Serial.println(msg); 
     } else if (incomingByte == 53) { 
     return 5; 
     flashLED(500); 
     Serial.println(msg); 
     } else if (incomingByte == 100) { 
     return 6; 
     flashLED(500); 
     Serial.println(msg); 
     } else { 
     Serial.println(incomingByte); 
     digitalWrite(ledPin, HIGH); 
     delay(3250); 
     digitalWrite(ledPin, LOW); 
     delay(20); 
     return 0; 
     } 
    } 
} 

Пожалуйста, объясните, почему Arduino-х Serial всегда печатает You've Got Mail! Characters: 1 Message: ' '., когда Nexus 7 отправляет любое сообщение (только я отправлять номера в кавычки до функции sendInfo()) на HC-06.

+0

какой тип вы сделали входящийByte? Кроме того, может быть лучше использовать коммутатор вместо всех тех, которые ifs –

+0

Также этот 'byte [] msg = info.getBytes(); '- ненужная строка, вы не используете ее из того, что я вижу, вы разбираете строку в байтовый массив в методе' write (string)' и все, что у вас есть после возврата в каждом if, не будет выполнен 'return 1;' 'flashLED (500);' 'Serial.println (msg);' –

+0

Я определил 'incomingByte' как' char' в верхней части моего эскиза. –

ответ

0
  • Какой тип вы сделали incomingByte int?

Редактировать в ответ на ваш комментарий:

incomingByte needs to be an int.

Измените свой код для чтения:

Arduino Mega example:

void setup() { 
    Serial.begin(9600); 
    Serial1.begin(9600); 

} 

void loop() { 
    // read from port 0, send to port 1: 
    if (Serial.available()) { 
    int inByte = Serial.read(); 
    Serial1.print(inByte, BYTE); 

    } 
    // read from port 1, send to port 0: 
    if (Serial1.available()) { 
    int inByte = Serial1.read(); 
    Serial.print(inByte, BYTE); 
    } 
} 

(я только отправить цифры в кавычках к функции sendInfo()) к HC-06.

Вы не должны отправлять числа в кавычки, просто цифры. Это может быть вашей проблемой, поскольку она читает кавычку.

  • также, возможно, было бы лучше использовать переключатель вместо всех этих МФС

  • Также этот byte[] msg = info.getBytes(); в sendInfo(String info) { ненужная линия, вы не используете его от того, что я могу видеть, вас разобрать строку в массив байтов в write(string) method

Вместо Log.i("sentInfo", "In sentInfo(), this was sent: " + Arrays.toString(msg)); вы можете иметь Log.i("sentInfo", "In sentInfo(), this was sent: " + info);

и весь материал, вы должны после возвращения в каждом случае, не будут выполнены

return 1; 
flashLED(500); 
Serial.println(msg); 

Все, что вы хотите выполнить в каждом случае необходимо поставить в перед обратным утверждением заявления, возвращение приведет к тому, чтобы закончить и вернуться к вызывающей функции.

+0

Я изменил его соответствующим образом, но теперь он всегда получает «У вас есть почта! Персонажи: 1 Сообщение: '0'.' независимо от того, что послало сообщение! –

+0

Вы также можете попробовать форматировать его 'Serial.print (val, format)' 'Serial.print (val, DEC)' Но я не уверен, что это проблема. Что вы отправляете. В точку? Вы вставляете кавычки? Откуда вы берете String для отправки, EditText? возможно, вы также можете показать этот код. спасибо –

+0

Я считаю, что 'mmOutputStream' отправляет цифру, которую я хочу отправить в форме ASCII, используя' byte [] msgBuffer = message.getBytes(); '. Я не отправляю никаких цитат. Я получаю номер из нескольких кнопок, которые может нажать пользователь, который должен отправить цифровую строку, например: «ArduinoTools.sendInfo (« 5 »);' (функция 'sendInfo()', если смотреть выше, хранится в другом файле '.java') Я получил это для работы раньше, но я не знаю, что сейчас не так, или как решить проблему. –

Смежные вопросы