红外遥控数码管

功能展示

1、按下开关从0顺序显示到9

在这里插入图片描述

2、遥控器输入0-9,数码管显示相应数字,按下*清除数码管显示内容

在这里插入图片描述

IRremote库下载

下载链接(点击穿越)

找到下载好的zip文件并安图示导入

在这里插入图片描述

连接好Arduino开发板,选好型号,配置好端口

数码管内部图

在这里插入图片描述
图片来源

相关联线

  对应关系:
  
  1---A1
  2---A2
  4---A4
  5---A5
  
  6---6
  7---7
  9---9
  10---10
  3/8---GND
  

相关代码

注:如果需要自己可以加个中断


#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn();
  pinMode(A1, OUTPUT);
  pinMode(A2, OUTPUT);
  pinMode(A4, OUTPUT);
  pinMode(A5, OUTPUT);

  pinMode(A3, INPUT_PULLUP);
  
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
}

void oneCircle(){
    for(int i = 0; i <= 10; ++i){
    switch(i){
      case 0:
        digital_0();
        delay(1000);
        break;
      case 1:
        digital_1();
        delay(1000);
        break;
      case 2:
        digital_2();
        delay(1000);
        break;
      case 3:
        digital_3();
        delay(1000);
        break;
      case 4:
        digital_4();
        delay(1000);
        break;
      case 5:
        digital_5();
        delay(1000);
        break;
      case 6:
        digital_6();
        delay(1000);
        break;
      case 7:
        digital_7();
        delay(1000);
        break;
      case 8:
        digital_8();
        delay(1000);
        break;
      case 9:
        digital_9();
        delay(1000);
        break;
      case 10:
        clear();
        delay(1000);
        break;
    }
  }
}

void clear(){
  digitalWrite(A1, LOW);
  digitalWrite(A2, LOW);
  digitalWrite(A4, LOW);
  digitalWrite(A5, LOW);
  
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
}

void digital_0(){
  clear();
  digitalWrite(A1, HIGH);
  digitalWrite(A2, HIGH);
  digitalWrite(A4, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(9, HIGH);
}

void digital_1(){
  clear();
  digitalWrite(A4, HIGH);
  digitalWrite(6, HIGH);
}

void digital_2(){
  clear();
  digitalWrite(A1, HIGH);
  digitalWrite(A2, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(10, HIGH);
}

void digital_3(){
  clear();
  digitalWrite(A2, HIGH);
  digitalWrite(A4, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(10, HIGH);
}

void digital_4(){
  clear();
  digitalWrite(A4, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);
}

void digital_5(){
  clear();
  digitalWrite(A2, HIGH);
  digitalWrite(A4, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);
}

void digital_6(){
  clear();
  digitalWrite(A1, HIGH);
  digitalWrite(A2, HIGH);
  digitalWrite(A4, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);
}

void digital_7(){
  clear();
  digitalWrite(A4, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
}

void digital_8(){
  clear();
  digitalWrite(A1, HIGH);
  digitalWrite(A2, HIGH);
  digitalWrite(A4, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);
}


void digital_9(){
  clear();
  digitalWrite(A2, HIGH);
  digitalWrite(A4, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);
}

void loop() {

  //先不考虑同步异步问题
  if(!digitalRead(A3)){
    oneCircle();
  }
  
  if(irrecv.decode(&results)){
    switch(results.value){
      case 16753245:
      Serial.println(1);
      digital_1();
      break;
      case 16736925:
      Serial.println(2);
      digital_2();
      break;
      case 16769565:
      Serial.println(3);
      digital_3();
      break;
      case 16720605:
      Serial.println(4);
      digital_4();
      break;
      case 16712445:
      Serial.println(5);
      digital_5();
      break;
      case 16761405:
      Serial.println(6);
      digital_6();
      break;
      case 16769055:
      Serial.println(7);
      digital_7();
      break;
      case 16754775:
      Serial.println(8);
      digital_8();
      break;
      case 16748655:
      Serial.println(9);
      digital_9();
      break;
      case 16750695:
      Serial.println(0);
      digital_0();
      break;
      case 16738455:
      Serial.println("*");
      clear();
      break;
      case 16756815:
      Serial.println("#");
      break;
    }

    irrecv.resume();
  }                 
}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
这个项目需要用到 Arduino 开发板、红外遥控模块、数码管、风扇以及一些其他的电子元件。整个项目可以分为三个部分来实现:红外遥控数码管显示和风扇控制。 首先,我们需要将红外遥控模块与 Arduino 开发板连接起来。这个步骤需要根据具体的红外遥控模块来连接。一般来说,红外遥控模块有三个引脚:VCC、GND 和 OUT,我们需要将 VCC 连接到 Arduino 开发板的 5V 引脚,GND 连接到 GND 引脚,OUT 连接到 Arduino 开发板的一个数字输入引脚(比如 D2 引脚)。 然后,我们需要将数码管与 Arduino 开发板连接起来。数码管一般有四个引脚,分别是 VCC、GND、DIN 和 CS。我们需要将 VCC 连接到 Arduino 开发板的 5V 引脚,GND 连接到 GND 引脚,DIN 连接到一个数字输出引脚(比如 D3 引脚),CS 连接到另一个数字输出引脚(比如 D4 引脚)。 最后,我们需要将风扇与 Arduino 开发板连接起来。风扇一般有两个引脚,分别是 VCC 和 GND。我们需要将 VCC 连接到 Arduino 开发板的 5V 引脚,GND 连接到 GND 引脚。 接下来,我们需要编写代码来实现这个项目。代码中需要实现三个功能:红外遥控数码管显示和风扇控制。 首先是红外遥控功能。我们可以使用 Arduino 自带的红外遥控库来实现这个功能。代码如下: ```c #include <IRremote.h> #define IR_PIN 2 IRrecv irrecv(IR_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); irrecv.resume(); } } ``` 这段代码中,我们首先定义了红外遥控模块的输入引脚为 D2。然后在 setup 函数中初始化红外遥控模块,并启动了串口通信。在 loop 函数中,我们使用 irrecv.decode 函数来读取红外遥控模块接收到的信号,并使用 Serial.println 函数将信号以十六进制的形式输出到串口上。 接下来是数码管显示功能。我们可以使用 MAX7219 芯片来控制数码管显示。代码如下: ```c #include <LedControl.h> #define DIN_PIN 3 #define CS_PIN 4 #define CLK_PIN 5 LedControl lc = LedControl(DIN_PIN, CLK_PIN, CS_PIN, 1); void setup() { lc.shutdown(0, false); lc.setIntensity(0, 8); lc.clearDisplay(0); } void loop() { lc.setDigit(0, 0, 1, false); lc.setDigit(0, 1, 2, false); lc.setDigit(0, 2, 3, false); lc.setDigit(0, 3, 4, false); delay(1000); } ``` 这段代码中,我们首先定义了 MAX7219 芯片的三个引脚分别为 D3、D4 和 D5。然后在 setup 函数中初始化了 MAX7219 芯片,并设置了亮度和显示模式。在 loop 函数中,我们使用 lc.setDigit 函数来设置数码管显示内容,并使用 delay 函数来实现定时功能。 最后是风扇控制功能。我们可以使用 Arduino 的 PWM 功能来控制风扇的转速。代码如下: ```c #define FAN_PIN 9 void setup() { pinMode(FAN_PIN, OUTPUT); analogWrite(FAN_PIN, 0); } void loop() { for (int i = 0; i <= 255; i++) { analogWrite(FAN_PIN, i); delay(10); } for (int i = 255; i >= 0; i--) { analogWrite(FAN_PIN, i); delay(10); } } ``` 这段代码中,我们首先定义了风扇的控制引脚为 D9。然后在 setup 函数中将这个引脚设置为输出模式,并将风扇的转速初始化为 0。在 loop 函数中,我们使用 for 循环来逐渐增加和降低风扇的转速,并使用 delay 函数来控制转速变化的速率。 将这三个部分的代码整合起来,就可以实现 Arduino 红外遥控数码管定时风扇的功能了。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值