Lab_interaccio/2014/beltran/beltran.ino

184 lines
5.7 KiB
Arduino
Raw Permalink Normal View History

2025-02-25 21:29:42 +01:00
#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
}