【Processing+Arduino互动编程】NO.1

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()函数则可能会出现读不到完整的字符串,或者只读一半的情况。


发布了28 篇原创文章 · 获赞 3 · 访问量 892

猜你喜欢

转载自blog.csdn.net/wangpuqing1997/article/details/105201551
今日推荐