极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10559|回复: 3

红外按键0-9控制步进电机的转动圈数(0-9)圈,并且数码管显示0-9!

[复制链接]
发表于 2014-4-11 19:16:40 | 显示全部楼层 |阅读模式
各位大神帮忙看看啊,用红外按键0-9控制步进电机的转动圈数(0-9)圈,并且数码管显示0-9!现在的问题是,遥控器按键0-9按键要按下很多次,数码管才会显示,但是步进电机不转,只是在嗡嗡作响!
  1. #include<IRremote.h>
  2. #include <Stepper.h>
  3. #define STEPS 400
  4. //为了适应变化,定义变量stepPin1,stepPin2,stepPin3,stepPin4作为控制步进电机的端口变量

  5. int stepPin1=1;
  6. int stepPin2=3;
  7. int stepPin3=12;
  8. int stepPin4=13;
  9. Stepper stepper(STEPS,stepPin1,stepPin2,stepPin3,stepPin4);
  10. int intstep=2000;//对于这个步进电机,这正好是1圈
  11.   byte seven_seg_digits[10][8] = {    //二维数组的用法,好好理解啊
  12.   { 0,1,1,1,1,0,1,1 },  // = 0  
  13.   { 0,1,1,0,0,0,0,0 },  // = 1  
  14.   { 0,0,1,1,0,1,1,1 },  // = 2  
  15.   { 0,1,1,1,0,1,0,1 },  // = 3  
  16.   { 0,1,1,0,1,1,0,0 },  // = 4
  17.   { 0,1,0,1,1,1,0,1 },  // = 5
  18.   { 0,1,0,1,1,1,1,1 },  // = 6  
  19.   { 0,1,1,1,0,0,0,0 },  // = 7  
  20.   { 0,1,1,1,1,1,1,1 },  // = 8  
  21.   { 0,1,1,1,1,1,0,1 }   // = 9  
  22.   };
  23.   
  24. //int RECV_PIN = 11;   //红外线接收器OUTPUT端接在pin 11  
  25. //此处的11脚已近被数码管占用,改为pin2脚
  26. int RECV_PIN = 2;  
  27. IRrecv irrecv(RECV_PIN);   // 定义IRrecv 对象来接收红外线信号
  28. decode_results results;   //解码结果放在decode_results构造的对象results里
  29. void irdisplay(unsigned long value)  //  按下按键后,显示本人遥控对应的按键
  30. {
  31.    switch(value){                     //判定按下的是哪个按键
  32. //    case 0x97483BFB:Serial.println("-");break;
  33. //    case 0xF0C41643:Serial.println("C");break;
  34. //    case 0xD7E84B1B:Serial.println("+");break;
  35. //    case 0xF076C13B:Serial.println("PREV");break;
  36. //    case 0xE5CFBD7F:Serial.println("NEXT");break;
  37. //    case 0xA3C8EDDB:Serial.println("PLAY/PAUSE");break;
  38. //    case 0xEE886D7F:Serial.println("MENU");break;
  39. //    case 0x52A3D41F:Serial.println("TEST");break;
  40. //    case 0x20FE4DBB:Serial.println("return");break;
  41. //    case 0xE318261B:Serial.println("close");break;  //注意此处有中文串口监视时有乱码
  42.     case 0xC101E57B:Serial.println("0");sevenSegWrite(0);stepper.step(0*intstep);break;     //0
  43.     case 0x9716BE3F:Serial.println("1");sevenSegWrite(1);stepper.step(1*intstep);break;     //1
  44.     case 0x3D9AE3F7:Serial.println("2");sevenSegWrite(2);stepper.step(2*intstep);break;     //2
  45.     case 0x6182021B:Serial.println("3");sevenSegWrite(3);stepper.step(3*intstep);break;      //3
  46.     case 0x8C22657B:Serial.println("4");sevenSegWrite(4);stepper.step(4*intstep);break;     //4
  47.     case 0x488F3CBB:Serial.println("5");sevenSegWrite(5);stepper.step(5*intstep);break;     //5
  48.     case 0x449E79F :Serial.println("6");sevenSegWrite(6);stepper.step(6*intstep);break;      //6
  49.     case 0x32C6FDF7:Serial.println("7");sevenSegWrite(7);stepper.step(7*intstep);break;      //7
  50.     case 0x1BC0157B:Serial.println("8");sevenSegWrite(8);stepper.step(8*intstep);break;      //8
  51.     case 0x3EC3FC1B:Serial.println("9");sevenSegWrite(9);stepper.step(9*intstep);break;    //9
  52.   }
  53. }
  54. void setup()
  55. {
  56.   pinMode(4, OUTPUT);   
  57.   pinMode(5, OUTPUT);
  58.   pinMode(6, OUTPUT);
  59.   pinMode(7, OUTPUT);
  60.   pinMode(8, OUTPUT);
  61.   pinMode(9, OUTPUT);
  62.   pinMode(10, OUTPUT);
  63.   pinMode(11, OUTPUT);
  64.   Serial.begin(9600);
  65.   irrecv.enableIRIn();          //启动红外解码
  66.   stepper.setSpeed(60);
  67. }
  68.   void sevenSegWrite(byte digit)   //数码管显示代码
  69.   {  //设置通过数组控制引脚开关,顺序为4-11号端口26 ,   seven_seg_digits[10][8]
  70.       byte pin = 4;
  71.       for (byte segCount = 0; segCount < 8; ++segCount)
  72.         {
  73.               digitalWrite(pin, seven_seg_digits[digit][segCount]);
  74.                ++pin;  //数码管的段码与引脚一一对应
  75.         }
  76.    }
  77. void loop() {
  78.   if (irrecv.decode(&results))  
  79.     {        
  80.         //解码成功,收到一组红外线信号
  81.         irdisplay(results.value);
  82.         irrecv.resume();
  83.     }
  84.      delay(600);
  85. }
复制代码
回复

使用道具 举报

发表于 2014-4-12 09:44:35 | 显示全部楼层
电机不转可能是接线不对,
红外可能是重复码的问题,要加个if (results.value!=(-1))来过滤。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-12 18:01:35 | 显示全部楼层
fish6823 发表于 2014-4-12 09:44
电机不转可能是接线不对,
红外可能是重复码的问题,要加个if (results.value!=(-1))来过滤。

if (results.value!=(-1))这句语句加到哪呢
回复 支持 反对

使用道具 举报

发表于 2014-4-12 20:21:33 | 显示全部楼层
宁静以致远 发表于 2014-4-12 18:01
if (results.value!=(-1))这句语句加到哪呢

加在  if (irrecv.decode(&results))  后面,也就是不等于"FFFFFFFF"才斌值.
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 15:08 , Processed in 0.056665 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表