6793浏览
查看: 6793|回复: 20

[教程] 52Pi-骑驴玩儿漂移-树莓派干点儿啥之别吹灯-(*^__^*)

[复制链接]
本帖最后由 yoyojacky 于 2016-5-24 18:53 编辑

     一直被果汁啊,lee啊,追着要树莓派的入门教程,最近正好在修炼电子内功,从一灯大师开始练起,一个灯,两个灯,然后吐了。。
我实在是不想点灯了。因为点了太多灯,有点儿疲劳了,今天来点个数码管,有人吐槽:这还是灯啊!。。。我只好说,好吧,别吹灯,灯是点不完的,你看看少林寺的那些扫地僧,扫地扫出真功夫,现在想入门电子这个大坑,继续点灯,点出道德与情操的时候,就可以顺利搞定大部分传感器啦!
    好吧,我可不学lee大大的吹水帖,我这可是实实在在的干货哦!
首先,我们介绍一下我这次点灯的元器件,这样说是不是很有点儿一本正经授课的意思?其实我今天突然出来点灯是有个缘由的,大家认识我的人呢都知道我大学的专业是动物科学啦,而且是微生物专业的,什么酸马奶的乳酸菌分离提纯啥的,都是日常,大学同学听说我在上海从事计算机和电子相关的工作,看到我微信圈里面各种树莓派乱入,他们觉得我应该能帮他们解决一个小小的问题,就是在用显微镜观察菌群的时候,需要计数的时候就很纠结,老的计数器是机械结构,虽然小巧,但是感觉很low,请原谅他们想要高大上的心情,他们提出,能否用电脑显示计数的过程,可以投影在大屏幕上?同时还能够有个直观的计数器帮助记录计数的总数? 我脑海里就突然有个想法,显示用数码管,最近树莓派很火,就用数码管+树莓派不就ok了?再加上轻触按键,妥妥的。于是在家整理了一下思路,并翻箱倒柜找了找数码管,你问我什么是数码管??
喏,就是这个咯!
0189576A-A480-4428-B37C-B8754ECEAB4F.png
哎呀,不是这个,这是是1 digit 的数码管,我用的是这种:
C43425E7-23E2-4D39-B995-4C68C484F848.png
突然觉得绿色好low的感觉。。。
你可以用这个。。。
QQ20160524-0.png

是不是瞬间回到了灌篮高手的球场???
哈哈
这个是其中显示的元器件,还需要以下的设备:
1. Raspberry Pi  任何系列的开发板一套,注意这里是一套哦,就是你如果用树莓派B型,那就至少要一张SD卡,如果是树莓派B+,那你需要一张TF卡,如果你是用树莓派2,model B,那么也需要TF卡,这几个都需要无线网卡或者网线支持哦,如果是用树莓派3,model B,那么恭喜你,你可以不用买网卡和蓝牙啦!我这里用的就是树莓派3
2. 数码管 x1 : 由于菌群数量很多,所以1位数码管不够,2位不high,3位没见过,4位比较好(实际上我只有一个废弃的4位7段显示的数码管)
3. Easy Multiplexing Board x1,就是传说中的1扩3扩展板,很屌的样子,关键是I/O扩展出来太方便使用了。
4. RTC for Pi x1,就是个RTC时钟模块,主要是我插插拔拔经常断线,而且没有时钟觉得时间不准对文件系统是个很大的坑,时间久了容易破坏系统,比较烦。
5. 杜邦线若干,最好是有双公头,双母头,公母混合头的线。。。多备点儿,不差钱。
6. 按键x2 : 我实在找不到更多了,因为很少玩儿按键。。哈哈
7. 面包板 x1 : 最好用大的面包板,不然你知道的,一旦线多了你就有一种盘丝洞的感觉。。。
以上产品,大家可以某宝搜,或者联系我代购(别找我,价格很贵哦)
好了,到这里分割一下。。。
+++++++++++++++++++++++++++++++++++Hualilidefengexian++++++++++++++++++++++++++++++++++
操作步骤:
1. 下载并烧录最新镜像:
  下载地址:  www.raspberrypi.org/download
2. 烧录镜像:
    我使用的是Mac Pro,所以烧录异常简单,将TF卡插入SD卡套,然后插入电脑,打开一个iterm,然后输入:
  
  1. sudo  diskutils  unmountDisk  /dev/disk2                  #由于在我计算机上识别的SD卡设备文件名就是 /dev/disk2 ,你们的自己用df -h 看看,误操作导致的一切跟我无关哦。
复制代码
  1.   sudo  dd=2016-03-18-raspbian-jessie.img of=/dev/disk2
复制代码

QQ20160524-0@2x.png
敲回车后,就可以去泡杯咖啡,休息一下下。或者拿起你的万用表,测量一下你的数码管管脚啦。
我这里省略了测量管脚的步骤哈,不会用的百度一下,哦,不,去google一下吧。
3. 接线:
这个步骤是最考验耐心的,需要仔细接驳线缆并且确认接入正确,否则,再整理一遍的话,你会失去信心的,请原谅我线序的混乱。。。
接线如下图所示:
QQ20160524-1@2x.png
实际上,接线可以参考我这个图表:
先上个数码管原理图:
QQ20160524-3@2x.png

然后我接线的时候整理了一下:
QQ20160524-2@2x.png

其中物理接口是树莓派的GPIO接口的物理排序,再给你们一个wiringPi的图,对应一下哈
QQ20160524-4@2x.png

3. 启动系统并登陆下载wiringPi并编译:
  1. git clone  git://git.drogon.net/wiringPi
复制代码
4. 然后再下载我的写好的代码:

  1. <div>git clone https://github.com/yoyojacky/RPi-C-CODE.git</div><div>cd  RPi-C-CODE/</div><div>gcc -o digitled   4segment-digitalLED-with-button-controling.c  -lwiringPi</div><div>sudo ./digitled</div>
复制代码
接着就可以去按键刷数码管了屏幕上显示数码管状态,累计计数。
QQ20160524-6@2x.png
然后数码管状态还是用视频来解释吧。。


哈哈,非常简单入门的一个教程,希望大家喜欢。
我是骑驴玩儿漂移,一个集爱玩儿和爱折腾于一身的男子。。。






————————————————————————————————————————————————————————————————
你们一定以为就这么完成了吧?
下面是一些额外的介绍
目录中包含这些文件:
QQ20160524-5@2x.png

源码内容:
  1. #include <wiringPi.h>
  2. #include <stdio.h>
  3. /* Define some parameters for GPIO pins */
  4. #define DIGITAL_A 0
  5. #define DIGITAL_B 1
  6. #define DIGITAL_C 2
  7. #define DIGITAL_D 3
  8. #define DIGITAL_E 4
  9. #define DIGITAL_F 5
  10. #define DIGITAL_G 6
  11. #define DIGITAL_DP 21
  12. #define DIGITAL_SEG1 22
  13. #define DIGITAL_SEG2 23
  14. #define DIGITAL_SEG3 24
  15. #define DIGITAL_SEG4 25
  16. #define BUTTONA 27
  17. #define BUTTONB 26
  18. int x;
  19. int i;
  20. const char lednumber[10]=
  21. {
  22.         0xfc, //0
  23.         0x60, //1
  24.         0xda, //2
  25.         0xf2, //3
  26.         0x66, //4
  27.         0xb6, //5
  28.         0xbe, //6
  29.         0xe0, //7
  30.         0xfe, //8
  31.         0xf6  //9
  32. };
  33. void init_digitalled(void)
  34. {
  35.   digitalWrite(DIGITAL_A,LOW);
  36.   digitalWrite(DIGITAL_B,LOW);
  37.   digitalWrite(DIGITAL_C,LOW);
  38.   digitalWrite(DIGITAL_D,LOW);
  39.   digitalWrite(DIGITAL_E,LOW);
  40.   digitalWrite(DIGITAL_F,LOW);
  41.   digitalWrite(DIGITAL_G,LOW);
  42.   digitalWrite(DIGITAL_DP,LOW);
  43.   digitalWrite(DIGITAL_SEG1,HIGH);
  44.   digitalWrite(DIGITAL_SEG2,HIGH);
  45.   digitalWrite(DIGITAL_SEG3,HIGH);
  46.   digitalWrite(DIGITAL_SEG4,HIGH);
  47. }
  48. void light_led(int x)
  49. {
  50.   digitalWrite(DIGITAL_A, (lednumber[x] & 0x80));
  51.   digitalWrite(DIGITAL_B, (lednumber[x] & 0x40));
  52.   digitalWrite(DIGITAL_C, (lednumber[x] & 0x20));
  53.   digitalWrite(DIGITAL_D, (lednumber[x] & 0x10));
  54.   digitalWrite(DIGITAL_E, (lednumber[x] & 0x08));
  55.   digitalWrite(DIGITAL_F, (lednumber[x] & 0x04));
  56.   digitalWrite(DIGITAL_G, (lednumber[x] & 0x02));
  57.   digitalWrite(DIGITAL_DP, (lednumber[x] & 0x01));
  58. }
  59. void display_led(int num)
  60. {
  61.   int number = num;
  62.   int led1 = 0;
  63.   int led2 = 0;
  64.   int led3 = 0;
  65.   int led4 = 0;
  66.   led4 = number%10;
  67.   led3 = number/10%10;
  68.   led2 = number/100%10;
  69.   led1 = number/1000%10;
  70.   light_led(led1);
  71.   digitalWrite(DIGITAL_SEG1,LOW);
  72.   delay(1);
  73.   digitalWrite(DIGITAL_SEG1,HIGH);
  74.   light_led(led2);
  75.   digitalWrite(DIGITAL_SEG2,LOW);
  76.   delay(1);
  77.   digitalWrite(DIGITAL_SEG2,HIGH);
  78.   light_led(led3);
  79.   digitalWrite(DIGITAL_SEG3,LOW);
  80.   delay(1);
  81.   digitalWrite(DIGITAL_SEG3,HIGH);
  82.   light_led(led4);
  83.   digitalWrite(DIGITAL_SEG4,LOW);
  84.   delay(1);
  85.   digitalWrite(DIGITAL_SEG4,HIGH);
  86. }
  87. void init_all(void)
  88. {
  89.   wiringPiSetup();
  90.   pinMode(DIGITAL_A,OUTPUT);
  91.   pinMode(DIGITAL_B,OUTPUT);
  92.   pinMode(DIGITAL_C,OUTPUT);
  93.   pinMode(DIGITAL_D,OUTPUT);
  94.   pinMode(DIGITAL_E,OUTPUT);
  95.   pinMode(DIGITAL_F,OUTPUT);
  96.   pinMode(DIGITAL_G,OUTPUT);
  97.   pinMode(DIGITAL_DP,OUTPUT);
  98.   pinMode(DIGITAL_SEG1,OUTPUT);
  99.   pinMode(DIGITAL_SEG2,OUTPUT);
  100.   pinMode(DIGITAL_SEG3,OUTPUT);
  101.   pinMode(DIGITAL_SEG4,OUTPUT);
  102.   pinMode(BUTTONA,INPUT);
  103.   pinMode(BUTTONB,INPUT);
  104. }
  105. int main()
  106. {
  107.   init_all();
  108.   init_digitalled();
  109.   for(;;)
  110.   {
  111.        display_led(i);
  112.     if(digitalRead(BUTTONA) == 0 || digitalRead(BUTTONB) == 0)
  113.     {
  114.        for(x=0;x<=20;x++)
  115.        {
  116.        display_led(i);
  117.        };
  118.        if(digitalRead(BUTTONA) == 0)
  119.        {
  120.           printf("BottonA is pressed! and you press %d times\n", i++);
  121.        };
  122.        if(digitalRead(BUTTONB) == 0)
  123.        {
  124.          if (i>0)
  125.           {
  126.              printf("ButtonB was pressed, and you have been pressed %d times\n", i--);
  127.           };
  128.        };
  129.     };
  130.   };
  131. }
复制代码

元器件全部来自:老邓的52Pi.taobao.com哦,别说我打广告哈!



yoyojacky  初级技匠
 楼主|

发表于 2016-5-24 18:55:38

我先占个位置。
回复

使用道具 举报

苦海  初级技匠

发表于 2016-5-24 18:58:06

我没追你要树莓教程 ,我只是要你来上课:lol
回复

使用道具 举报

苦海  初级技匠

发表于 2016-5-24 19:12:52

我那是被孙老师逼着吹水的。。。。
回复

使用道具 举报

凌风清羽  中级技匠

发表于 2016-5-24 20:41:38

好长的教程,感觉要读好几天,哈哈~~~
回复

使用道具 举报

吹口琴的钢铁侠  初级技匠

发表于 2016-5-24 21:10:26

wiring pi只有C++吗?
回复

使用道具 举报

hnyzcj  版主

发表于 2016-5-24 23:07:09

顶一个先
回复

使用道具 举报

hnyzcj  版主

发表于 2016-5-25 05:49:33

改成鬼吹灯
回复

使用道具 举报

luna  初级技神

发表于 2016-5-25 11:34:34

想入门就要学会点灯~~
回复

使用道具 举报

virtualwiz  中级技匠

发表于 2016-5-25 19:26:33

luna 发表于 2016-5-25 11:34
想入门就要学会点灯~~

接在Vcc Gnd之间:lol
回复

使用道具 举报

iooops  中级技匠

发表于 2016-5-25 23:59:42


Wiring Pi不是C吗……
回复

使用道具 举报

吹口琴的钢铁侠  初级技匠

发表于 2016-5-26 23:41:21

iooops 发表于 2016-5-25 23:59
Wiring Pi不是C吗……

不好意思。。这学期C++学多了[捂脸]
回复

使用道具 举报

凌风清羽  中级技匠

发表于 2016-5-27 16:05:33

大神出马,一个顶俩
回复

使用道具 举报

dsweiliang  初级技神

发表于 2016-6-3 09:37:27

学习学习
回复

使用道具 举报

yoyojacky  初级技匠
 楼主|

发表于 2016-7-1 17:59:15

苦海 发表于 2016-5-24 18:58
我没追你要树莓教程 ,我只是要你来上课

恩,很快就回来的。我现在在修炼内功。等着我出山吧。哈哈
回复

使用道具 举报

yoyojacky  初级技匠
 楼主|

发表于 2016-7-1 17:59:38

苦海 发表于 2016-5-24 19:12
我那是被孙老师逼着吹水的。。。。

来来来,随便吹啊
回复

使用道具 举报

yoyojacky  初级技匠
 楼主|

发表于 2016-7-1 18:00:01

凌风清羽 发表于 2016-5-24 20:41
好长的教程,感觉要读好几天,哈哈~~~

没事儿,慢慢看。
回复

使用道具 举报

yoyojacky  初级技匠
 楼主|

发表于 2016-7-1 18:00:26


似乎好像是,怎么?你要用python的?有空我写个吧,目前没有时间哦。
回复

使用道具 举报

yoyojacky  初级技匠
 楼主|

发表于 2016-7-1 18:00:49


怎么改?
回复

使用道具 举报

yoyojacky  初级技匠
 楼主|

发表于 2016-7-1 18:01:31

luna 发表于 2016-5-25 11:34
想入门就要学会点灯~~

对,一灯大师完成后,再交通灯,点阵,屏幕,最后玩儿到极致就开始玩儿超大光立方了。
回复

使用道具 举报

yoyojacky  初级技匠
 楼主|

发表于 2016-7-1 18:01:59


错,要接在GPIO和GND之间。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail