ruby arduino hacking - 入门篇_Ruby_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > Ruby > ruby arduino hacking - 入门篇

ruby arduino hacking - 入门篇

 2012/10/15 10:38:48  QuakeWang  程序员俱乐部  我要评论(0)
  • 摘要:我对Arduino一直很有兴趣,它简单容易上手,不折腾实在对不起我大学的电子工程专业(虽然专业课程都60分,补考什么的...),最近终于有空可以开始写系列博客,记录我的折腾之路。什么是arduino,已经有很多文章了:arduino.cc写道Arduino是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(arduino的各种电路板)和软件(arduinoIDE)。它能够和环境以及各种硬件进行互动。如何安装驱动,如何写第一个程序,网络上也有很多文章了
  • 标签:Ruby
我对Arduino一直很有兴趣,它简单容易上手,不折腾实在对不起我大学的电子工程专业(虽然专业课程都60分,补考什么的...),最近终于有空可以开始写系列博客,记录我的折腾之路。

什么是arduino,已经有很多文章了:
arduino.cc 写道
Arduino是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(arduino的各种电路板)和软件(arduino IDE)。它能够和环境以及各种硬件进行互动。

如何安装驱动,如何写第一个程序,网络上也有很多文章了,不过大部分中文资料都是基于windows的,其实在Linux下安装更加简单,各个发行版的包管理都有带,以Ubuntu 12.04为例子,只要运行:
apt-get install arduino

会将各种依赖和驱动安装好,然后运行arduino命令就能够打开IDE。

arduino板和电脑之间用的是串口通讯,但是现在电脑几乎都没有串口了,通常都是用USB转串口。在Linux下安装好驱动,接上arduino板以后,对应的tty设备就是/dev/ttyUSB0(如果有多个的话,就是1..N)。

arduino的基础指令很少,控制结构和其他语言类似,所以非常容易上手,以最常见的闪烁一个LED灯为例子,将一个LED灯和一个220欧姆电阻(防止LED过载烧掉,1个LED几分钱,烧掉一个很心痛的 )接到编号为13的口和地口上:



然后在IDE里面输入如下的代码,通过IDE的upload指令,将代码烧入板子:
void setup() {                
  pinMode(13, OUTPUT);     
}

void loop() {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
}


所有在板子上运行的代码无论简单还是复杂,都是由2个函数setup和loop构成。顾名思义setup只在启动时运行一次,在上面的代码我们设置了13口为输出。而loop会不停地循环执行,在上面的代码里面是往13口输出一个高电平信号,然后延迟1秒,再输出一个低电平信号,再延迟1秒,这样就实现了LED灯亮1秒,暗一秒的闪烁效果。

其实arduino本身的代码简单易学,连我刚上小学的儿子也能读懂。要做一个好的arduino作品,更多的时候靠的是创意而不是编程和电路(人工智能啥的除外 。。。)但是作为不折腾不舒服司机和ruby控的我,更希望能够用ruby来写。

RAD是我找到的第一个开源的ruby控制arduino方案,它定义了一系列的dsl,然后通过ruby2c,将代码转换上传到板子,我们来看一下对应上面的闪烁代码:
class MySketch < ArduinoSketch
  output_pin 13, :as => :led
  def loop
    blink led, 1000
  end
end

这个代码比之前更加容易懂,而且还添加了blink这样的dsl,看起来很美,但是实际使用下来问题很多。
首先它只支持ruby 1.8,然后开发已经停滞,它的原理又是通过代码转换来实现的,每次调试代码必须通过编译上传来进行,arduino如果升级或者有新的函数(比如第3方库),它也不支持。

现在比较常见的方法是,将代码放在PC端运行,通过串口通讯写入和读取arduino上的各种输入输出口,这样的好处有2个:1复杂的控制代码(比如互联网,计算,数据库)可以不受限于arduino语言。 2方便快速调试,不需要编写,上传,烧入这样麻烦。

ruby和串口通讯有serialport这个gem,具体如何使用,请等待下篇...

发表评论
用户名: 匿名