点亮LCD屏————遥控计算器 arduino

基于arduino uno r3/ Mega2560,做一个用遥控器控制的计算器。。。。。

                                                                                          目录                                                                                

                                                                                        

一. 实验材料:

(ง •_•)ง

1.arduino uno r3或 arduino Mega2560 板子 *1

2.lcd屏  *1

3.红外接收模块 *1

4.红外遥控器  *1

5.面包板*1

6.杜邦线 (公对公) *一堆 

7.小电阻  *2

8.一台电脑  + 一根数据线  (ಥ _ ಥ)

                                                                                        

二.具体步骤:

1.接线图

 实物图:

 (arduino Mega2560)

 (arduino uno r3)

                                                                                       

2.代码

代码如下:

#include <IRremote.h>
#include <LiquidCrystal.h>
#include <math.h>
 
const int
  rs = 12, 
  en = 11, 
  d4 = 5, 
  d5 = 4, 
  d6 = 3, 
  d7 = 2;
 
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
 
IRrecv irrecv(10);
decode_results results;
 
String 
  number1 = "0",
  number2 = "0",
  optr = "=",
  sixteenString = "                ";
 
 
void acceptInput(int character) {
  Serial.println(character);
  switch(character) {
    case 12495: 
      concatNumbers("1");
    break;
    case 6375:
      concatNumbers("2");
    break;
    case 31365:
      concatNumbers("3");
    break;
    case 4335:
      concatNumbers("4");
    break;
    
    case 14535:
      concatNumbers("5");
    break;
    case 23205:
      concatNumbers("6");
    break;
    case 17085:
      concatNumbers("7");
    break;
    case 19125:
      concatNumbers("8");
    break;
    case 21165:
      concatNumbers("9");
    break;
    case 26775:
      concatNumbers("0");
    break;
    case 8925:
      concatNumbers(".");
    break;
    case 765:
      number1 = "0";
      number2 = "0";
      optr = "=";
    break;
    case -2441:
      function("+");
    break;
    case -8161:
      function("-");
    break;
    case -26521:
      function("/");
    break;
    case -20401:
      function("x");
    break;
    case -15811:
      if(optr != "=")
        calculate("=");
    break;
    case -28561:
      backSpace();
    break;
    default: 
    Serial.println("Invalid Input");
  }
}
 
void setup() {
  Serial.begin(9600);
   
  lcd.begin(16, 2);
  irrecv.enableIRIn();
}
 
void loop() {
  if (irrecv.decode(&results)) {
    unsigned int result = results.value;
    String val = String(result);
    acceptInput(val.toInt());
    irrecv.resume(); 
  } 
  lcd.setCursor(0,0);
  lcd.print(optr + "  " + sixteenString.substring(number1.length() + 3) + number1);
  lcd.setCursor(0,1);
  lcd.print(sixteenString.substring(number2.length()) + number2);
}
 
void calculate(String op) {
  double no1 = number1.toDouble();
  double no2 = number2.toDouble();
  double calcVal = 0.0;
   
  if(optr == "+")
    calcVal = (no1 + no2);
  else if(optr == "-")
    calcVal = (no1 - no2);
  else if(optr == "x")
    calcVal = (no1 * no2);
  else if(optr == "/")
    calcVal = (no1 / no2);
   
  number1 = toString(calcVal);
  number2 = "0";
  optr = op;
}
 
String toString(double num) {
  return String(num);
}
 
void function(String e) { 
  if(number1 != "0" && number2 != "0") {
    calculate(e);
  }
  else if(number1 == "0") {  
    number1 = number2;
    number2 = "0";
  }
  optr = e;
}
 
void concatNumbers(String num) {
  if(optr == "=")
    number1 = "0";
  if(num != "."){
    if(number2.length() == 1 && number2 == "0")
       number2 = num;
     else
       number2 += num;  
  }
  else {
    if(number2.charAt(number2.length()-1) != '.' && number2.indexOf('.') == -1)
      number2 += num;
  }
}
 
void backSpace() {
  number2 = number2.substring(0, number2.length() - 1);
    if(number2 == "")
      number2 = "0";
}

(CTRL  + C)

3.调试红外遥控器

#你现在用遥控器控制,LCD屏不有任何反应(除非你的遥控器跟我一样)

将程序传上去后,打开IDE →工具→串口监视器

按下遥控器上的按钮会出来一串数值,把对应按键的数值写到代码相应位置

void acceptInput(int character) {
  Serial.println(character);
  switch(character) { 
    case 12495:                 //更改 case 后面跟的值    
      concatNumbers("1");                
    break;
    case 6375:                   //更改 case 后面跟的值 
      concatNumbers("2");
    break;
    case 31365:                  //更改 case 后面跟的值 
      concatNumbers("3");
    break;
    。。。。。
。。。。。。。。。。

 

ps:这一步一定要有耐心,对于遥控器上没有的按键可以自定义 。。你可以需要根据你手上的遥控重新定义遥控器上的按键和功能的关系


总结

 接线的时候一定要准确,做事要有耐心

附上效果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值