1

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

#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)

在这里,我用我的十六进制代码从红外遥控器开始切换

    {

      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

感谢

4

1 回答 1

0

尝试这个。

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

#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);



}
于 2018-09-02T05:23:58.493 回答