yoyojacky 发表于 2016-5-24 18:42:03

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

本帖最后由 yoyojacky 于 2016-5-24 18:53 编辑

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

哎呀,不是这个,这是是1 digit 的数码管,我用的是这种:

突然觉得绿色好low的感觉。。。
你可以用这个。。。


是不是瞬间回到了灌篮高手的球场???
哈哈
这个是其中显示的元器件,还需要以下的设备:
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,然后输入:
   sudodiskutilsunmountDisk/dev/disk2                  #由于在我计算机上识别的SD卡设备文件名就是 /dev/disk2 ,你们的自己用df -h 看看,误操作导致的一切跟我无关哦。
sudodd=2016-03-18-raspbian-jessie.img of=/dev/disk2

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

实际上,接线可以参考我这个图表:
先上个数码管原理图:


然后我接线的时候整理了一下:


其中物理接口是树莓派的GPIO接口的物理排序,再给你们一个wiringPi的图,对应一下哈


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

<div>git clone https://github.com/yoyojacky/RPi-C-CODE.git</div><div>cdRPi-C-CODE/</div><div>gcc -o digitled   4segment-digitalLED-with-button-controling.c-lwiringPi</div><div>sudo ./digitled</div>接着就可以去按键刷数码管了屏幕上显示数码管状态,累计计数。

然后数码管状态还是用视频来解释吧。。
http://www.meipai.com/media/523282241?from=timeline&isappinstalled=1

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






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


源码内容:
#include <wiringPi.h>
#include <stdio.h>

/* Define some parameters for GPIO pins */
#define DIGITAL_A 0
#define DIGITAL_B 1
#define DIGITAL_C 2
#define DIGITAL_D 3
#define DIGITAL_E 4
#define DIGITAL_F 5
#define DIGITAL_G 6
#define DIGITAL_DP 21
#define DIGITAL_SEG1 22
#define DIGITAL_SEG2 23
#define DIGITAL_SEG3 24
#define DIGITAL_SEG4 25
#define BUTTONA 27
#define BUTTONB 26

int x;
int i;

const char lednumber=
{
      0xfc, //0
      0x60, //1
      0xda, //2
      0xf2, //3
      0x66, //4
      0xb6, //5
      0xbe, //6
      0xe0, //7
      0xfe, //8
      0xf6//9
};

void init_digitalled(void)
{
digitalWrite(DIGITAL_A,LOW);
digitalWrite(DIGITAL_B,LOW);
digitalWrite(DIGITAL_C,LOW);
digitalWrite(DIGITAL_D,LOW);
digitalWrite(DIGITAL_E,LOW);
digitalWrite(DIGITAL_F,LOW);
digitalWrite(DIGITAL_G,LOW);
digitalWrite(DIGITAL_DP,LOW);
digitalWrite(DIGITAL_SEG1,HIGH);
digitalWrite(DIGITAL_SEG2,HIGH);
digitalWrite(DIGITAL_SEG3,HIGH);
digitalWrite(DIGITAL_SEG4,HIGH);
}

void light_led(int x)
{
digitalWrite(DIGITAL_A, (lednumber & 0x80));
digitalWrite(DIGITAL_B, (lednumber & 0x40));
digitalWrite(DIGITAL_C, (lednumber & 0x20));
digitalWrite(DIGITAL_D, (lednumber & 0x10));
digitalWrite(DIGITAL_E, (lednumber & 0x08));
digitalWrite(DIGITAL_F, (lednumber & 0x04));
digitalWrite(DIGITAL_G, (lednumber & 0x02));
digitalWrite(DIGITAL_DP, (lednumber & 0x01));
}

void display_led(int num)
{
int number = num;
int led1 = 0;
int led2 = 0;
int led3 = 0;
int led4 = 0;

led4 = number%10;
led3 = number/10%10;
led2 = number/100%10;
led1 = number/1000%10;

light_led(led1);
digitalWrite(DIGITAL_SEG1,LOW);
delay(1);
digitalWrite(DIGITAL_SEG1,HIGH);

light_led(led2);
digitalWrite(DIGITAL_SEG2,LOW);
delay(1);
digitalWrite(DIGITAL_SEG2,HIGH);

light_led(led3);
digitalWrite(DIGITAL_SEG3,LOW);
delay(1);
digitalWrite(DIGITAL_SEG3,HIGH);

light_led(led4);
digitalWrite(DIGITAL_SEG4,LOW);
delay(1);
digitalWrite(DIGITAL_SEG4,HIGH);
}

void init_all(void)
{
wiringPiSetup();
pinMode(DIGITAL_A,OUTPUT);
pinMode(DIGITAL_B,OUTPUT);
pinMode(DIGITAL_C,OUTPUT);
pinMode(DIGITAL_D,OUTPUT);
pinMode(DIGITAL_E,OUTPUT);
pinMode(DIGITAL_F,OUTPUT);
pinMode(DIGITAL_G,OUTPUT);
pinMode(DIGITAL_DP,OUTPUT);
pinMode(DIGITAL_SEG1,OUTPUT);
pinMode(DIGITAL_SEG2,OUTPUT);
pinMode(DIGITAL_SEG3,OUTPUT);
pinMode(DIGITAL_SEG4,OUTPUT);
pinMode(BUTTONA,INPUT);
pinMode(BUTTONB,INPUT);
}

int main()
{
init_all();
init_digitalled();
for(;;)
{
       display_led(i);
    if(digitalRead(BUTTONA) == 0 || digitalRead(BUTTONB) == 0)
    {
       for(x=0;x<=20;x++)
       {
       display_led(i);
       };

       if(digitalRead(BUTTONA) == 0)
       {
          printf("BottonA is pressed! and you press %d times\n", i++);
       };

       if(digitalRead(BUTTONB) == 0)
       {
         if (i>0)
          {
             printf("ButtonB was pressed, and you have been pressed %d times\n", i--);
          };
       };
    };
};
}


元器件全部来自:老邓的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

吹口琴的钢铁侠 发表于 2016-5-24 21:10
wiring pi只有C++吗?

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

吹口琴的钢铁侠 发表于 2016-5-24 21:10
wiring pi只有C++吗?

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

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

hnyzcj 发表于 2016-5-25 05:49
改成鬼吹灯

怎么改?

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

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

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

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

virtualwiz 发表于 2016-5-25 19:26
接在Vcc Gnd之间

错,要接在GPIO和GND之间。
页: [1]
查看完整版本: 52Pi-骑驴玩儿漂移-树莓派干点儿啥之别吹灯-(*^__^*)