@目录
一整套的简易计分器
Arduino Bit端
Arduino Nano都支持(应该)
实验物品:逐日套件中的Arduino Bit可编程主板、蓝牙(传从)模块、点阵屏显示、数码管(显示也可为OLED屏幕)
懒得去网络上找图
咳咳,图片有限使用
创作故事
来源于乒乓球……
经常和家里的小伙打打球,
来,好好打
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;逻辑一。运行主要在手机端,这部分主要是显示数据
编码是要注意顺序,不然有极大可能无法正常调试(上传)
这样程序就完成了
这个程序不难,写不了多少
来看一下效果
在视频的某一段
计分器套装使用
实际文件代码可能与文章略有所不同
整套应用(已打包)
整套应用(代码)
网页版的正在制作
低级项目……
批注不足请留言哈~,尽量会去添加