CASE步进IR遥控器和Arduino

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CASE步进IR遥控器和Arduino相关的知识,希望对你有一定的参考价值。

这是我的代码,我想用IR遥控器控制步进器。我的代码工作正常,但我想知道如何在远程按钮上继续我的操作。当我按住按钮并且我不知道回忆起我的上一个功能时,十六进制代码是不同的。

#include <boarddefs.h>
#include <ir_Lego_PF_BitStreamEncoder.h>
#include <IRremote.h>
#include <IRremoteInt.h>



#include <Stepper.h>
int dir;
int receiver = 6; // Signal Pin of IR receiver to Arduino Digital Pin 6
IRrecv irrecv(receiver);    // create instance of 'irrecv'
decode_results results;     // create instance of 'decode_results'
const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
// for your motor

// Ici c'est la nouvelle séquence que j'ai trouvé pour faire fonctionné le moteur (KP4M2) correctement avec le connecteur.
// Reste à mettre dans le bon ordre
Stepper myStepper(stepsPerRevolution, 2, 3, 4, 5);

void setup() {
  irrecv.enableIRIn(); // Start the receiver
  // set the speed at 60 rpm:
  myStepper.setSpeed(100);
  // initialize the serial port:
  Serial.begin(9600);
}


void loop() {

  if (irrecv.decode(&results)) // have we received an IR signal?

  {
    switch (results.value)

在这里,我用IR遥控器的HEX代码开始切换

    {

      case 0xB4B49A65:
        //myStepper.step(stepsPerRevolution);//counter clockwise rotation
        //break;
        VrDroite();
        break;

      case 0xB4B45AA5:
        //myStepper.step(-stepsPerRevolution);//counter clockwise rotation
        //break;
        VrGauche();
      case 0xB4B41AE5:
        //myStepper.step(-stepsPerRevolution/10);//counter clockwise rotation
        //break;
        VrMicro();

    }

    irrecv.resume(); // receive the next value
    Serial.println(results.value, HEX);
  }

}

使用函数调用操作

void VrDroite() {


  myStepper.step(+100);


}
void VrGauche() {
  myStepper.step(-stepsPerRevolution);//counter clockwise rotation

}
void VrMicro() {
  myStepper.step(stepsPerRevolution / 10); //counter clockwise rotation

}
void VrNone() {



  myStepper.step(0);



}enter code here

谢谢

答案

试试这个。

这将记住你的最后一次按键。如果当前按键是“保持”,它将运行与最后一次按键相同的功能

#include <boarddefs.h>
#include <ir_Lego_PF_BitStreamEncoder.h>
#include <IRremote.h>
#include <IRremoteInt.h>



#include <Stepper.h>
int dir;
int receiver = 6; // Signal Pin of IR receiver to Arduino Digital Pin 6
IRrecv irrecv(receiver);    // create instance of 'irrecv'
decode_results results;     // create instance of 'decode_results'

// last keypress value
unsigned long prev_result_value = 0;
// this key press value
unsigned long current_result_value;


const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
// for your motor

// Ici c'est la nouvelle séquence que j'ai trouvé pour faire fonctionné le moteur (KP4M2) correctement avec le connecteur.
// Reste à mettre dans le bon ordre
Stepper myStepper(stepsPerRevolution, 2, 3, 4, 5);

void setup() {
  irrecv.enableIRIn(); // Start the receiver
  // set the speed at 60 rpm:
  myStepper.setSpeed(100);
  // initialize the serial port:
  Serial.begin(9600);
}


void loop() {

  if (irrecv.decode(&results)) { // have we received an IR signal?

    current_result_value = results.value; // store the result
    if (!prev_result_value)
        prev_results_value = current_result_value; // first time through only.

    if (results.value == HOLD_CODE) // is this a hold code?
        current_results_value = rev_results_value; // make the current result the same as the last keypress.

    //switch (results.value) {
    switch (current_results_value) {

      case 0xB4B49A65:
        //myStepper.step(stepsPerRevolution);//counter clockwise rotation
        //break;
        VrDroite();
        prev_results_value = current_results_value;
        break;

      case 0xB4B45AA5:
        //myStepper.step(-stepsPerRevolution);//counter clockwise rotation
        //break;
        VrGauche();
        prev_results_value = current_results_value;
      case 0xB4B41AE5:
        //myStepper.step(-stepsPerRevolution/10);//counter clockwise rotation
        //break;
        VrMicro();
        prev_results_value = current_results_value;


    }

    irrecv.resume(); // receive the next value
    Serial.println(results.value, HEX);
    Serial.println(current_results_value, HEX);
    Serial.println(prev_results_value, HEX);
  }

}

void VrDroite() {


  myStepper.step(+100);


}
void VrGauche() {
  myStepper.step(-stepsPerRevolution);//counter clockwise rotation

}
void VrMicro() {
  myStepper.step(stepsPerRevolution / 10); //counter clockwise rotation

}
void VrNone() {



  myStepper.step(0);



}

以上是关于CASE步进IR遥控器和Arduino的主要内容,如果未能解决你的问题,请参考以下文章

Arduino伺服和红外遥控器

arduino遥控怎么匹配

IR(红外遥控)基本原理

IR(红外遥控)基本原理

IR(红外遥控)基本原理

Proteus仿真Arduino UNO利用Stepper库实现uln2003驱动步进电机转动