#include // motor data //const boolean data[2]={0,1}; const int data[2]={0,255}; // primary IR control const unsigned long KEYUP = 0xFF22DD; const unsigned long KEYDN = 0xFF12ED; const unsigned long KEYUPCODE = 0x20DFE21D; const unsigned long KEYOKCODE = 0x20DFD22D; const unsigned long KEYDOWNCODE = 0x20DF12ED; const unsigned long KEYPOWER = 0x20DF807F; bool bEnableMotor; // enable flag int i_step, // counter s_step; // speed unsigned long last_ir; // cycle restriction timestamps unsigned long last_step; IRrecv irrecv(2); // CIR code receiver decode_results results; void setup(){ // initialization bEnableMotor=false; pinMode(13,OUTPUT); // flight ON LED pinMode(9,OUTPUT); // left wing pinMode(10,OUTPUT); // right wing last_ir=millis(); last_step=millis(); i_step=0; s_step=1000; // speed irrecv.enableIRIn(); } // init routine ends void loop() { // duty cycle if(irrecv.decode(&results)){ // check whether there is CIR data if(millis() - last_ir>250){ // restrict receiver time switch (results.value){ // mode control case KEYUPCODE: bEnableMotor=true; // engage digitalWrite(13,1); break; case KEYDOWNCODE: case KEYOKCODE: bEnableMotor=false; // halt digitalWrite(13,0); analogWrite(9,0); analogWrite(10,0); break; } } // IR receiver time restriction ends last_ir=millis(); // update timer irrecv.resume(); // IR proceed } if(bEnableMotor){ // the trigger is on, do job + time shit //= output ============================== // digitalWrite(13,data[i_step]); // digitalWrite(12,data[i_step]); analogWrite(9 ,data[i_step]); analogWrite(10,data[i_step]); //======================================= if(millis()-last_step>s_step){ // update counter i_step++; if(i_step>1) i_step=0; last_step=millis(); // update timer } } // trigger condition ends } // duty cycle ends