原创 Arduino日记5

2012-3-13 19:12 2087 10 12 分类: 消费电子

  好了,继续我们的Arduino之旅,Arduino与processing的交互在前面已经实现,所以这次我们要干啥呢?首先,我们得看看Labview,Labview是一个适用于工业控制与实验控制的软件,但是如果纯粹的把它认为是软件就太简单了,从软件的角度来看,软件对硬件的实时的方便的控制给实验或是工业过程提供了很大的方便,其实这一切在我们的生活中也是比较普遍的存在的,首先,在我们的汽车上,当我们在触摸屏上轻轻的按了一下,我们的空调开启了,我们的雨刷开启了,这都是一种软件和硬件的良好的结合,通过这样的方式,我们可以完成对复杂过程的定制和监控,当然还有适当的调整,这就是一个非常好的做法。

  而我们在这里,就要实现这样的东西,还记得前面我们的LED小灯吗?我们可以在面包板上通过连上开关来控制小灯的明和灭,但是这样似乎比较呆板和普通,如果我们在自己的软件界面中设置一个虚拟的开关,然后当我们鼠标点击的时候就能看到直接的效果,也能实现一种控制,这样的控制是不是更为的吸引人呢?

  确实是的,我们正要做这样的事情,在这之前,必须好好的探究一下蕴藏在其中的原理,那么,原理是啥呢?就是我们曾经用过的COM3通讯端口,原来是我们往着里面写过数据,而通过Arduino来控制processing也就是这样的方式,在这里,就是变换一下,我们把这个数据的方向换一下,也就是让processing往里面写入数据由Arduino接收来控制Arduino上连接的小灯,好了,看起来是不难的,或者说,说到这里你应该已经会编程了。

  设定好相关的串口波特率,这里我设置的是9600,也可以有变化下,不过两端必须一致,然后通过processing中的myPort(一个Serial变量)来执行已经固化的write函数,把数据传入,然后在Arduino段读出,也就是通过Read(相同的原理)函数读出,好了,订好相关的交流的协议,这里就是你自己定了,这里有很大的发展空间,所以你可以去发挥啦!当然在processing中中特定的信号的发出是通过鼠标点击来辨别的,那么在这里我们就需要mousepressed这个函数,这方面的函数可以查找一下,在processing本身提供的范例中是有这样的一个的,当鼠标点击后,这个函数的存在使程序负责自动的获取点击的坐标(相对坐标,也就是相对整个程序创造的框图),根据这个位子我们就可以完成很多的判断,然后如果条件为真,那么就可以发出相应的信号,其实很多的自动化的工业过程中软件控制的流程也就是这样,当然,别人可能设计的比较鲁棒,所以这里只能算是一个雏形了。当需要增加的控制信号变得很多的时候,而且这些过程也必然与很多的相似的地方,我们也可以把这样的操作简化为函数化的封装过程,这样就能比较方便的开发了,当然,如果就规范而言,那么JAVA的语言开发中的对象面向的编程的思想完全应该用进去,所以着里面是有很多的可以改进的地方的。

  好了,下面贴出代码吧:

 

  Processing端:

      import processing.serial.*;

 

float lefttop1=60;

float leftbottom1=10;

float length1=30;

float width1=30;

 

float lefttop2=60;

float leftbottom2=70;

float length2=30;

float width2=30;

 

float top3=200;

float bottom3=10;

float length3=30;

float width3=30;

 

float top4=200;

float bottom4=70;

float length4=30;

float width4=30;

 

int LED1flag=0;

 

Serial myPort;

 

void setup()

{

 

  myPort = new Serial(this,"COM3", 9600);

 

  size(400,200);

  fill(75);

  text("LED1 on",lefttop1+49,leftbottom1+20);

  text("LED1 off",lefttop1+49,leftbottom1+80);

  text("LED2 on",top3+49,bottom3+20);

  text("LED2 off",top3+49,bottom3+80);

 

   fill(0,200,129);

   rect(lefttop1,leftbottom1,length1,width1);

   fill(120,29,120);

   rect(lefttop2,leftbottom2,length2,width2);

   fill(136,120,129);

   rect(top3,bottom3,length3,width3);

   fill(10,230,10);

   rect(top4,bottom4,length4,width4);

}

 

void draw()

{

 

   if(LED1flag==1)

    {

    myPort.write(1);

    } 

   if(LED1flag==2)

    {

    myPort.write(2);

    } 

    if(LED1flag==0)

    {

     myPort.write(0);

    }

    if(LED1flag==3)

    {

    myPort.write(3);

    } 

   delay(100);

}

 

void mousePressed()

{

 

 if(mouseX>lefttop1&&mouseX<lefttop1+length1&&mouseY>leftbottom1&&mouseY<leftbottom1+width1)

     {

       if(LED1flag==0)

       LED1flag=1;

       else

       LED1flag=0;

     }

 if(mouseX>lefttop2&&mouseX<lefttop2+length2&&mouseY>leftbottom2&&mouseY<leftbottom2+width2)

    {

       if(LED1flag==3)

       LED1flag=2;

       else

       LED1flag=3;

     }

 

 if(mouseX>top3&&mouseX<top3+length3&&mouseY>bottom3&&mouseY<bottom3+width3)

       LED1flag=2;

  

 if(mouseX>top4&&mouseX<top4+length4&&mouseY>bottom4&&mouseY<bottom4+width4)

       LED1flag=3;

 

 

}

 

 

 

Arduino端:

 

int duchu=0;

void setup() {               

  // initialize the digital pin as an output.

  // Pin 13 has an LED connected on most Arduino boards:

  pinMode(13, OUTPUT);  

  pinMode(12, OUTPUT);  

  Serial.begin(9600);

}

 

void loop() {

  

  duchu=Serial.read();

  if(duchu==1)

    digitalWrite(13,HIGH);

  if(duchu==0)

    digitalWrite(13,LOW);

  if(duchu==2)

    digitalWrite(12,HIGH);

  if(duchu==3)

    digitalWrite(12,LOW);

  

}

  附加一些说明,在这个例子中,我们控制的灯是在12,13号口的,这里可以放上两个LED小灯,而我们就要对这两个灯进行相应的控制,运行processing以后我们可以看到相应的界面上的控制的按钮,也就是LED1 on ,和LED1 off ,还有LED2 on和LED2 off ,好了,这就是完整的构建,当然你可以在这个基础上进行加工和拓展。

  这两个按钮的运行方式有一些方式,其实在代码中你可以看出来,我后来把LED1做了改变,使得原来需要两个按钮来控制LED1的事情变成只用一个按钮就能做到,具体的原理就由你来探究喽!

  好了,至此,我们的processing和Arduino的双向的通信已经完成,下面还能有啥呢?这个得下次在说喽!

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户1636929 2012-10-28 20:38

你好,刚刚去你的空间看了一下,你做的很不错!有空还像向你请教呢,你说的修改串口是啥意思,我没有很明白,串口主要就是processing和Arduino两者相互交换数据的一个窗口,设定一次就可以了,另外你在空间里说的要创建验证程序的平台,我觉得这个想法很好,能否留下邮箱,或是qq?我的qq是:970435817.

用户1393808 2012-10-24 08:43

看来笔者很钟情于Processing和Arduino啊 ^_^ 很想请教一下如何在 Processing中实现人机交互,我也做了一个类似的程序,可每次串口的选择都要靠修改程序实现,很无趣!不知笔者有无好的办法? 链接是我做的 Processing 和Arduino 的应用:http://user.qzone.qq.com/478273778/blog/1330490287
相关推荐阅读
用户1636929 2015-04-10 00:59
小米手环开箱
  如果仅仅从价格上去考量,小米手环无疑是十分适合入手的,从官方的介绍中也可以看到它的很多亮点,无感佩戴,精准传感器,放水防尘。。。。。。那么,下面,就是抛开他诱人的宣传,剥离其惊人的价格,而还原...
用户1636929 2015-03-14 09:36
nokia n1开箱 补图
上一篇只能上传5张图片,精彩未竟,开此片继续。...
用户1636929 2015-03-14 09:34
nokia n1开箱
nokia n1评测   本来打算在年前写完这篇的,没想到再次提笔已经到了2015,过去的一年新鲜多于辛苦,也算是一个不错的开端,废话少说,开箱啦。 作为老牌劲旅的强势回归之作,总结起...
用户1636929 2014-10-23 16:01
Android 4.4源码获取
    总的思路来自于这一片帖子: blog.csdn.net/zeroboundary/article/details/24411767   对于身处在墙里面的程序员们来说,...
用户1636929 2014-03-17 15:37
新年第一篇,关于max6675
  2014年已经来到了3月份,这篇文章算是开年以来的第一篇文章,开始前还是先扯些别的话题吧。 首先是关于马航客机,祝愿他们平安回来,不论生命多么脆弱,为他们祈祷,为他们祝福。 周日的...
用户1636929 2013-11-22 13:53
高交会归来4
详细说说这个显示技术,总的来说,显示技术的趋势就是向着更加清晰,更加立体,更加优雅,更加智能的方向发展,这几点也在高交会的展会现场得到了充分的展示,首先是清晰,康佳的4K电视就是一个代表,现场的效...
我要评论
2
10
关闭 站长推荐上一条 /3 下一条