开启左侧

[培训作品]随机抽题器_郑建辉 林秀英

[复制链接]
发表于 2018-1-13 11:41:29 | 显示全部楼层 |阅读模式
作品简介:
每年的理、化、生等实验考核,学生都通过抓阄的方式进行抽题,这种方式速度比忙,也不方便。该作品主要通过Arduino UNO、i创学院扩展板、数码管、语音模块、按键模块等制作的随机抽题器,学生通过按键随机抽取考题。学生按第一次键按,数码管数字跳动,再按一次随机显示一数字并播报就是考生的考题号。
程序代码:
int preKeyVal = 1;
int keyVal = 0;
boolean keyChanged = true;
int num = 1;
const int keyPin = A0;
const int Rst = A1;
const int Data = A2;
const int Busy = A3;
int speak=0;  //判断是否播报
byte seven_seg_digits[8][8] = {    //设置每个数字所对应的开关数组
  {1, 0, 0, 1, 1, 1, 1, 1 }, // = 1
  {1, 1, 0, 0, 1, 0, 0, 0 }, // = 2
  {1, 0, 0, 0, 1, 0, 1, 0 }, // = 3
  {1, 0, 0, 1, 0, 0, 1, 1 }, // = 4
  {1, 0, 1, 0, 0, 0, 1, 0 }, // = 5
  {1, 0, 1, 0, 0, 0, 0, 0 }, // = 6
  {1, 0, 0, 0, 1, 1, 1, 1 }, // = 7
  {1, 0, 0, 0, 0, 0, 0, 0 }, // = 8
};

void sevenSegWrite(byte digit) {  //设置通过数组控制引脚开关,顺序为4-11号端口
byte pin = 4;
  for(byte segCount = 0; segCount < 8; ++segCount) {
   digitalWrite(pin, seven_seg_digits[digit][segCount]);
   ++pin;
  }
delay(100);
}

void setup() {
  //put your setup code here, to run once:
pinMode(Rst, OUTPUT);
pinMode(Data, OUTPUT);
pinMode(Busy, INPUT);
pinMode(keyPin, INPUT);

Serial.begin(9600);
  for(int i = 4; i <= 11; i++)
   pinMode(i, OUTPUT); //设置4~11引脚为输出模式

sevenSegWrite(0);
}

void loop() {
  //put your main code here, to run repeatedly:

keyVal = digitalRead(keyPin);
delay(5);
  if(keyVal != preKeyVal) {
   if (keyVal == HIGH) {
     keyChanged = !keyChanged;
    }
  }
sevenSegWrite(num - 1);
  if(keyChanged) {
   Serial.print("Current Num: ");
   Serial.println(num);
   if (speak==0){
     readSentence(35 + num);
     speak=1;
    }
  }
else {
   num++;
   speak=0;
   Serial.println(num);
  }
  if(num == 9) {
   num = 1;
  }
preKeyVal = keyVal;
}
void readSentence(int num) {
digitalWrite(Rst, LOW);
delayMicroseconds(2);
digitalWrite(Rst, HIGH);
delayMicroseconds(100);
digitalWrite(Rst, LOW);
delayMicroseconds(100);
  for(int i = 0; i < num; i++)
  {
   digitalWrite(Data, HIGH);
    delayMicroseconds(100);
   digitalWrite(Data, LOW);
   delayMicroseconds(100);
  }
while (digitalRead(Busy));
}


回复

使用道具 举报

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

本版积分规则

精彩课程推荐

关于我们

帮助中心

商务合作

点击这里给我发消息

关注微信公众号

Copyright © 2016-2017 i创学院 - 上海享渔教育科技有限公司 Powered by Discuz!     ( 沪ICP备16033954号-1 )