基于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:这一步一定要有耐心,对于遥控器上没有的按键可以自定义 。。你可以需要根据你手上的遥控重新定义遥控器上的按键和功能的关系
。
总结
接线的时候一定要准确,做事要有耐心
附上效果