0°

(十九)arduino入门:简易数字骰子

一、本节介绍

在以前的实验中,我们学会了使用7段LED显示器和控制按钮。在本课中,我们将使用7段显示器和按钮一起创建一个简单的数字骰子。

二、材料准备

1*-arduino UNO板

-USB数据线*1

-杜邦线

1*-按钮

*(1-10kΩ电阻器)

电阻器220Ω*(-8)

-7段显示器*1

1*104-陶瓷电容器

1*-74HC595

三、原理讲解

骰子的数字背后的想法非常简单:7段显示器从圆1~6。当按下按钮时,跳跃会减慢直到它停止在3秒后。当再次按下该按钮,则该过程将重复。

四、实验步骤

步骤1:构建电路

将74HC595用于布线之间,7段和arduinoUNO,请参考第11课74HC595。

一种按钮,所述按钮的一端连接到5V,而另一端与10kΩ电阻和电容器,连接在电阻和电容连接至GND。

image https://bbs.qutaojiao.com/assets/images/1-MzsneoTJ8CAVZoap.png

原理图

image https://bbs.qutaojiao.com/assets/images/1-XjsFKWiS7eoMzHAb.png

步骤2:编写程序

步骤3:编译代码

步骤4:上载程序到arduino UNO板

你现在可以看到跳跃的7段显示从1到6之间。当按钮被按压时,将跳跃减速直至停止3秒。如果再次按下该按钮,则该过程将重复。

image https://bbs.qutaojiao.com/assets/images/1-hDPM7lXz4ezwj1an.jpeg

本节课代码:

/***********************************************
  //数字骰子
  你现在可以看到单个的7段显示器之间从1到6。
  当按钮被按压时,将跳跃减速直至停止3秒。
  如果再次按下该按钮,则该过程将重复。
*************************************************/
//2017.11.11

const int latchPin = 12;//引脚12连接至ST_CP的74HC595
const int clockPin = 8;//8引脚连接到CP的74HC595_SH
const int dataPin = 11; //到DS的连接销1174HC595
const int ledPin = 13; //ledpin附加到13脚
const int keyIn = 2; //KEYIN连接到引脚
int num = 0;

//display 0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F
int datArray[16] = {252, 96, 218, 242, 102, 182, 190, 224, 254, 246, 238, 62, 156, 122, 158, 142};

long randNumber;
/***********************************************/
void setup()
{
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(keyIn, INPUT);
  Serial.begin(9600);
  randomSeed(analogRead(0)); //初始化A0输入随机数字生成
}
/************************************************/
void loop()
{
  int stat = digitalRead(keyIn);//读取自存储键
  if (stat == HIGH) // 检查是否按压了按钮
    num ++;
  if (num > 1)
  {
    num = 0;
  }

  Serial.print(num); //将num串行打印到监视器
  if (num == 1) //当按钮被按下
  {
    randNumber = random(1, 7); //随机存储1-7
    //显示随机数以1秒间隔3次
    showNum(randNumber); //显示在7段randnumber
    delay(1000);

    randNumber = random(1, 7);
    showNum(randNumber);
    delay(1000);

    randNumber = random(1, 7);
    showNum(randNumber);
    delay(1000);

    while (!digitalRead(keyIn)); //当没有按下按钮,程序停止在这里
    int stat = digitalRead(keyIn);//读取键的状态
    if (stat == HIGH) //检查是否按压了按钮
    {
      num ++;
      digitalWrite(ledPin, HIGH);
      delay(100);
      digitalWrite(ledPin, LOW);
      delay(100);
      if (num >= 1)
      {
        num = 0;
      }
    }
  }
  //显示100毫秒间隔在随机数字
  randNumber = random(1, 7);
  showNum(randNumber);
  delay(100);
}
/************************************************/
//该函数驱动7段显示数字
void showNum(int num)
{
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, datArray[num]);
  digitalWrite(latchPin, HIGH);
}
/************************************************/

本节课程序下载:点击下载

下载密码:

当前内容已被隐藏,您需要登录才能查看
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论