我正在尝试与Android手机沟通Arduino UNO,我想要的是
http://www.arduino.cc/en/Main/arduinoBoardUno
1)android设备将字符串发布到arduino
2)arduino将整数发布到android
到目前为止,我可以发布来自Android的消息,在Arduino主板上收到,但我无法发布一个整数到android,没有在android收到
Arduino代码(可以接收字符“a”,“b”,“c”,“d”,对于案例“z”,我想发送回来的距离是一个int):
void loop()
{
distance = Dist.getDistanceCentimeter();
if(distance<=5 & distance>1)
{
back();
delay(100);
ting();
distance=0;
}
if(Serial.available())
{
lkf = Serial.read();
switch(lkf)
{
case 'a':
front();
servoX.write(90);
lkf=0;
break;
case 'b':
back();
lkf=0;
break;
case 'c':
left();
lkf=0;
break;
case 'd':
right();
lkf=0;
break;
case 'z':
Serial.write(distance);
break;
}
}
}
Android代码:
在主要活动中
@Override
protected TCPClient doInBackground(String... message) {
//create TCPClient object
mTcpClient = new TCPClient(new TCPClient.OnMessageReceived() {
@Override
//check whether server return message
public void messageReceived(String message) {
f_sensor.setText(message);
Log.d("test1","msg rece" + message);
//publishProgress(message);
}
});
mTcpClient.run();
return null;
}
TCP Cilent
public class TCPClient {
private String serverMessage;
public static final String SERVERIP = "192.168.8.1"; //your computer IP address
public static final int SERVERPORT = 2001;
private OnMessageReceived mMessageListener = null;
private boolean mRun = false;
PrintWriter out;
BufferedReader in;
/**
* Constructor of the class. OnMessagedReceived listens for the messages received from server
*/
public TCPClient(OnMessageReceived listener) {
mMessageListener = listener;
}
/**
* Sends the message entered by client to the server
* @param message text entered by client
*/
public void sendMessage(String message){
if (out != null && !out.checkError()) {
out.println(message);
out.flush();
}
}
public void stopClient(){
mRun = false;
}
public void run() {
mRun = true;
try {
//here you must put your computer's IP address.
InetAddress serverAddr = InetAddress.getByName(SERVERIP);
Log.e("TCP Client", "C: Connecting...");
//create a socket to make the connection with the server
Socket socket = new Socket(serverAddr, SERVERPORT);
try {
//send the message to the server
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
Log.e("TCP Client", "C: Sent.");
Log.e("TCP Client", "C: Done.");
//receive the message which the server sends back
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//in this while the client listens for the messages sent by the server
while (mRun) {
serverMessage = in.readLine();
if (serverMessage != null && mMessageListener != null) {
//call the method messageReceived from MyActivity class
mMessageListener.messageReceived(serverMessage);
}
serverMessage = null;
}
Log.d("test1",serverMessage);
Log.e("RESPONSE FROM SERVER", "S: Received Message: '" + serverMessage + "'");
} catch (Exception e) {
Log.e("TCP", "S: Error", e);
} finally {
//the socket must be closed. It is not possible to reconnect to this socket
// after it is closed, which means a new socket instance has to be created.
socket.close();
}
} catch (Exception e) {
Log.e("TCP", "C: Error", e);
}
}
//Declare the interface. The method messageReceived(String message) will must be implemented in the MyActivity
//class at on asynckTask doInBackground
public interface OnMessageReceived {
public void messageReceived(String message);
}
}
感谢您的帮助
注意:我发现了关于董事会的一些事实,是否有任何提示?
整数的二进制表示在Arduino(16位)和Android(32)位之间变化,虽然Arduino和大多数本机级Android实现都是little-endian,但Android java代码是big-endian。