暑假学习第二周

第二周汇总

概况

主要进行了抢答器的完成,从开始的计划筹备,以及元器件的选择,线路的连接,到对各个元器件进行逐个学习,完成单人的答题流程,到最后的整体连线,元器件的连接固定和故障调试,初步完成了抢答器的基本功能。

抢答器概要

本设计最终目的实现三路抢答功能,不同分值的加分功能,惩罚功能。为完成设计要求需要完成各个模组的线路连接,以及软件的架构,和最后软硬件的对接和测试。
硬件分析:抢答器的硬件主体为arduino Mega 2560单片机,所有其他模块接收到的数据都是由它采集和处理的。一个最基础的抢答单元,需要一个抢答按钮和作为提示的灯光蜂鸣器,需要一块LED显示屏展示得分情况,这里选用的是linksprite系列的Serial 16x2 LCD。最后需要使用舵机完成惩罚操作。
软件分析:单片机能对采集到的信息进行判断,选择出优先做出抢答的选手,还需要判断情况,根据不同模块传导的数据来进行不同分值的加分和惩罚工作。最后需要能在一次答题的整个流程结束后,迅速进入到下一次的准备中。

流程分析

这里写图片描述
根据题目的需求与任务,我们做了一个初步的想法。首先在开始抢答时,迅速判断出领先的选手,并立即使当前选手前的LED灯泡点亮和蜂鸣器长响,示意该选手完成抢答。接着程序自动进入到答题倒计时阶段(需要将时间展现给选手),计时结束后,由主持人做出选择,判断正误,若正确,则进入到加分环节,将设置几个不同的分值按钮可供选择,接着展示展示当前所有选手分值,流程结束。或回答错误,按下相应按钮后,触发惩罚程序,流程结束

相关的代码

串行led

#include <SoftwareSerial.h>

#define txPin 2

SoftwareSerial LCD = SoftwareSerial(0, txPin);
// since the LCD does not send data back to the Arduino, we should only define the txPin
const int LCDdelay=10;  // conservative, 2 actually works

// wbp: goto with row & column
void lcdPosition(int row, int col) {
  LCD.write(0xFE);   //command flag
  LCD.write((col + row*64 + 128));    //position 
  delay(LCDdelay);
}
void clearLCD(){
  LCD.write(0xFE);   //command flag
  LCD.write(0x01);   //clear command.
  delay(LCDdelay);
}
void backlightOn() {  //turns on the backlight
  LCD.write(0x7C);   //command flag for backlight stuff
  LCD.write(157);    //light level.
  delay(LCDdelay);
}
void backlightOff(){  //turns off the backlight
  LCD.write(0x7C);   //command flag for backlight stuff
  LCD.write(128);     //light level for off.
   delay(LCDdelay);
}
void serCommand(){   //a general function to call the command flag for issuing all other commands   
  LCD.write(0xFE);
}

void setup()
{
  pinMode(txPin, OUTPUT);
  LCD.begin(9600);
  backlightOn() ;
  clearLCD();
  lcdPosition(0,0);
  LCD.print("Hello world from LinkSprite!");
}

void loop()
{
}

四路七段数码管

#include "TM1637.h"
#define CLK 3//pins definitions for TM1637 and can be changed to other ports       
#define DIO 2
TM1637 tm1637(CLK,DIO);
void setup()
{
  tm1637.init();
  tm1637.set(BRIGHT_DARKEST );//BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
}
int i=0;
int a=0;
int b=0;
int c=0;
int d=0;
void loop()
{
  int b1=0;
    b1=analogRead(A0);
    if(b1==1023)
    {delay(300);
      i++;
    }
    if(i<10)
    {a=i;}
    if(i>=10)
    {a=i%10;b=i/10;}
    tm1637.display(0,b);
    tm1637.display(1,a); 
    tm1637.display(2,c);
    tm1637.display(3,d);
delay(1000);
}

数据结构与SPI的学习

只是进行了初步的了解,关于SPI串行外设接口总线,其各个接口信号线的作用,以及数据传输时的大概流程。
SPI接口共有4根信号线,分别是:设备选择线、时钟线、串行输出数据线、串行输入数据线。设备选择线。
SS-;(CS)设备选择线 SS-线用于选择激活某Slave设备,低有效,由Master驱动输出。只有当SS-信号线为低电平时,对应Slave设备的SPI接口才处于工作状态。
SCLK:同步时钟信号线 SCLK用来同步主从设备的数据传输,由Master驱动输出,Slave设备按SCK的步调接收或发送数据。
串行数据线: SPI接口数据线是单向的,共有两根数据线,分别承担Master到Slave、Slave到Master的数据传输;但是不同厂家的数据线命名有差别。 Motorola的经典命名是MOSI和MISO,这是站在信号线的角度来命名的。
MOSI:When master, out line; when slave, in line
MISO:When master, in line; when slave, out line
不过,也有一些产家(比如Microchip)是按照类似SDI,SDO的方式来命名,这是站在器件的角度根据数据流向来定义的。 SDI:串行数据输入 SDO:串行数据输出。

多Slave的应用

SPI 也支持多Slave应用。多个Slave共享时钟线、数据线,可以直接并接在一起;而各Slave的片选线SS则单独与Master连接,受Master 控制。在一段时间内,Master只能通过某根SS线激活一个Slaven进行数据传输。Slave的时钟线和数据线端口则都应保持高阻状态,以免影响当前数据传输的进行。

关于数据结构

认识数据结构,数据,数据元素,数据项,数据对象。逻辑结构包括集合结构,线性结构,树形结构和图形结构。物理结构包括顺序存储结构和链式存储结构。初步掌握了算法效率的度量方法和算法时间复杂度的计算。

遇到的问题

对单片机上的引脚不够熟悉,错误的将LED3连接在了13好接口,导致其在通电后不停闪烁,错误的将8号接口定义为舵机的控制接口,导致舵机2在通电后一直进行自行旋转,并影响到了LED屏的正常工作。
各个元器件上的跳线过多,未进行正确的梳理,导致乱糟糟一团,在连线到面包版以及单片机时产生了很多操作上的难度,尤其是当其中一根跳线脱落时,更加难以排查。
对于控制串行UART 16x2 LCD,四七段数码管,舵机的复杂代码,只能做到最基本的使用和简单的修改,没能彻底掌握。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值