#include "IRremote.h" const int relay[12] = {9, 8, 7, 6, 5, 4, 3, 2, 14, 15, 16, 17}; const int power_motor[6] = { relay[0], relay[2], relay[4], relay[6], relay[8], relay[10]}; const int turn_motor[6] = { relay[1], relay[3], relay[5], relay[7], relay[9], relay[11]}; const int fc[6] = { 31, 33, 35, 37, 39, 41}; #define PIN_IR 53 #define UP 0 #define DOWN 1 #define STOP 2 // inicializa la libreria de recepcion y envio de datos por el infrarrojo IRrecv irrecv(PIN_IR); //Solo para el pin digital 3!!! decode_results results; void setup() { Serial.begin(115200); // initialize digital pin 13 as an output. for (int i=0; i<12; i++) pinMode(relay[i], OUTPUT); for (int i=0; i<6; i++) pinMode(fc[i], INPUT); for (int i=0; i<6; i++) digitalWrite(power_motor[i], LOW); irrecv.enableIRIn(); // Start the receiver IR // digitalWrite(R0, HIGH); // turn the LED on (HIGH is the voltage level) // delay(1000); // digitalWrite(R0, LOW); // turn the LED on (HIGH is the voltage level) } int state_ant[6] = {STOP, STOP, STOP, STOP, STOP, STOP}; void motorIR(int number, int state, unsigned long time) { if (state==STOP) { digitalWrite(power_motor[number], LOW); Serial.println("STOP"); } else { if (state_ant[number]!=state) { digitalWrite(power_motor[number], LOW); delay(1000); } state_ant[number] = state; digitalWrite(turn_motor[number], state); digitalWrite(power_motor[number], HIGH); delay(1000); // if ((state==UP)&&(!digitalRead(fc[number]))) Serial.println("The motor is locked"); // else // { // if (state==UP) Serial.println("UP"); // else Serial.println("DOWN"); // digitalWrite(turn_motor[number], state); // digitalWrite(power_motor[number], HIGH); // unsigned long time_temp=millis(); // if (state==DOWN) // { // while ((millis()-time_temp)<=time); // Serial.print("DOWN in "); // Serial.print(millis()-time_temp); // Serial.println("ms"); // } // else // { // while (((millis()-time_temp)<=time)&&(digitalRead(fc[number]))); // Serial.print("UP in "); // Serial.print(millis()-time_temp); // Serial.println("ms"); // } // } digitalWrite(power_motor[number], LOW); } } void motor(int number, int state, unsigned long time) { if (state==STOP) { digitalWrite(power_motor[number], LOW); Serial.println("STOP"); } else { if ((state==UP)&&(!digitalRead(fc[number]))) Serial.println("The motor is locked"); else { if (state==UP) Serial.println("UP"); else Serial.println("DOWN"); digitalWrite(turn_motor[number], state); digitalWrite(power_motor[number], HIGH); unsigned long time_temp=millis(); if (state==DOWN) { while ((millis()-time_temp)<=time); Serial.print("DOWN in "); Serial.print(millis()-time_temp); Serial.println("ms"); } else { while (((millis()-time_temp)<=time)&&(digitalRead(fc[number]))); Serial.print("UP in "); Serial.print(millis()-time_temp); Serial.println("ms"); } } digitalWrite(power_motor[number], LOW); } } // the loop function runs over and over again forever int motor_act = 1; void loop() { if (irrecv.decode(&results)) { // if (results.value!=0xFFFFFFFF) // { // Serial.println(results.value, HEX); if ((results.value==0x801)||(results.value==0x1)) { Serial.println("Motor 1"); motor_act = 0; } else if ((results.value==0x802)||(results.value==0x2)) { Serial.println("Motor 2"); motor_act = 1; } else if ((results.value==0x803)||(results.value==0x3)) { Serial.println("Motor 3"); motor_act = 2; } else if ((results.value==0x804)||(results.value==0x4)) { Serial.println("Motor 4"); motor_act = 3; } else if ((results.value==0x805)||(results.value==0x5)) { Serial.println("Motor 5"); motor_act = 4; } else if ((results.value==0x806)||(results.value==0x6)) { Serial.println("Motor 6"); motor_act = 5; } else if ((results.value==0x820)||(results.value==0x20)) { Serial.println("UP"); motorIR(motor_act, UP, 0); } else if ((results.value==0x821)||(results.value==0x21)) { Serial.println("DOWN"); motorIR(motor_act, DOWN, 0); } // } irrecv.resume(); // Receive the next value } // digitalWrite(power_motor[0], HIGH); // motor(0, UP, 2000); // motor(0, DOWN, 2000); // digitalWrite(R0, HIGH); // turn the LED on (HIGH is the voltage level) // delay(1000); // digitalWrite(R1, HIGH); // turn the LED on (HIGH is the voltage level) // digitalWrite(R0, LOW); // turn the LED on (HIGH is the voltage level) // delay(2000); // // digitalWrite(R0, HIGH); // turn the LED on (HIGH is the voltage level) // delay(1000); // digitalWrite(R1, LOW); // turn the LED off by making the voltage LOW // digitalWrite(R0, LOW); // turn the LED on (HIGH is the voltage level) // delay(2000); // wait for a second }