开启左侧

【培训作品上传示例及说明】示例项目:红外遥控小车_Levin

[复制链接]
发表于 2017-9-26 23:25:05 | 显示全部楼层 |阅读模式
作品上传说明:
       请参加培训的老师在该【中国电子学会师资培训】板块下按此帖示例的格式进行作品上传,帖子标题请按照【培训作品】作品名_姓名的格式填写至少包括作品简介作品照片(2-3张)程序源代码附件(程序源文件和作品演示视频)。其中作品演示视频时长为30秒至1分钟,视频大小不超过50M,最好为MP4格式,可以正常播放。
       作品成功上传后,作品评审结果将作为培训证书的发放依据,请大家认真完成作品整理和上传任务。

       作品上传入口点击该页面左上角 发布主题http://imakeedu.com/forum.php?mod=forumdisplay&fid=68 发布主题 >> 发表帖子

       作品上传截止时间:2017年10月18日(周三)

以下为示例作品:
红外遥控小车

作品简介:
       该作品主要通过Arduino UNO、i创学院扩展板、L298N电机驱动模块、红外遥控模块实现对四轮小车的遥控控制,包括前进、后退、左转、右转、停止、减速、加速、全速前进功能。

作品照片:
IMG_0563.JPG

IMG_0562.JPG

IMG_0561.JPG

程序源代码:
  1. #include <IRremote.h>
  2. #include <Servo.h>

  3. const int leftPin1 = 7;
  4. const int leftPin2 = 8;
  5. const int rightPin3 = 3;
  6. const int rightPin4 = 4;
  7. const int leftSpeed = 6;
  8. const int rightSpeed = 5;
  9. const int irPin = A0;  //红外遥控传感器信号引脚连接主板引脚A0
  10. const int maxspeedPwm = 255;  //PWM 最大值
  11. const int minspeedPwm = 90;  //PWM 最小值
  12. const int speedStep = 10;  //加速或减速时PWM的增减幅度
  13. int intSpeedPwm= 130;  //设置小车运行的初始速度
  14. IRrecv irRecv(irPin);  //定义红外库对象irRecv
  15. decode_results irResults;  //定义红外数据对象irResults

  16. Servo servo;
  17. const int servoPin = 2;

  18. void setup() {
  19.   // put your setup code here, to run once:
  20.   pinMode(leftPin1,OUTPUT);
  21.   pinMode(leftPin2,OUTPUT);
  22.   pinMode(rightPin3,OUTPUT);
  23.   pinMode(rightPin4,OUTPUT);
  24.   irRecv.enableIRIn();
  25.   //Serial.begin(9600);
  26.   servo.attach(servoPin);
  27.   servo.write(90);  //使舵机方向归正
  28.   delay(30);
  29. }

  30. void loop() {
  31.   // put your main code here, to run repeatedly:
  32.   if(irRecv.decode(&irResults)) {
  33.     //Serial.println(irResults.value, HEX);
  34.     switch (irResults.value) {
  35.       case 0xFF22DD :    //左转
  36.         turnLeft();
  37.         break;
  38.       case 0xFFC23D :   //右转
  39.         turnRight();
  40.         break;
  41.       case 0xFF629D:    //前进
  42.         forward();
  43.         break;
  44.       case 0xFFA857:    //后退
  45.         backward();
  46.         break;
  47.       case 0xFF02FD:     //停止
  48.         pause();
  49.         break;
  50.       case 0xFF6897:     //❷减速
  51.         if (intSpeedPwm - speedStep < minspeedPwm){
  52.           intSpeedPwm = minspeedPwm;
  53.         }else{
  54.           intSpeedPwm -= speedStep;
  55.         }
  56.         break;
  57.       case 0xFF9867:    //❷加速
  58.         if (intSpeedPwm + speedStep > maxspeedPwm) {
  59.           intSpeedPwm = maxspeedPwm;
  60.         }else{
  61.           intSpeedPwm += speedStep;
  62.         }
  63.         break;
  64.       case 0xFFB04F:    //全速
  65.         intSpeedPwm = maxspeedPwm;
  66.         break;
  67.     }
  68.     analogWrite(leftSpeed, intSpeedPwm); //设定左侧马达的速度
  69.     analogWrite(rightSpeed, intSpeedPwm); //设定右侧马达的速度
  70.     irRecv.resume(); // 接收下一个值
  71.   }
  72. }

  73. //===============
  74. // 前进
  75. //===============
  76. void forward(){
  77.   digitalWrite(leftPin1,1);
  78.   digitalWrite(leftPin2,0);
  79.   digitalWrite(rightPin3,1);
  80.   digitalWrite(rightPin4,0);
  81. }
  82. //===============
  83. // 后退
  84. //===============
  85. void backward(){
  86.   digitalWrite(leftPin1,0);
  87.   digitalWrite(leftPin2,1);
  88.   digitalWrite(rightPin3,0);
  89.   digitalWrite(rightPin4,1);
  90. }
  91. //===============
  92. // 左转
  93. //===============
  94. void turnLeft(){
  95.   digitalWrite(leftPin1,0);
  96.   digitalWrite(leftPin2,0);
  97.   digitalWrite(rightPin3,1);
  98.   digitalWrite(rightPin4,0);
  99. }
  100. //===============
  101. // 右转
  102. //===============
  103. void turnRight(){
  104.   digitalWrite(leftPin1,1);
  105.   digitalWrite(leftPin2,0);
  106.   digitalWrite(rightPin3,0);
  107.   digitalWrite(rightPin4,0);
  108. }
  109. //===============
  110. // 原地左转
  111. //===============
  112. void rotateLeft(){
  113.   digitalWrite(leftPin1,0);
  114.   digitalWrite(leftPin2,1);
  115.   digitalWrite(rightPin3,1);
  116.   digitalWrite(rightPin4,0);
  117. }
  118. //===============
  119. // 原地右转
  120. //===============
  121. void rotateRight(){
  122.   digitalWrite(leftPin1,1);
  123.   digitalWrite(leftPin2,0);
  124.   digitalWrite(rightPin3,0);
  125.   digitalWrite(rightPin4,1);
  126. }
  127. //===============
  128. // 停止
  129. //===============
  130. void pause(){
  131.   digitalWrite(leftPin1,0);
  132.   digitalWrite(leftPin2,0);
  133.   digitalWrite(rightPin3,0);
  134.   digitalWrite(rightPin4,0);
  135. }
复制代码

【附件】
程序源文件: car.ino (5.33 KB, 下载次数: 0)
回复

使用道具 举报

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

本版积分规则

精彩课程推荐

关于我们

帮助中心

商务合作

点击这里给我发消息

关注微信公众号

Copyright © 2016-2017 i创学院 - 上海享渔教育科技有限公司 Powered by Discuz!     ( 沪ICP备16033954号-1 )