找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4073|回复: 0
打印 上一主题 下一主题
收起左侧

基于arduino的红外遥控比赛记分器

[复制链接]
跳转到指定楼层
楼主

和朋友们一起打球会不会经常遇到忘记分数的情况,能够专心打球而不用分心是一件多么惬意的事情,有一块属于自己场地的记分牌在吸引眼球的同时也能让朋友们更专心认真的打球。那就让我们来发扬极客精神,自己动手做一个吧!



这台“基于arduino的红外遥控比赛记分器”采用arduino UNO 、四块8*8红色点阵模块和红外遥控接收模块组成,可以通过红外线遥控器更新比赛分数和设置发球方,遥控有效距离不小于10米,可由一个随身电源供电。


硬件使用MAX7219点阵模块作为显示输出,采用级联接法,使用Max72xxPanel和Adafruit_GFX库驱动,轻松实现多种组合输出。具体接线方法在附件的代码中有描述,或请参考论坛内其它相关帖子。




此记分器经过羽毛球场地测试,性能稳定,霸气实用,获得一致好评,希望爱折腾的你能将它应用于其它运动,谢谢。

全部制作资料及源码下载: score.rar (83.43 KB, 下载次数: 11)


部分源码预览:


  1. int RECV_PIN = A0;
  2. IRrecv irrecv(RECV_PIN);
  3. decode_results results;

  4. int pinCS = 10; // Attach CS to this pin, DIN to MOSI and CLK to SCK (cf [url]http://arduino.cc/en/Reference/SPI[/url] )
  5. int numberOfHorizontalDisplays = 4;
  6. int numberOfVerticalDisplays = 1;

  7. int pinRightPlus = 4;
  8. int pinRightReduce = 5;
  9. int pinLeftPlus = 6;
  10. int pinLeftReduce = 7;

  11. unsigned long leftPlusCode = 0xFD807F;
  12. unsigned long LeftReduceCode = 0xFDA05F;
  13. unsigned long rightPlusCode = 0xFD40BF;
  14. unsigned long rightReduceCode = 0xFD609F;
  15. unsigned long resetCode = 0xFD00FF;
  16. unsigned long fireChg = 0xFD20DF;

  17. Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);

  18. int leftScore=0;
  19. int rightScore=0;
  20. uint8_t whoFire = 0; //0:none,1:left,2:right

  21. void setup() {
  22.   pinMode(pinRightPlus, INPUT);
  23.   pinMode(pinRightReduce, INPUT);
  24.   pinMode(pinLeftPlus, INPUT);
  25.   pinMode(pinLeftReduce, INPUT);

  26.   matrix.setIntensity(1); // Use a value between 0 and 15 for brightness

  27.   //Serial.begin(9600);
  28.   irrecv.enableIRIn(); // Start the receiver
  29. }

  30. void checkIR()
  31. {
  32.   if (irrecv.decode(&results)) {
  33.     //Serial.println(results.value, HEX);
  34.    
  35.     if (results.value==leftPlusCode)
  36.     {
  37.       leftScore++;
  38.       if(leftScore>99)
  39.       {
  40.         leftScore=99;
  41.       }
  42.       whoFire=1;
  43.     }
  44.     else if(results.value==fireChg)
  45.     {
  46.       //0:none,1:left,2:right
  47.       if(whoFire==0)
  48.       {
  49.         whoFire=1;
  50.       }
  51.       else if(whoFire==1)
  52.       {
  53.         whoFire=2;
  54.       }
  55.       else if(whoFire==2)
  56.       {
  57.         whoFire=1;
  58.       }
  59.     }
  60.     else if(results.value==LeftReduceCode )
  61.     {
  62.       leftScore--;
  63.       if(leftScore<0)
  64.       {
  65.         leftScore=0;
  66.       }
  67.     }
  68.     else if(results.value==rightPlusCode )
  69.     {
  70.       rightScore++;
  71.       if(rightScore>99)
  72.       {
  73.         rightScore=99;
  74.       }
  75.       whoFire=2;
  76.     }
  77.     else if(results.value==rightReduceCode )
  78.     {
  79.       rightScore--;
  80.       if(rightScore<0)
  81.       {
  82.         rightScore=0;
  83.       }
  84.     }
  85.     else if(results.value==resetCode )
  86.     {
  87.       leftScore=0;
  88.       rightScore=0;
  89.       whoFire=0;
  90.     }

  91.     irrecv.resume(); // Receive the next value
  92.   }
  93. }

  94. void loop() {

  95.   checkIR();
  96.   drawScreen();

  97.   delay(400);
  98. }

  99. void drawScreen()
  100. {
  101.   matrix.fillScreen(LOW);

  102.   drawLeftScore();
  103.   drawRightScore();
  104.   drawArr();

  105.   matrix.write(); // Send bitmap to display
  106. }

  107. void drawArr()
  108. {
  109.   //0:none,1:left,2:right
  110.   if(whoFire == 1)
  111.   {
  112.     matrix.drawPixel(0, 3, HIGH);
  113.     matrix.drawLine(1, 2, 1, 4, HIGH);
  114.     matrix.drawLine(2, 1, 2, 5, HIGH);
  115.   }
  116.   else if(whoFire == 2)
  117.   {
  118.     matrix.drawPixel(31, 3, HIGH);
  119.     matrix.drawLine(30, 2, 30, 4, HIGH);
  120.     matrix.drawLine(29, 1, 29, 5, HIGH);
  121.   }
  122. }

  123. void drawLeftScore()
  124. {
  125.   uint8_t score10 = leftScore/10;
  126.   uint8_t score1 = leftScore%10;

  127.   matrix.drawChar(4, 0,score10+48, HIGH, LOW, 1);
  128.   matrix.drawChar(10, 0,score1+48, HIGH, LOW, 1);
  129. }

  130. void drawRightScore()
  131. {
  132.   uint8_t score10 = rightScore/10;
  133.   uint8_t score1 = rightScore%10;

  134.   matrix.drawChar(17, 0,score10+48, HIGH, LOW, 1);
  135.   matrix.drawChar(23, 0,score1+48, HIGH, LOW, 1);

  136. }

复制代码




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表