Arduino编程快速入门
pcDuino8 Uno带有兼容Arduino Uno板的I/O接口,所以很多兼容Arduino的扩展板也可以在pcDuino8 Uno上使用。但注意,pcDuino8 Uno只是部分实现的I/O口的功能,比如接口的ADC功能需要通过外接ADC芯片才能够真正实现。
接下来快速介绍一下在pcDuino8 Uno上如何进行Arduino编程,分别采用两种编程模式!
开源硬件开发中的“点灯“,就跟软件编程中的“Hello World!”程序一样,是每个程序员必经之路,话不多说,直接上步骤。为了简单起见,示例仅演示如何控制GPIO口来控制板上的LED等。
Arduino IDE模式
1. 打开Arduino IDE
点击开始菜单,选择 Programming --> Arduino IDE。
2. 编译运行示例代码
当你打开Arduino IDE后,在board找到一种新的类型:pcDuino。
打开一个现有的示例,菜单栏 File --> Examples --> 01.Basics --> Blink。
点击按钮编译并执行代码。注意查看LED1是否出现闪烁。
注意:编译生成的二进制可执行文件保存在了/home/linaro/Arduino目录下面。可以在命令终端手动执行该可执行文件。
3. 查看源码
经过很多层的封装,我们看到的编程接口已经很简单了。
/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
This example code is in the public domain.
*/
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
采用命令行模式
除了采用图像编程工具,我们还可以在命令行下进行Arduino的编程。
1. 下载命令行下的Arduino开发环境——c_environment
打开命令行终端,运行如下命令:
$ git clone https://github.com/pcduino/c_environment
2. 编译
$ cd c_environment #进入开发环境
$ vim sample/linker_led_test.c #查看源代码
$ make #编译所有示例代码
3. 运行
所有编译好程序会放在output/test目录下。我们直接适用liner_led_test示例程序控制LED的闪烁。
$ output/test/linker_led_test 13 #让数字I/O引脚13,每隔1s,交替输出高低电平。
用户可以看到在板上LED出现闪烁。使用者还可以参考sample目录下的各种示例,但注意,不是所有的示例都能够在pcDuino8 Uno上运行。
Arduino程序清单:
/*
* LED test program
*/
#include <core.h>
int led_pin = 1;
void setup()
{
#ifndef PCDUINO_IDE
if(argc != 2){
goto _help;
}
led_pin = atoi(argv[1]);
#endif
if((led_pin < 0) || (led_pin > 13)){
goto _help;
}
pinMode(led_pin, OUTPUT);
return;
_help:
printf("Usage %s LED_PIN_NUM(0-13)\n", argv[0]);
exit(-1);
}
void loop()
{
digitalWrite(led_pin, HIGH); // 开启LED
delay(1000); // 等待1s
digitalWrite(led_pin, LOW); // 关闭LED
delay(1000); // 等待1s
}