树莓派-wiringPi实现3×4数字键盘

最近在玩一些关于树莓派配件的东西,有一个需求是从外部接入一个数字键盘,通过不同数字信号下发不同任务。


网上大部分的程序都是通过python的RPi.GPIO实现的,但是由于我跟外部机的通信是通过C++程序实现的,所以我用的是wiringPi库。数字键盘的原理很简单,就是把按键当成一个开关,当按键按下的时候即为导通。


实现方法

我们可以把列或者是行变成输出,然后把另外一边设置成输入,在循环内把某一行设置成高点平,判断所有接收是否有变成高点平的,在小循环结束时置为低电平。把数字跟二维数组里面的数字对应起来就可以了。(说到这里,C++的二维数组好奇怪,a[3][4]居然是4列三行。所以注意我这里用的是a[j][i]。

#include"wiringPi.h"
#include 

int main()
{
   std::string a1[4][3]={"1","2","3","4","5","6","7","8","9","*","0","#"};
   int raw[4]={1,28,23,24};
   int column[3]={25,26,27};
   
   wiringPiSetup();
   for(int i=0;i<4;i++)
   {pinMode(raw[i],INPUT);
    digitalWrite(raw[i],LOW);}
   for(int j=0;j<3;j++)
   {pinMode(column[j],OUTPUT);
    digitalWrite(column[j],LOW);}
while(1)
{
    for(int i=0;i<3;i++)
    {digitalWrite(column[i],HIGH); 
        for(int j=0;j<4;j++)
       {
        if(digitalRead(raw[j])==1)
            {std::cout<

注意事项

我用的是树莓派3B,在GPIO口的21和22这里有标注它的V是1,一开始我还不太理解是什么意思,直到我把两个INPUT口设置在这里的时候,才发现它不管设置什么,digitalRead出来的值都是1。因此大家在使用这两个口的时候要十分注意,我至今也没发现什么方法能把它置为0,如果有了解的朋友可以在评论区跟我说一下。

你可能感兴趣的:(树莓派-wiringPi实现3×4数字键盘)