恩,接上次的话茬,至于电脑系统崩溃的具体,我就不说了,要是说的话恐怕这一次又没法说到正题上了。
所以说正题,上次说到系统崩溃,既然崩溃了,那么现在用啥来控制呢?恩,这个问题问得好,而且我已经把ubuntu卸载干净了,win7又是简化的,那么用啥呢?别担心,这恶搞问题早在系统崩溃之前我就成功的实现了,所以到了重装系统之后,这恶搞问题解决的干净利落,那就是,虚拟机!
虚拟机,这是个啥东西,如果你还没听说过,请自己去百度一下吧!说白了,就是你可以自己在自己的电脑上创建一台电脑,然后这样的一台电脑上可以虚拟化的运行几乎所有的软件,也就是说,你可以装上任何的可以安装的系统,然后做着你想要在相应系统中做的事情。
在我的电脑上,我安装的虚拟机软件爱你是Vmware,这个是普遍被使用的,当然,你如果要使用VirtualBox也可以,反正操作是基本上相通的。
安装完虚拟机后,首先你就要下载一个镜像了,由于之前我的win7是简化的版本,所以有一些功能没法很好的完成,所以现在我可以下载一个win7的镜像,当然,在这里我下载的是Xp的镜像,对于XP我还是比较熟悉的,对于相应的系统中对于Arduino的操作在Arduino的入门的书籍中的开头都有详细的涉及,这一点在我之前的文章中提到过,咋网上也不难找到,当你安装完虚拟机后不能关切成功的运行起虚拟机以后,其他的操作就和在真实的操作系统中一样了,所以说,老外的虚拟化技术确实有很多值得赞赏的地方,首先,他们敢于去想,然后还能够真的把这样的设想变为现实,也真心希望中国在这一方面会有一些成就。
好了,至于虚拟机的具体的安装和操作,在这里也不再去详细的讲解,因为这个确实也要费一番功夫的,对于初学者来说,在网上搜索一番,基本上一天就可以十分的熟悉了。但是要讲一讲XP中的Arduino的安装和processing的安装的一些事情,首先,他们需要JAVA的虚拟运行环境,所以你要首先安装上JAVAJDK,也就是一个集成的环境,主要是要配置一些环境变量,这个你可以在网上找到,会不会觉得很麻烦?其实更多的哦麻烦事情都已经被开发者封装了,所以说,虽然说在这里的步骤比较麻烦,但是一旦环境构建好,其他的事情就只剩下编程了,所以这点麻烦其实是不算麻烦的。
好了,继续,我现在假设你已经安装完毕了jdk了,现在安装processing,其实processing已经不用安装了,所以你只需要直接打开你所下载的官方网站上的文件中的可执行程序就可以了,然后安装Arduino。这个过程在入门的书籍中有很详细的涉及,其实原来我是想这样在windows的系统中安装的,但是由于系统的不完全的原因,所以一直没有成功,钥匙早点知道这个虚拟化的办法,那就不用再从ubuntu绕一圈再回来了,这是后话。
其实最主要的就是给我们的ArduinoUNO板子安装一个对应的驱动,这就完成了,做好相关的设置,现在如果没有问题的话,那么你已经可以通过现在你构造的这台XP来控制Arduino的板子了!
好了,在这里得说一点感想,不是重装系统的感想,而是对于Arduino的感想,Arduino并不难构建,从他的起源来说,就是为了做实验方便而把单片机做了一定的集成,对于电子的学生来说,这一点其实很熟悉,就是构建好一个单片机的最小系统,其实也就是添加上几个原件,构成好了震荡电路,构建好了电源,然后剩下的都是一些软件上的编写的事情,这个也不是很难,关键是,人家能够把这一切做的很好,很小巧,方便使用,能够让我们能够直接从USB接口中把包含我们的思想的程序进行烧录,这就是一种不错的创意,我们也学会了构建一个单片机的最小的系统,但是为啥我们没有想到去做一块简便易用的板子?为啥我们不去学习一下相关的驱动的编写知识,然后自己做出一个统一的易于使用的编程环境来呢?这就是创新,而且意大利人(起源是在意大利)能够给他起上一个好听的名字,把所有的硬件的电路图和软件的源代码和设计的思想放到公共的地方,让所有的人都能够去使用和共享,并且做到不断的改进以使它更为完美,就像我哦们之前听说的Linux一样,其实这件事情我们也可以去做,那么为啥我们没有做出来?这就是值得我哦们所有的人去思考的问题。
好了,闲话说了好多,现在入正题,现在我可以编写串口上程序交互的程序了,这一点马上就可以实现,可以在网上看到很多这个方面的工作,有一个比较的吸引人,就是之前也提到过的用processing播放你的电脑中的某一个歌曲,然后让你的Arduino的板子上的LED根据你的歌曲的频率的变化来进行闪烁的变化,当然这个我还没有实现,这个并不是很难,如果有兴趣你可以去读一下相关的代码,在这里首先我们做成一个通讯的的程序,我依次向串口发送1,2,3这三个数字,如此循环,然后用processing从串口接收数据,这样我就可以实现控制和程序(或者说电脑和Arduino)直接的相互的通信了。
好了,代码部分:
主要是参照网上的一段代码,做了修改
arduino程序:
int rec=3;
void setup()
{
Serial.begin(9600);//定义数据传输率为9600比特
}
void loop()
{
rec=digitalRead(3);//读取3口的状态
if(rec==HIGH)
{Serial.print("1"); }//通过串行端口发送rec的的值
else{ Serial.print("0");}
delay(1000);
}
processing程序:
import processing.serial.*;//引入serial库
int p_data;//创建变量用于储存接收到的数据
Serial myPort;//创建一个名为“myPort”的Serial对象
int i;
void setup()
{myPort = new Serial(this,"COM3", 9600);
//定义myPort的端口和数据传输率
//应和Arduino保持一致
size(200,200);
background(0);
PFont font;
font = loadFont("Arial-Black-48.vlw");
textFont(font,36);
fill(255);
smooth();
}
void draw()
{
background(0,0);
if (myPort.available() > 0)
{p_data = myPort.read();//读取从串行端口获得的值,并储存在变量p_data中
}
text(P_data,40,100);
}
Arduino部分的程序做一点改动:
arduino程序:
void setup()
{
Serial.begin(9600);//定义数据传输率为9600比特
}
void loop()
{
Serial.print(1); //通过串行端口发送rec的的值
delay(1000);
Serial.print(2); //通过串行端口发送rec的的值
delay(1000);
Serial.print(3); //通过串行端口发送rec的的值
delay(1000);
}
Processing中的改动已经做了,所以就是上面的,注意字体那句,font = loadFont("Arial-Black-48.vlw");
如果没有这个字体(在tools中的create font标签中可以看到),你可以选一个,然后在代码中改一下,然后create font就好了。具体的代码解释就不多讲了,这个也不难,主要是几个端口的运行的函数,首先在Arduino中其实还是和往常一样,写入数字,然后在processing首先按包含serial的库(这里有我们需要的函数的实现),然后myPort = new Serial(this,"COM3", 9600);就是创建一个新的端口,COM3是可以在电脑中的设备管理器中看到的,安装完Arduino的驱动以后,你可以看到,在Arduino的集成环境中做好板子型号和端口的设定(这个自己去看吧),现在你的程序可以运行了,首先烧录Arduino板子,然后运行processing(下面如果有mismatch没有关系,也能成功的运行,如果你要修复,在网上也有相关的解决方案),关于运行的效果,你可以看到在processing创建的窗口中有48,49,50的循环的显示,为啥是48呢?因为在ASCII字符中,1对应的就是48,那么在这之前是啥呢?是一些对符号的数字的对应上的规定,好了,就说到这儿,我们现在可以成功的串口通信了,小激动啊!
接下来我们的面前是一大片的可能,你可以用Arduino和电脑通信,做出很炫的东西来!
用户1012893 2012-3-6 17:32