arduino接收不了16进制数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arduino接收不了16进制数据?相关的知识,希望对你有一定的参考价值。

arduino接收16进制数据并处理
比如用一个软件发送16进制数 8 到arduino 。
之前用过虚拟串口,软件发送,然后串口助手接收并且16进制显示,显示的是08没错,但是直接传输到arduino里没有动作。
代码:
int led1= 2;
int led2 = 3;
int val = 0;
void setup()

Serial.begin(9600);
pinMode(o, OUTPUT);
pinMode(op, OUTPUT);

void loop()

if(Serial.available()>0)
val = Serial.read();

if(val == 0)

digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);
delay(3000);


else if(val == 8)

digitalWrite(led1,LOW);
digitalWrite(led2,HIGH);
delay(3000);

else

digitalWrite(led1 == led2,LOW);
delay(3000);



int val = 0;

改为HEX

楼上说的对,如果你直接给串口发送 8 的话,这个 8 是字符(ASCII码),不是16进制数。试试0x08,或08,hex 参考技术A 你错了,串口助手发送的8是字符8不是数字8,你要确定是不是16进制的数据,你可以试试'8'或者0x08

Java TCP socket通信,如何实现发送十六进制值,并在数据接收窗口中显示这些数据对应的字符串,非常感谢!

一个Java TCP socket通信的代码,实现了server与client相互发送字符串功能。
请问大家:应如何实现发送十六进制数据呢?并实现在数据接收提示窗口中 显示 所发送的十六进制数据对应的字符串。。
本人的思路:在接收端,将收到的十六进制数据转化成字符串,再输出。
根据网上的例子修改代码,但是老是实现不了,以下贴的代码是实现接收字符串信息,请大家帮忙,在以下代码的基础上修改一下,实现以上功能。非常感谢~!
//服务器端接收信息的部分代码如下:
public void run()
DatagramPacket pack = new DatagramPacket(buffer,buffer.length);
while(!stop)
try
server.receive(pack);
if(server == tcpServer.server)///////////////会话栏中提示服务器收到的信息
parent.append("服务器[" + pack.getAddress().getHostAddress()+":"
+pack.getPort()+"]收到信息: " +
new String(pack.getData(),0,pack.getLength()) );
else
parent.append("服务器收到信息: " +
new String(pack.getData(),0,pack.getLength()) );
catch (Exception e)
if(!stop)
parent.error(e.getMessage(),"Error acception connection");
stop=true;

continue;

//end of while
//end of run
兜里没分了,不好意思不能给大家悬赏,非常感谢您的help...

我自己的电脑上有一段源代码,就是基于TCP聊天小代码,能进行相互之间的消息接受。我的代码是直接传输字符串的,不是16进制滴。嗯,也贴出来看看吧!

运行服务器,c1,c2就可以了,c1与c2可进行通信。

Client.java

import java.net.*;
public class Client
static byte num=1;
private int portNum;

public Client(int portnum)
this.portNum=portnum;
System.out.println("您是第"+num+"位客服端");
num++;


public void sentMessage(String me)
//都是向服务器发信息端口号1999
try
DatagramSocket ds=new DatagramSocket();
DatagramPacket dp=new DatagramPacket(me.getBytes(),me.length(),InetAddress.getByName("127.0.0.1"),1999);
ds.send(dp);
ds.close();
catch(Exception e)
e.printStackTrace();




public String receiveMessage()
String str="";
try
DatagramSocket ds=new DatagramSocket(this.portNum);//表示哦自己的接收端口号是1999
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,1024);
ds.receive(dp);
str=new String(dp.getData(),0,dp.getLength());
ds.close();
catch(Exception e)
e.printStackTrace();


return str;



c1.java

import java.util.*;
public class c1 implements Runnable
Client cl;
boolean goon=true;
Scanner sc=new Scanner(System.in);
public c1()
cl=new Client(2000);
System.out.println("这里是2000客户端\n你可以发送信息。请输入要发送的信息。out退出");

new Thread(this).start();
while(this.goon==true)
say();

if(goon==false)
System.exit(0);



public static void main(String[] args)
new c1();


public void say()
String mess=sc.nextLine();
System.out.println("是否发送y/n");
String key=sc.nextLine();
if(key.equals("y"))
System.out.println("信息信息发送中……");
try
cl.sentMessage(mess);
catch(Exception e)
e.printStackTrace();


else if(key.equals("out"))
goon=false;



public void run()
while(this.goon==true)
String sst="";
try
sst=cl.receiveMessage();
catch(Exception e)
e.printStackTrace();


if(sst.length()>0)
System.out.println(sst);

try
Thread.sleep(100);
catch(InterruptedException e)
e.printStackTrace();



System.out.println("程序结束!");



c2.java

import java.util.*;
public class c2 implements Runnable
Client cl;
boolean goon=true;
Scanner sc=new Scanner(System.in);
public c2()
cl=new Client(2001);
System.out.println("这里是2001客户端\n你可以发送信息。请输入要发送的信息。out退出");
new Thread(this).start();
while(goon==true)
say();

if(goon==false)
System.exit(0);



public static void main(String[] args)
new c2();


public void say()
String mess=sc.nextLine();
System.out.println("是否发送y/n");
String key=sc.nextLine();
if(key.equals("y"))
System.out.println("信息信息发送中……");
try
cl.sentMessage(mess);
catch(Exception e)
e.printStackTrace();


else if(key.equals("out"))
this.goon=false;



public void run()
while(this.goon==true)
String sst="";
try
sst=cl.receiveMessage();
catch(Exception e)
e.printStackTrace();


if(sst.length()>0)
System.out.println(sst);

try
Thread.sleep(100);
catch(InterruptedException e)
e.printStackTrace();



System.out.println("聊天关闭!");



Server.java

import java.net.*;
import java.util.*;
public class Server implements Runnable
private String message;
boolean work=true;
byte tm=10;
String[] clomessage="信息:正在断开网络连接.",".",".\n","信息:设置保存中……","","","完成\n","信息:欢迎下次使用\n","信息:完成\n","Goodbye!";
public Server()
new Thread(this).start();
System.out.println("本程序为服务端Server");
Scanner sc=new Scanner(System.in);
System.out.println("输入命令out关闭服务器");
String clo=sc.nextLine();
if(clo.equals("out"))
System.out.println("正在关闭服务器……");
setwork(false);
System.exit(0);




public static void main(String[] args)
new Server();



public void setwork(boolean bo)

this.work=bo;


public void setMessage(String str)
this.message=str;


public String getMessage()
return this.message;


public void sentMessage()
String mes=this.getMessage();
try
DatagramSocket ds=new DatagramSocket();
DatagramPacket dp=new DatagramPacket(mes.getBytes(),mes.length(),InetAddress.getByName("127.0.0.1"),2000);
DatagramPacket dp2=new DatagramPacket(mes.getBytes(),mes.length(),InetAddress.getByName("127.0.0.1"),2001);
ds.send(dp);
ds.send(dp2);
ds.close();
System.out.println("信息发送至:127.0.0.1:2000 & 127.0.0.1:2001");
this.setMessage("");
catch(Exception e)
e.printStackTrace();



public void receiveMessage() throws Exception
try
DatagramSocket ds=new DatagramSocket(1999);//表示哦自己的接收端口号是1999
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,1024);
ds.receive(dp);
String str=new String(dp.getData(),0,dp.getLength());
if(str.length()>0)
this.setMessage(str);
System.out.println("信息:Server从"+dp.getAddress().getHostAddress()+"主机(端口号:"+dp.getPort()+")收到信息:"+this.getMessage());


ds.close();
catch(Exception e)
e.printStackTrace();



public void run()
while(tm>0)
if(work==false)
tm--;
System.out.print(clomessage[9-tm]);

try
receiveMessage();//时刻接受信息
catch(Exception e)
e.printStackTrace();


if(this.getMessage().length()>0)//如果接收到信息则发送信息

try
sentMessage();
catch(Exception e)
e.printStackTrace();

try
Thread.sleep(100);
catch(InterruptedException e)
e.printStackTrace();







呵呵,请指教啊!
参考技术A 短小精悍,必对!

1,首先将你的16进制的数据,转化成byte[],然后发送
2,获得数据,然后将byte[]的东西转化成String,int等你可以看清的进行显示本回答被提问者采纳
参考技术B 你这哪是TCP通信哦,应该是UDP通信吧 参考技术C 我想到的两种方法哟,一种发送端把数据转换成16进制的字符串,接收端直接接收显示;另一种发送端就发数字,接收端转化成16进制数显示;这难吗,跟你发字符串一起的哟 参考技术D 你发送的数据到底是什么呢,数字?字符串?中文?

还是什么都有?

以上是关于arduino接收不了16进制数据?的主要内容,如果未能解决你的问题,请参考以下文章

arduino串口接收的问题

请教关于arduino串口使用16进制发送问题

请教高人,ARDUINO如何代替串口助手发16进制数据

如何在linux下调试串口,发送十六进制数据

我用udp发送一个16进制包,接收端怎么解析。

java的socket通信如何直接接收16进制数据