Processing串口编程
Processng的串口通信是由serial库提供的,可以通过调用成员函数来实现。
在processing中输入以下程序:
import processing.serial.*;
Serial myPort;
void setup()
{
size(400,400);
}
void draw()
{
println(Serial.list());
}
显示端口的串口号
Processing向串口发送数据
import processing.serial.*; //导入serial库
Serial port; //实例化一个Serial对象
String message;
void setup()
{
message ="c";
port =new Serial(this,"COM3",9600); //初始化port,第二个参数是端口号,第三个参数是比特率
}
void draw()
{
port.write(message); //发送数据
}
执行程序后Arduino板子上的RX灯一直亮起,数据不断发送,中断程序,RX灯熄灭。
Arduino串口编程
Arduino从串口输出字符
int c= 0;
void setup()
{
Serial.begin(9600);//比特率9600
}
void loop()
{
if(Serial.available())
{
c= Serial.read();
Serial.print("hello word:");
Serial.println(c,DEC);
}
delay(200);
}
从串口监视器里输入任意字符,单片机会接收到返回该字符的ASCII码。
在Processing界面上画一个矩形,当用鼠标单击矩形内的时候,Arduino板载的LED灯(13引脚)点亮,单击矩形外的时候,Arduino板载的LED灯熄灭。
processing代码
import processing.serial.*;
Serial port;
void setup()
{
port =new Serial(this,"COM3",9600);
size(400,400);
}
void draw()
{
background(125);
fill(255);
rect(100,100,50,50);
}
void mouseClicked()
{
if((mouseX>=100)&(mouseX<=150)&(mouseY>=100&mouseY<=150))
{
println("LED turn ON!");
port.write("a");
}
else
{
println("LED trun OFF!");
port.write("b");
}
}
arduino代码
int c =0;
void setup()
{
Serial.begin(9600); //比特率9600
pinMode(13,OUTPUT); //设置数字引脚第13引脚为输出模式
digitalWrite(13,LOW);//设置该引脚的初始值为低电平
}
void loop()
{
if(Serial.available())
{
c=Serial.read();
if(c==97) //收到字母a,相当于97
digitalWrite(13,HIGH); //LED亮
else
if(c==98) //收到字母b,相当于98
digitalWrite(13,LOW);//LED灭
}
}
在arduino上接一个开关,长按开关,processing的绘制的圆形会变成红色;松开开关,processing上的圆变成绿色。初始为绿色。
processing代码
扫描二维码关注公众号,回复:
10875877 查看本文章
import processing.serial.*; //导入serial库
Serial myPort; //实例化Serial对象
void setup()
{
size(300,300);
ellipse(100,100,100,100);
myPort =new Serial(this,"COM3",9600); //初始化myport(根据Arduino分配的端口号填写)
}
void draw()
{
while(myPort.available()>0) //监听端口
{
char inByte =myPort.readChar();//读取字节
println(inByte); //显示接收到的字节
switch(inByte)
{
case 'a': //当接收的字母为a时填充红色
fill(0,255,0);
ellipse(100,100,100,100);//重新绘圆
break;
case 'b':
fill(255,0,0); //当接收到的字母为b时填充绿色
ellipse(100,100,100,100);
default:break;
}
}
}
arduino代码
boolean button; //定义布尔类型变量
void setup()
{
button =false;//初始值为false
pinMode(8,INPUT);//定义8引脚为输入模式
Serial.begin(9600);//设置比特率为9600bps
}
void loop()
{
button =digitalRead(8);//读取第8引脚
if(button)
{
Serial.write("a");//读到高电平发送‘a’
}
else
{
Serial.write("b");//读到低电平发送‘b’
}
}
按下开关后:
实现arduino与processing双向收发
processing代码
import processing.serial.*; //导入serial库
Serial myPort; //实例化一个Serial对象
int lf=10; //换行符号的ASCII码值
String myString =null; //定义一个字符串变量
void setup()
{
size(300,300);
background(125);
myPort =new Serial(this,"COM3",9600);
myPort.clear();
}
void draw()
{
rect(100,100,50,50);
while(myPort.available()>0) //监听端口
{
myString = myPort.readStringUntil(lf);//读字符串,直到出现换行符后,将字符串赋值给myString变量
if(myString!=null)
{
background(125); //清空屏幕
text(myString,10,30); //灯光开启,关闭提示显示屏幕左上角
}
}
}
void mouseClicked()
{
if((mouseX>=100)&(mouseX<=150)&(mouseY>=100)&(mouseY<=150)) //鼠标在矩形区域内单机时
{
myPort.write("a"); //往串口发送a
}
else
{
myPort.write("b");//发送b
}
}
arduino代码
int c= 0;
void setup()
{
Serial.begin(9600); //比特率9600
pinMode(13,OUTPUT); //设置数字引脚第13脚为输出模式
digitalWrite(13,LOW);//设置该引脚的初始值为低电平
}
void loop()
{
if(Serial.available())
{
c=Serial.read();
if(c==97) //如果收到字母a(ASCII码值为97)
{
digitalWrite(13,HIGH);//第13引脚置为高电平,LED灯亮
Serial.println("Light turn ON");//向着Processing发送灯已开启的字符串,结尾处有换行符
}
else
{
if(c==98) //接收到字母b
{
digitalWrite(13,LOW);//第13引脚置为高电平,LED灯亮
Serial.println("Light turn OFF");//向Processing发送灯灭的字符串
}
}
}
}
readStringUntil()函数能一直读取字符串,直到出现事先约定好的中指符号,使用该函数能完整的读取整个字符串。若使用readString()函数则可能会出现读不到完整的字符串,或者只读一半的情况。