184 lines
5.7 KiB
Arduino
184 lines
5.7 KiB
Arduino
|
#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
|
||
|
|
||
|
}
|