Arduino Nano分数显示器(附件)

@目录

一整套的简易计分器

Android端地址
掌控板端
计算机端

Arduino Bit端

Arduino Nano都支持(应该)
实验物品:逐日套件中的Arduino Bit可编程主板、蓝牙(传从)模块、点阵屏显示、数码管(显示也可为OLED屏幕)

Arduino Bit可编程主板蓝牙(传从)模块8x8点阵屏数码管懒得去网络上找图
非盈利

咳咳,图片有限使用

创作故事

来源于乒乓球……
经常和家里的小伙打打球,
来,好好打
latter……
几比几了?或者 轮到谁发球了?
于是网络上搜索了一波,并没有我想要的计分器
于是自己做一个(然后没想到做起了一套)

Arduino语言制作

也可以用Mind+和Mixly编写,这里我用Mixly上支持的Arduino语言编写与使用
注释基本都在代码块里

初始化

String val;
SoftwareSerial mySerial1(10,11);
volatile int player1soce;
volatile int player2soce;
TM1650 tm_4display;
Matrix myMatrix(A0,A1);
uint8_t  LEDArray[8];


const uint8_t matrix_img_103060ffff603010[8] PROGMEM={0x10,0x30,0x60,0xff,0xff,0x60,0x30,0x10};

const uint8_t matrix_img_080c06ffff060c08[8] PROGMEM={0x08,0x0c,0x06,0xff,0xff,0x06,0x0c,0x08};

const uint8_t stop[8] PROGMEM ={0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x00};

void setup(){
  val = "";
  Serial.begin(9600);
  mySerial1.begin(38400);
  player1soce = 0;
  player2soce = 0;
  Wire.begin();
  tm_4display.init();
  myMatrix.begin(0x70);
}

蓝牙获取

没有蓝牙使用的Arduino说明或者没找到可方便调用的库,所以是尝试着用串口获取,最后成功了

if (Serial.available() > 0) {
    val = Serial.readString();
    mySerial1.print(val);

  }
  if (mySerial1.available() > 0) {
    val = mySerial1.readString();
    Serial.println(val);

  }

数码管显示

  tm_4display.displayOn();//启用
  tm_4display.clear()://清屏

显示格式(四位数码管只能显示四位)
所以只能是“1-1”或“10-9”或“1010(意思是10-10)”【注:“-”表示“比”】

  if (player1soce + player2soce <= 19) {
    tm_4display.clear();
    tm_4display.setDot(1,false);
    tm_4display.displayString(String(player1soce) + String("-") + String(player2soce));

  } else {
    tm_4display.clear();
    tm_4display.displayString(String(player1soce) + String(player2soce));
    tm_4display.setDot(1,true);

  }

点阵屏显示

用到Mixly的Mixly内置“—>”“<—”图像

发球者
  myMatrix.clear();//启用点阵屏
  //右(方向视实际应用)发球
  if (((String(val).equals(String("17")) || String(val).equals(String("27"))) || (String(val).equals(String("37")) || String(val).equals(String("47")))) || ((String(val).equals(String("57")) || String(val).equals(String("67"))) || String(val).equals(String("7")))) {
    memcpy_P (&LEDArray, &matrix_img_103060ffff603010, 8);
    for(int index_i=0; index_i<8; index_i++)
    {
      for(int index_j=0*8; index_j<0*8+8; index_j++)
      {
        if((LEDArray[index_i]&0x01)>0)
          myMatrix.drawPixel(index_j, index_i,1);
    else
    myMatrix.drawPixel(index_j, index_i,0);
         LEDArray[index_i] = LEDArray[index_i]>>1;
      }
    }
    myMatrix.write();

  }
//左(方向视实际应用)发球
  if (((String(val).equals(String("18")) || String(val).equals(String("28"))) || (String(val).equals(String("38")) || String(val).equals(String("48")))) || ((String(val).equals(String("58")) || String(val).equals(String("68"))) || String(val).equals(String("8")))) {
    memcpy_P (&LEDArray, &matrix_img_080c06ffff060c08, 8);
    for(int index_i=0; index_i<8; index_i++)
    {
      for(int index_j=0*8; index_j<0*8+8; index_j++)
      {
        if((LEDArray[index_i]&0x01)>0)
          myMatrix.drawPixel(index_j, index_i,1);
    else
    myMatrix.drawPixel(index_j, index_i,0);
         LEDArray[index_i] = LEDArray[index_i]>>1;
      }
    }
    myMatrix.write();

  }
设备(游戏)状态
// 提示暂停或未开始
  if (String(val).equals(String("1156"))) {
    memcpy_P (&LEDArray, &stop, 8);
    for(int index_i=0; index_i<8; index_i++)
    {
      for(int index_j=0*8; index_j<0*8+8; index_j++)
      {
        if((LEDArray[index_i]&0x01)>0)
          myMatrix.drawPixel(index_j, index_i,1);
    else
    myMatrix.drawPixel(index_j, index_i,0);
         LEDArray[index_i] = LEDArray[index_i]>>1;
      }
    }
    myMatrix.write();
    player2soce = 0;
    player1soce = 0;

  }
  // 提示结束
  if (String(val).equals(String("31156")) || String(val).equals(String("11156"))) {
    myMatrix.scrollMessage("END",200);

  }
  // 提示断开
  if (String(val).equals(String("12"))) {
    myMatrix.scrollMessage("Colect lost",200);

  }

命令控制

分数加减清零等

 if (String(val).equals(String("17")) || String(val).equals(String("18"))) {
    player1soce = player1soce + 1;

  }
  if (String(val).equals(String("27")) || String(val).equals(String("28"))) {
    player1soce = player1soce - 1;

  }
  if (String(val).equals(String("37")) || String(val).equals(String("38"))) {
    player2soce = player2soce + 1;

  }
  if (String(val).equals(String("48")) || String(val).equals(String("47"))) {
    player2soce = player2soce - 1;

  }
  if (String(val).equals(String("57")) || String(val).equals(String("58"))) {
    player2soce = 0;

  }
  if (String(val).equals(String("67")) || String(val).equals(String("68"))) {
    player1soce = 0;

  }

  player1soce;

}

本编码:点阵屏接口:A0A1,数码管接口:A4A5,蓝牙模块(蓝牙数据传-从):D10D11;逻辑一。运行主要在手机端,这部分主要是显示数据

编码是要注意顺序,不然有极大可能无法正常调试(上传)

这样程序就完成了

这个程序不难,写不了多少
来看一下效果
2-2正常
4-3正常
4-3显示正面
在视频的某一段

计分器套装使用

实际文件代码可能与文章略有所不同
整套应用(已打包)
整套应用(代码)
网页版的正在制作
低级项目……
批注不足请留言哈~,尽量会去添加

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值