各位大神帮忙看看啊,用红外按键0-9控制步进电机的转动圈数(0-9)圈,并且数码管显示0-9!现在的问题是,遥控器按键0-9按键要按下很多次,数码管才会显示,但是步进电机不转,只是在嗡嗡作响!- #include<IRremote.h>
- #include <Stepper.h>
- #define STEPS 400
- //为了适应变化,定义变量stepPin1,stepPin2,stepPin3,stepPin4作为控制步进电机的端口变量
- int stepPin1=1;
- int stepPin2=3;
- int stepPin3=12;
- int stepPin4=13;
- Stepper stepper(STEPS,stepPin1,stepPin2,stepPin3,stepPin4);
- int intstep=2000;//对于这个步进电机,这正好是1圈
- byte seven_seg_digits[10][8] = { //二维数组的用法,好好理解啊
- { 0,1,1,1,1,0,1,1 }, // = 0
- { 0,1,1,0,0,0,0,0 }, // = 1
- { 0,0,1,1,0,1,1,1 }, // = 2
- { 0,1,1,1,0,1,0,1 }, // = 3
- { 0,1,1,0,1,1,0,0 }, // = 4
- { 0,1,0,1,1,1,0,1 }, // = 5
- { 0,1,0,1,1,1,1,1 }, // = 6
- { 0,1,1,1,0,0,0,0 }, // = 7
- { 0,1,1,1,1,1,1,1 }, // = 8
- { 0,1,1,1,1,1,0,1 } // = 9
- };
-
- //int RECV_PIN = 11; //红外线接收器OUTPUT端接在pin 11
- //此处的11脚已近被数码管占用,改为pin2脚
- int RECV_PIN = 2;
- IRrecv irrecv(RECV_PIN); // 定义IRrecv 对象来接收红外线信号
- decode_results results; //解码结果放在decode_results构造的对象results里
- void irdisplay(unsigned long value) // 按下按键后,显示本人遥控对应的按键
- {
- switch(value){ //判定按下的是哪个按键
- // case 0x97483BFB:Serial.println("-");break;
- // case 0xF0C41643:Serial.println("C");break;
- // case 0xD7E84B1B:Serial.println("+");break;
- // case 0xF076C13B:Serial.println("PREV");break;
- // case 0xE5CFBD7F:Serial.println("NEXT");break;
- // case 0xA3C8EDDB:Serial.println("PLAY/PAUSE");break;
- // case 0xEE886D7F:Serial.println("MENU");break;
- // case 0x52A3D41F:Serial.println("TEST");break;
- // case 0x20FE4DBB:Serial.println("return");break;
- // case 0xE318261B:Serial.println("close");break; //注意此处有中文串口监视时有乱码
- case 0xC101E57B:Serial.println("0");sevenSegWrite(0);stepper.step(0*intstep);break; //0
- case 0x9716BE3F:Serial.println("1");sevenSegWrite(1);stepper.step(1*intstep);break; //1
- case 0x3D9AE3F7:Serial.println("2");sevenSegWrite(2);stepper.step(2*intstep);break; //2
- case 0x6182021B:Serial.println("3");sevenSegWrite(3);stepper.step(3*intstep);break; //3
- case 0x8C22657B:Serial.println("4");sevenSegWrite(4);stepper.step(4*intstep);break; //4
- case 0x488F3CBB:Serial.println("5");sevenSegWrite(5);stepper.step(5*intstep);break; //5
- case 0x449E79F :Serial.println("6");sevenSegWrite(6);stepper.step(6*intstep);break; //6
- case 0x32C6FDF7:Serial.println("7");sevenSegWrite(7);stepper.step(7*intstep);break; //7
- case 0x1BC0157B:Serial.println("8");sevenSegWrite(8);stepper.step(8*intstep);break; //8
- case 0x3EC3FC1B:Serial.println("9");sevenSegWrite(9);stepper.step(9*intstep);break; //9
- }
- }
- void setup()
- {
- pinMode(4, OUTPUT);
- pinMode(5, OUTPUT);
- pinMode(6, OUTPUT);
- pinMode(7, OUTPUT);
- pinMode(8, OUTPUT);
- pinMode(9, OUTPUT);
- pinMode(10, OUTPUT);
- pinMode(11, OUTPUT);
- Serial.begin(9600);
- irrecv.enableIRIn(); //启动红外解码
- stepper.setSpeed(60);
- }
- void sevenSegWrite(byte digit) //数码管显示代码
- { //设置通过数组控制引脚开关,顺序为4-11号端口26 , seven_seg_digits[10][8]
- byte pin = 4;
- for (byte segCount = 0; segCount < 8; ++segCount)
- {
- digitalWrite(pin, seven_seg_digits[digit][segCount]);
- ++pin; //数码管的段码与引脚一一对应
- }
- }
- void loop() {
- if (irrecv.decode(&results))
- {
- //解码成功,收到一组红外线信号
- irdisplay(results.value);
- irrecv.resume();
- }
- delay(600);
- }
复制代码 |