一、填空题。 (共1题,共100分) 1.主题:红外遥控舵机 器件:ATmega328控制板1个,舵机1个,红外遥控器(或发射装置)1个,红外遥控接收模块1个,电位器1个,结构件若干(也可使用普通电子元器件结合面包板搭建)。

任务要求: (1) 本项目由舵机、红外遥控器、红外接收模块、电位器组成; (2) 控制板上电后,舵机初始化角度为90°; (3) 使用红外遥控器控制舵机到0°,如按下0号键舵机转到0°; (4) 使用红外遥控器控制舵机到90°,如按下1号键舵机转到90°; (5) 使用红外遥控器控制舵机到180°,如按下2号键舵机转到180°; (6) 使用红外遥控器允许通过电位器控制舵机角度,如按下3号键后,扭动电位器旋钮,舵机角度跟随发生变化; (7) 使用红外遥控器控制舵机自动转动,如按下4号键后,舵机在0°~180°之间往复转动; (8) 使用红外遥控器停止舵机的往复转动,如按下5号键,舵机停止转动; (9) 可使用任意结构件搭; (10) 未作规定处可自行处理,无显与事实违背即可; (11) 红外线的有关程序提供参考代码,见下图,其他程序需自行完成。

说明:请考生在考试结束前,按照如下要求提交相关文件: (1)将程序放在一个文件夹中,并将文件夹命名为:DJKS4_身份证号; (2)将程序文件夹压缩为1个“rar或zip”格式文件,大小5M以下; (3)将程序文件通过“上传附件”按钮进行上传。

(100分)

7 条评论

  • @ 2025-6-2 18:16:07

    以下是一些**表达“度过难关后就轻松了”**的古诗词或名句,这些诗句虽然语境不同,但都蕴含着“熬过艰难时刻,前方便是坦途”的哲理,适合用来鼓励人坚持、不放弃:

    ✅ 一、经典诗句(直接表达或隐含“度过困难就会轻松”)

    1. 山重水复疑无路,柳暗花明又一村。
      ——陆游《游山西村》
      📌 释义:正怀疑无路可走时,突然出现了一个村庄,比喻在困境中看到了希望。

    2. 长风破浪会有时,直挂云帆济沧海。
      ——李白《行路难·其一》
      📌 释义:尽管前路重重困难,但我终将乘风破浪,驶向理想的彼岸。

    3. 千磨万击还坚劲,任尔东西南北风。
      ——郑燮《竹石》
      📌 释义:历经无数打击依然坚韧不拔,任凭风吹雨打都不动摇。

    4. 不经一番寒彻骨,怎得梅花扑鼻香。
      ——冯梦龙《醒世恒言》
      📌 释义:没有经历严寒的考验,就不会有梅花的清香,寓意成功来自磨砺。

    5. 宝剑锋从磨砺出,梅花香自苦寒来。
      ——《警世贤文》
      📌 释义:只有经过艰苦的磨练,才能获得真正的成功与芬芳。

    6. 沉舟侧畔千帆过,病树前头万木春。
      ——刘禹锡《酬乐天扬州初逢席上见赠》
      📌 释义:旧事物虽已衰败,但新事物不断涌现,寓意新生与希望。

    7. 人生如逆水行舟,不进则退;心似平原走马,易放难收。
      ——《对联》
      📌 释义:人生就像逆水而行,必须努力向前,一旦松懈就可能倒退。

    8. 世上无难事,只要肯登攀。
      ——毛泽东《水调歌头·重上井冈山》
      📌 释义:只要坚持不懈地攀登,就没有克服不了的困难。

    9. 路漫漫其修远兮,吾将上下而求索。
      ——屈原《离骚》
      📌 释义:前方的道路漫长而艰难,但我仍将不懈追求理想。

    10. 欲穷千里目,更上一层楼。
      ——王之涣《登鹳雀楼》
      📌 释义:想要看得更远,就要站得更高,寓意突破自我、勇往直前。


    ✅ 二、现代诗/励志句子(通俗易懂,适合激励人心)

    1. 黑夜无论怎样悠长,白昼总会到来。
      ——莎士比亚《麦克白》

    2. 风雨之后,必有彩虹。

    3. 阳光总在风雨后,请相信有彩虹。
      ——歌词《阳光总在风雨后》

    4. 每一次挫折,都会在你人生的某个时刻派上用场。
      ——村上春树

    5. 生活不可能像你想象得那么好,但也不会像你想象得那么糟。
      ——莫泊桑

    • @ 2025-6-2 18:14:48

      以下是一些表达度过难关后就很轻松的诗词:

      • 更喜岷山千里雪,三军过后尽开颜:出自毛泽东的《七律·长征》。诗句描绘了红军战士们战胜了岷山的积雪这一艰难险阻后,内心充满喜悦,展现出一种历经磨难后迎来轻松与胜利的欢快心情。
      • 寒极必春暖,苦尽会回甘:此句虽非古代经典诗词,但蕴含着深刻的哲理。它告诉人们,寒冷到了极致就会迎来温暖,苦难结束后就会品尝到甘甜,表达了度过艰难时期后,便会迎来轻松美好的生活。
      • 玉经磨琢多成器,剑拔沉埋便倚天:出自王定保的《唐摭言》。意思是玉石经过雕琢打磨大多能成为有用之器,宝剑从沉埋中拔出便能倚天而鸣,寓意着经历磨难和挫折后,就能展现出自身的价值,迎来美好的境遇,有一种苦尽甘来的轻松感。
      • 小舟从此逝,江海寄余生:是苏轼《临江仙·夜归临皋》中的句子。苏轼在经历人生的种种坎坷后,借这句诗表达了想要摆脱尘世束缚,乘小舟消失于江海,自在度过余生的愿望,体现出一种从世俗困境中解脱出来的轻松与豁达。
      • 回首向来萧瑟处,归去,也无风雨也无晴:源自苏轼的《定风波·莫听穿林打叶声》。诗人回首刚刚经历过的风雨路程,觉得无论是风雨还是晴天,都已无所谓,表现出一种历经风雨后的平静与超脱,度过了人生的风雨难关,内心变得豁达从容,不再为外界变化而烦恼。
      • @ 2025-6-2 18:12:04

        以下是一些表达度过难关就不难的诗词:

        • 长风破浪会有时,直挂云帆济沧海:出自李白的《行路难·其一》。诗句展现了诗人虽身处困境,但坚信总有一天能乘风破浪,扬起高帆渡过茫茫大海,实现理想,告诉人们面对困难要保持信心,勇往直前,终将迎来成功。
        • 山重水复疑无路,柳暗花明又一村:源自陆游的《游山西村》。此句描绘了山水萦绕的迷路之感后,突然出现新景象,寓意着在人生遭遇困境时,不要绝望,只要坚持前行,就可能会出现转机,迎来新的希望。
        • 千磨万击还坚劲,任尔东西南北风:出自清代郑燮的《竹石》。以竹子为喻,表明历经无数磨难和打击,依然坚韧不拔,不管外界环境如何恶劣,都能坚守自我,战胜困难。
        • 沉舟侧畔千帆过,病树前头万木春:是刘禹锡《酬乐天扬州初逢席上见赠》中的诗句。诗人以“沉舟”“病树”自比,却看到旁边千帆竞发,万木逢春,体现了一种豁达的心态,暗示困难只是暂时的,新事物必将取代旧事物,未来充满希望。
        • 千淘万漉虽辛苦,吹尽狂沙始到金:出自刘禹锡的《浪淘沙·其八》。意思是经过千万次的淘洗、过滤虽然很辛苦,但只有去除了泥沙,才能得到闪闪发光的黄金,寓意着克服重重困难后,才能收获成功。
        • 竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生:苏轼在《定风波·莫听穿林打叶声》中写下此句。诗人在雨中漫步,以竹杖草鞋行走胜过骑马,表现出一种不畏艰难、乐观豁达的心态,面对生活中的风雨,从容不迫,泰然处之。
        • @ 2025-6-2 18:08:41

          以下是针对你提供的红外遥控舵机代码的详细注释说明:

          #include <IRremote.h>  // 导入红外遥控库,用于接收和解码红外信号
          #include <Servo.h>     // 导入舵机控制库,用于控制舵机转动
          
          Servo myservo;         // 创建舵机对象
          const int recvPin = 3; // 红外接收模块连接到Arduino的数字引脚3
          IRrecv irrecv(recvPin); // 创建红外接收对象并指定接收引脚
          decode_results results; // 用于存储红外解码结果的结构体
          
          const int POT_PIN = A0;  // 电位器连接到模拟输入引脚A0
          int servoPin = 9;        // 舵机信号线连接到数字引脚9
          int angle = 0;           // 舵机当前角度
          int direction = 1;       // 自动摆动方向控制:1为增加角度,-1为减小角度
          
          void setup() {
            Serial.begin(9600);    // 初始化串口通信,波特率9600(用于调试输出)
            irrecv.enableIRIn();   // 启用红外接收功能
            myservo.attach(9);     // 将舵机连接到指定引脚
            myservo.write(90);     // 初始化舵机角度为90度
          }
          
          int dianKaiGuan = 0;     // 电位器控制开关标志(0=关闭,1=开启)
          int duojikaiguan = 0;    // 自动摆动开关标志(0=关闭,1=开启)
          
          void loop() {
            // 检查是否接收到红外信号并成功解码
            if (irrecv.decode(&results)) {
              // 将接收到的红外码以十六进制形式输出到串口
              Serial.println(results.value, HEX);
              
              // 根据不同的红外按键码执行相应操作
              if (results.value == 0xFF6897) {  // 按键0:舵机转到0度
                myservo.write(0);
                dianKaiGuan = 0;  // 关闭电位器控制
              }
              
              if (results.value == 0xFF30CF) {  // 按键1:舵机转到90度
                myservo.write(90);
                dianKaiGuan = 0;  // 关闭电位器控制
              }
              
              if (results.value == 0xFF18E7) {  // 按键2:舵机转到180度
                myservo.write(180);
                dianKaiGuan = 0;  // 关闭电位器控制
              }
              
              if (results.value == 0xFF7A85) {  // 按键3:切换电位器控制模式
                dianKaiGuan = !dianKaiGuan;     // 取反开关状态
                duojikaiguan = 0;               // 关闭自动摆动
              }
              
              if (results.value == 0xFF38C7) {  // 按键4:启动自动摆动
                duojikaiguan = 1;
                dianKaiGuan = 0;
              }
              
              if (results.value == 0xFF5AA5) {  // 按键5:停止所有动作
                duojikaiguan = 0;
                dianKaiGuan = 0;
              }
              
              irrecv.resume();  // 继续接收下一个红外信号
            }
            
            // 读取电位器值(范围0-1023)
            int potValue = analogRead(POT_PIN);
            
            // 如果电位器控制模式开启
            if (dianKaiGuan == 1) {
              // 将电位器值从0-1023映射到舵机角度0-180度
              int ang = map(potValue, 0, 1023, 0, 180);
              myservo.write(ang);  // 设置舵机角度
            }
            
            // 如果自动摆动模式开启
            if (duojikaiguan == 1) {
              myservo.write(angle);  // 设置当前角度
              delay(15);             // 等待舵机转动到指定位置
              
              // 更新角度值,实现往复摆动
              angle = angle + direction;
              if (angle >= 180) {
                direction = -1;  // 到达最大角度,开始减小角度
              }
              if (angle <= 0) {
                direction = 1;   // 到达最小角度,开始增加角度
              }
            }
            
            delay(15);  // 主循环延时,稳定控制频率
          }
          

          功能说明

          这段代码实现了通过红外遥控器控制舵机的多种功能:

          1. 初始化:系统启动后,舵机默认转到90度位置。

          2. 固定角度控制

            • 按遥控器0键:舵机转到0度
            • 按遥控器1键:舵机转到90度
            • 按遥控器2键:舵机转到180度
          3. 电位器控制

            • 按遥控器3键:切换电位器控制模式
            • 模式开启后,旋转电位器可控制舵机在0-180度范围内任意转动
          4. 自动摆动

            • 按遥控器4键:启动自动摆动模式,舵机在0-180度之间往复摆动
            • 按遥控器5键:停止所有动作,舵机保持当前位置

          硬件连接建议

          • 舵机信号线 → Arduino数字引脚9
          • 舵机电源线 → Arduino 5V(或外部电源正极)
          • 舵机地线 → Arduino GND(与电源负极共地)
          • 红外接收模块数据脚 → Arduino数字引脚3
          • 红外接收模块VCC → 5V
          • 红外接收模块GND → GND
          • 电位器中间脚 → Arduino模拟引脚A0
          • 电位器两端脚 → 5V和GND
          • @ 2025-6-2 18:07:32
            #include <IRremote.h>//导入红外库文件
            #include <Servo.h>
            
            Servo myservo; 
            const int recvPin = 3;//红外接受模块的连接引脚常量
            IRrecv irrecv(recvPin);//创建红外对象 同时初始化recvPin引脚//红外对象提供红外接受、发送操作的相关函数 
            decode_results results;//创建存放红外接受解码后结果的容器//用于保存接受解码后的数据
            const int POT_PIN = A0;  // 电位器连接的模拟引脚
            int servoPin=9;
            int angle = 0;      // 舵机初始角度
            int direction = 1;  // 摆动方向:1表示增加角度,-1表示减小角度
            
            void setup() {
              Serial.begin(9600);//初始化串口,设置波特率为9600
              irrecv.enableIRIn();//红外对象初始化//启动红外接受
              myservo.attach(9); 
              // (2) 控制板上电后,舵机初始化角度为90°;
              myservo.write(90); 
              //pinMode(LED_PIN,INPUT);  
            }
            int dianKaiGuan = 0;
            int duojikaiguan = 0;
            void loop() {
              //decode对红外信号进行解码操作的函数
              if(irrecv.decode(&results)){//如果接受到红外数据,接受并解码成功则把解码后的结果存放到results
                //irrecv.resume();
                Serial.println(results.value,16);//将解码结果以16进制的形式输出
                //Serial.println(results.value,HEX);
                if(results.value == 0xFF6897){// (3) 使用红外遥控器控制舵机到0°,如按下0号键舵机转到0°;
                  myservo.write(0); 
                  dianKaiGuan = 0;
                }
                if(results.value == 0xFF30CF){// (4) 使用红外遥控器控制舵机到90°,如按下1号键舵机转到90°;
                  myservo.write(90); 
                  dianKaiGuan = 0;
                }
                if(results.value == 0xFF18E7){// (5) 使用红外遥控器控制舵机到1800°,如按下2号键舵机转到90°;
                  myservo.write(180); 
                  dianKaiGuan = 0;
                }
                if(results.value == 0xFF7A85){// (6) 使用红外遥控器允许通过电位器控制舵机角度,如按下3号键后,扭动电位器旋钮,舵机角度跟随发生变化;
                  dianKaiGuan =!dianKaiGuan;
                }
                if(results.value == 0xFF38C7){//4 
                  duojikaiguan = 1;
                  dianKaiGuan = 0;
                }
                if(results.value == 0xFF5AA5){//5
                   duojikaiguan=0;
                   dianKaiGuan = 0;
                }
                irrecv.resume();//清空缓存 准备接受下一个红外信号
                //decode和resume成对使用,否则只能读取到第一次接受的红外编码值,而不再接受新的编码值
              }
              // 读取电位器的模拟值(范围0~1023)
              int potValue = analogRead(POT_PIN);
              if(dianKaiGuan == 1){
                int ang = map(potValue, 0, 1023, 0, 180);
                myservo.write(ang); 
              }
              if(duojikaiguan == 1){
                myservo.write(angle);
                //Serial.println(angle);
                delay(15);
                angle=angle+direction;
                if(angle>=180){
                  direction=-1;
                }if(angle<=0){
                  direction=1;
                }
              }
              delay(15);
            }
            
            • @ 2025-6-2 17:27:50
              #include <IRremote.h>//导入红外库文件
              #include <Servo.h>
              
              Servo myservo;
              const int recvPin = 3;//红外接受模块的连接引脚常量
              IRrecv irrecv(recvPin);//创建红外对象 同时初始化recvPin引脚//红外对象提供红外接受、发送操作的相关函数
              decode_results results;//创建存放红外接受解码后结果的容器//用于保存接受解码后的数据
              const int POT_PIN = A0;  // 电位器连接的模拟引脚
              void setup() {
                Serial.begin(9600);//初始化串口,设置波特率为9600
                irrecv.enableIRIn();//红外对象初始化//启动红外接受
                myservo.attach(9);
                // (2) 控制板上电后,舵机初始化角度为90°;
                myservo.write(90);
                //pinMode(LED_PIN,INPUT);
              }
              int dianKaiGuan = 0;
              int duoJiKaiGuan = 0;
              int servoPin = 9;   // 舵机信号引脚连接到Arduino的数字引脚9
              int angle = 0;      // 舵机初始角度
              int direction = 1;  // 摆动方向:1表示增加角度,-1表示减小角度
              void loop() {
                //decode对红外信号进行解码操作的函数
                if (irrecv.decode(&results)) { //如果接受到红外数据,接受并解码成功则把解码后的结果存放到results
                  //irrecv.resume();
                  Serial.println(results.value, 16); //将解码结果以16进制的形式输出
                  //Serial.println(results.value,HEX);
                  if (results.value == 0xFF7A85) { // (3) 使用红外遥控器控制舵机到0°,如按下0号键舵机转到0°;
                    myservo.write(0);
                  }
                  if (results.value == 0xFF30CF) { // (4) 使用红外遥控器控制舵机到90°,如按下1号键舵机转到90°;
                    myservo.write(90);
                  }
                  if (results.value == 0xFF18E7) { // (5) 使用红外遥控器控制舵机到1800°,如按下2号键舵机转到90°;
                    myservo.write(180);
                  }
                  if (results.value == 0xFF7A85) { // (6) 使用红外遥控器允许通过电位器控制舵机角度,如按下3号键后,扭动电位器旋钮,舵机角度跟随发生变化;
                    dianKaiGuan = 1;
                  }
                  if (results.value == 0xFF10EF) { // (6) 按下4号键后
                    duoJiKaiGuan = 1;
                  }
                  if (results.value == 0xFF38C7) { // (6)按下5号键后
                    duoJiKaiGuan = 0;
                  }
                  irrecv.resume();//清空缓存 准备接受下一个红外信号
                  //decode和resume成对使用,否则只能读取到第一次接受的红外编码值,而不再接受新的编码值
                }
                // 读取电位器的模拟值(范围0~1023)
                int potValue = analogRead(POT_PIN);
                if (dianKaiGuan == 1) {
                  int ang = map(potValue, 0, 1023, 0, 180);
                  myservo.write(ang);
                }
                if (duoJiKaiGuan == 1) {
                  // 移动舵机到当前角度
                  myservo.write(angle);
                  Serial.print("当前角度: ");
                  Serial.println(angle);
              
                  // 延迟一段时间,让舵机有足够的时间到达指定位置
                  delay(15);
              
                  // 更新角度
                  angle = angle + direction;
              
                  // 当角度达到最大值或最小值时,改变方向
                  if (angle >= 180) {
                    direction = -1;  // 改变方向为减小角度
                    Serial.println("到达最大角度,开始往回摆动");
                  } else if (angle <= 0) {
                    direction = 1;   // 改变方向为增加角度
                    Serial.println("到达最小角度,开始向前摆动");
                  }
                  // 延迟一段时间,控制摆动速度
                }
                delay(15);
                //delay(20);
              }
              
              
              • @ 2025-5-31 18:01:15
                #include <IRremote.h>//导入红外库文件
                #include <Servo.h>
                
                Servo myservo; 
                const int recvPin = 3;//红外接受模块的连接引脚常量
                IRrecv irrecv(recvPin);//创建红外对象 同时初始化recvPin引脚//红外对象提供红外接受、发送操作的相关函数 
                decode_results results;//创建存放红外接受解码后结果的容器//用于保存接受解码后的数据
                const int POT_PIN = A0;  // 电位器连接的模拟引脚
                void setup() {
                  Serial.begin(9600);//初始化串口,设置波特率为9600
                  irrecv.enableIRIn();//红外对象初始化//启动红外接受
                  myservo.attach(9); 
                  // (2) 控制板上电后,舵机初始化角度为90°;
                  myservo.write(90); 
                  //pinMode(LED_PIN,INPUT);  
                }
                int dianKaiGuan = 0;
                void loop() {
                  //decode对红外信号进行解码操作的函数
                  if(irrecv.decode(&results)){//如果接受到红外数据,接受并解码成功则把解码后的结果存放到results
                    //irrecv.resume();
                    Serial.println(results.value,16);//将解码结果以16进制的形式输出
                    //Serial.println(results.value,HEX);
                    if(results.value == 0xFF7A85){// (3) 使用红外遥控器控制舵机到0°,如按下0号键舵机转到0°;
                      myservo.write(0); 
                    }
                    if(results.value == 0xFF30CF){// (4) 使用红外遥控器控制舵机到90°,如按下1号键舵机转到90°;
                      myservo.write(90); 
                    }
                    if(results.value == 0xFF18E7){// (5) 使用红外遥控器控制舵机到1800°,如按下2号键舵机转到90°;
                      myservo.write(180); 
                    }
                    if(results.value == 0xFF7A85){// (6) 使用红外遥控器允许通过电位器控制舵机角度,如按下3号键后,扭动电位器旋钮,舵机角度跟随发生变化;
                      dianKaiGuan = 1;
                    }
                    irrecv.resume();//清空缓存 准备接受下一个红外信号
                    //decode和resume成对使用,否则只能读取到第一次接受的红外编码值,而不再接受新的编码值
                  }
                  // 读取电位器的模拟值(范围0~1023)
                  int potValue = analogRead(POT_PIN);
                  if(dianKaiGuan == 1){
                    int ang = map(potValue, 0, 1023, 0, 180);
                    myservo.write(ang); 
                  }
                  delay(20);
                }
                
                • 1