Arduino作为一款开源的硬件的代表,在使用方面的简单性和编译调试方面的某些优点是十分的明显的,使用Arduino也有很长的一段时间了,所以自然会做一些驱动的程序,当然,对于Arduino来说,有些驱动的完成是比较难的,比如与图像有关的。
而Arduino的优势也是明显的,特别是调试的时候,Arduino自带的串口监视器可以帮很大的忙,如果你学过C语言并且写过一些代码,相比开始的时候肯定是用printf这样的输出函数去调试,上课的时候老师讲的是通过debug的功能去进行设置断点后的调试,然后实际上就我来说,在实际的使用过程中用的最多也是觉得用的最顺手的是用输出函数进行调试,可能这样做是不规范的,也确实是,从这一点就可以看出业余来。
不过在初学的时候,就我来看,这是最最好用的方式,其实主要是看个人的习惯,而在单片机的编程中,在初学的阶段中,这样的输出会让你很明显的看出哪里是错误的。在Arduino中,只需要几句的代码就足够了,首先初始化串口,Serial.begin(9600),9600是一个串口的传送的常数,这个的意义如果不是很清楚的话可以问问百度,然后在Arduino中的loop函数中就可以像c编程中一样就行Serial.println进行输出,在这里面的入口参数可以是你想要的检测的数值。
在这里Arduino用在了驱动摄像头ov7670中,不过这里不是仅仅只用这么一个单片机,实际上用了两个,摄像头的调试是一个很纠结的地方,主要是图像的显示。
在这里Arduino可以是一个很好的帮手,如果你有一个led的显示屏,或是别的可以进行显示的东西(TFT也是可以的,不过这个东西比较的复杂),事情会变的简单很多,但是你还需要特地去熟悉相应的硬件的驱动办法,未免加上了一些复杂度。而Arduino的窗口输出功能和其配置的监视器正好可以派上用场。
接下来就是一些细节的代码书写了,首先你需要有另一个单片机进行协同的工作,那边的单片机负责驱动摄像头并且读出数据,然后这边的Arduino就负责接到数据后显示出来。在普通的低速的场合,就比如这里的摄像头的场合,对于datasheet上的某些要求不必“不折不扣“的去完成,比如要求信号上升沿后的延时,其实这里看来是不需要的,在Arduino中我们进行上升沿检测的模拟,因为之前使用了中断(Ardunio有方便的中断处理函数的直接调用),但是效果并不好,所以在Arduino的loop中直接自己写了一个类似的检测,其实现的效果就是:当另一个单片机读出数据后,首先在相应的8个管脚(这里使用的是并行的数据传输,串行的比较麻烦,在暂时的使用中是不必要的)给出对应的电平,然后给出一个信号,也就是供检测的上升沿,相当于同治Arduino数据已经到了,然后Arduino读出对应的管脚的电平值,发到串口进行显示。
具体的检测上升沿的代码如下:
if(digitalRead(signal)==HIGH&&past==true){
func();
past = false;
}
if(digitalRead(signal)==LOW){
past = true;
}
以上的代码是放在loop中进行运行的,其实这样的实现在普通的单任务的时候比较的好,但是一旦上到几个任务的时候,就比较的难做了,当然,也不是不可以,这里的应用比较的简单,所以可以这样实现。
在这里面past信号在之前进行定义,boolean past = true;
其余的代码就不再贴出,主要是换行打印的一些控制,不过要注意的是,你需要计算或者说是估算向Arduino发出的数据的速率,也就是波特率,如果过大的话,在之前的串口设置中,也就是Serial.begin()中需要设置大一点的数字,一般的应用9600就可以了,虽说是低速,也不能选用最小的嘛。
文章评论(0条评论)
登录后参与讨论