Raspberry Pi Blink--NO delay(WiringPi)

Wiring Pi下载与安装

树莓派使用C语言编程操纵GPIO时, 主要有 BCM2835 C Library和Wiring Pi两种, 其中, Wiring Pi 的API函数封装基本与Arduino的相同, 使用更广泛, 也更容易上手.
参考 Wiring Pi官网Download and Install
①安装GIT

sudo apt-get install git-core

如果出现错误, 可以先升级下Raspbian

sudo apt-get update
sudo apt-get upgrade

②使用GIT安装WiringPi

git clone git://git.drogon.net/wiringPi

然后编译安装

cd wiringPi
./build

但是我的git那里出错了:

Cloning into ‘wiringPi’…
fatal: unable to connect to git.drogon.net:
git.drogon.net: Name or service not known

作者给出的解释是

the most likely cause is that your work/school/college/university/palace firewall is blocking GIT. A lot do for some reason.

大概是GIT被防火墙屏蔽了, 然后作者建议使用Plan B:
https://git.drogon.net/?p=wiringPi;a=summary 下载最新版, 然后

tar xfz wiringPi-98bcb20.tar.gz
cd wiringPi-98bcb20
./build

有些麻烦, 没用它, 在stackoverflow上发现用 https:// 代替 git:// 效果不错, 于是在GitHub上找到WiringPi的地址: https://github.com/WiringPi/WiringPi
然后使用以下命令下载到当前目录(/home/pi):

git clone https://github.com/WiringPi/WiringPi

下载完后, 切换到WiringPi文件夹:

cd WiringPi

运行build脚本自动编译安装:

./build

完成后会给出提示:

NOTE: To compile programs with wiringPi, you need to add:
-lwiringPi
to your compile line(s) To use the Gertboard, MaxDetect, etc.
code (the devLib), you need to also add:
-lwiringPiDev
to your compile line(s).

③测试WiringPi的安装
输入命令 gpio -v 查看版本信息:
40

输入命令 gpio readall 读取所有的GPIO的状态:
41

这个图很有用, 当我们对GPIO编程时, 可以查看对应的引脚编号.


Blink is the “Hello World” of the microcontroller world.
①接线
参考上面使用 gpio readall 命令读出的引脚图wPi一栏, 我们接树莓派wPi编号的0到LED的正极, LED的负极通过一个1kΩ的电阻连接到GND:
43

②编写程序
我们把路径切换到桌面, 新建一个Blink的文件夹, 然后切换到Blink文件夹新建一个blink.c的文件:

cd /home/pi/Desktop
mkdir Blink
cd Blink
sudo nano blink.c

写入以下代码:

#include <stdio.h>
#include <wiringPi.h>    //使用wringPi的库

// LED Pin - wiringPi pin 0 is BCM_GPIO 17.

#define LED     0

int main (void)
{
  printf ("Raspberry Pi - Gertboard Blink\n") ;

  wiringPiSetup () ;    //必须包含, 用来打开GPIO使得程序可以使用

  pinMode (LED, OUTPUT) ;    //设置LED(0)引脚为输出

  for (;;)
  {
    digitalWrite (LED, 1) ;     // On   LED引脚输出高电平
    delay (500) ;               // mS   延时500ms
    digitalWrite (LED, 0) ;     // Off  LED引脚输出低电平
    delay (500) ;
  }
  return 0 ;
}

按下Ctrl + X 离开, 按下Y写入, 回车, 然后输入命令编译:

gcc blink.c -o myBlink -lwiringPi

表示gcc使用wiringPi编译源文件blink.c, 输出到文件myBlink.
输入命令:

sudo ./myBlink

运行当前路径下的myBlink文件. 这时, 可以看到终端打印出 Raspberry Pi - Gertboard Blink 并且LED闪烁.
如果想结束程序运行, 按下Ctrl+C即可, 不过注意树莓派的引脚电平保持在我们离开的那一刻而不是恢复默认, 这是上面的一个程序中不尽如人意的地方. 使用C时不太清楚, 使用Python编程时, 可以很方便的捕获键盘异常, 然后退出时清除所有的GPIO配置.


消除delay

20160327更新
上面的程序中使用了delay(500)来延时, 但如果我们想在for( ; ; )死循环中写其他程序, 又不想等这500ms, 同时还要保证每隔500ms LED变换一下状态, 可以使用WiringPi提供的函数:

unsigned int millis (void)
This returns a number representing the number of milliseconds since your program called one of the wiringPiSetup functions. It returns an unsigned 32-bit number which wraps after 49 days.

这个函数返回程序运行wiringPiSetup()函数开始后程序的运行时间. 我们再创建一个blink_plus.c的文件如下:

cd /home/pi/Desktop/Blink
sudo nano blink_plus.c

写入以下代码

#include <stdio.h>
#include <wiringPi.h> 

//LED Pin - wiringPi pin 0 is BCM_GPIO 17.
#define LED 0

int main (void)
{
  int tempTime = 0;
  int passedTime = 0;
  int totalTime = 100;    //100ms
  int count = -1;

  printf ("Raspberry Pi - Gertboard Blink\n") ;
  wiringPiSetup () ;    //必须包含, 用来打开GPIO使得程序可以使用
  pinMode (LED, OUTPUT) ;    //设置LED(0)引脚为输出

  tempTime = millis();

  for (;;)
  {
    passedTime = millis() - tempTime;
    if (passedTime > totalTime) {
      tempTime = millis();
      //totalTime = 100;    //可以改变周期
      ++count;
      if (count%10 == 0) {
        digitalWrite (LED, 1) ;
      } else if (count%10 == 5) {
        digitalWrite (LED, 0) ;
      } else {
        ;
      }
    }

    //add your other codes;
  }
  return 0 ;
}

按下Ctrl+X, 然后Y, 然后回车, 编译运行:

gcc blink_plus.c -o myBlinkPlus -lwiringPi
sudo ./myBlinkPlus

可以看到LED不断的闪烁. 按下Ctrl+C停止程序的运行. 关于软件定时器的封装, 我后面会单独开一篇来讲.


参考:
http://wiringpi.com/examples/gertboard-and-wiringpi/blink/
How to Write and Run a C Program on the Raspberry Pi
http://wiki.jikexueyuan.com/project/raspberry-pi/gpio.html
http://blog.csdn.net/weifengdq/article/details/50598490

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值