198 lines
5.2 KiB
Arduino
198 lines
5.2 KiB
Arduino
|
#define UP 0
|
||
|
#define DOWN 1
|
||
|
#define STOP 2
|
||
|
|
||
|
#define DEBUG false
|
||
|
|
||
|
int G[5] = { 33, 31, 29, 27, 25};
|
||
|
//int fc[5] = {A2, A1, A0, 13, 12 };
|
||
|
int button[3] = { A5, A4, A3};
|
||
|
int rele_up[3] = { 11, 9, 7 };
|
||
|
int rele_down[3] = { 10, 8, 6 };
|
||
|
|
||
|
|
||
|
void setup() {
|
||
|
Serial.begin(9600);
|
||
|
Serial1.begin(9600);
|
||
|
// for (int i = 0; i < 5; i++)
|
||
|
// {
|
||
|
// pinMode(fc[i], INPUT);
|
||
|
// digitalWrite(fc[i], HIGH);
|
||
|
// }
|
||
|
for (int i = 0; i < 3; i++)
|
||
|
{
|
||
|
pinMode(button[i], INPUT);
|
||
|
digitalWrite(button[i], HIGH);
|
||
|
}
|
||
|
for (int i = 0; i < 3; i++)
|
||
|
{
|
||
|
pinMode(rele_up[i], OUTPUT);
|
||
|
digitalWrite(rele_up[i], HIGH);
|
||
|
}
|
||
|
for (int i = 0; i < 3; i++)
|
||
|
{
|
||
|
pinMode(rele_down[i], OUTPUT);
|
||
|
digitalWrite(rele_down[i], HIGH);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int mode_ant[3] = { STOP, STOP, STOP};
|
||
|
unsigned long time_motor[3] = { 0, 0, 0 };
|
||
|
unsigned long time_final[3] = { 0, 0, 0 };
|
||
|
boolean flag_motor[3] = { 0, 0, 0 };
|
||
|
|
||
|
void motor(int num, int mode, unsigned long time)
|
||
|
{
|
||
|
if ((mode_ant[num]!=STOP)&&(mode!=STOP)&&(mode!=mode_ant[num]))
|
||
|
{
|
||
|
digitalWrite(rele_up[num], HIGH);
|
||
|
digitalWrite(rele_down[num], HIGH);
|
||
|
delay(1000);
|
||
|
}
|
||
|
if (mode==UP)
|
||
|
{
|
||
|
digitalWrite(rele_up[num], LOW);
|
||
|
digitalWrite(rele_down[num], HIGH);
|
||
|
}
|
||
|
else if (mode==DOWN)
|
||
|
{
|
||
|
digitalWrite(rele_up[num], HIGH);
|
||
|
digitalWrite(rele_down[num], LOW);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
digitalWrite(rele_up[num], HIGH);
|
||
|
digitalWrite(rele_down[num], HIGH);
|
||
|
}
|
||
|
if (time!=0)
|
||
|
{
|
||
|
time_final[num] = time;
|
||
|
time_motor[num] = millis();
|
||
|
flag_motor[num] = true;
|
||
|
#if DEBUG==true
|
||
|
Serial.print("Motor ");
|
||
|
Serial.print(num);
|
||
|
if (mode==UP) Serial.println(" UP");
|
||
|
else if (mode==DOWN) Serial.println(" DOWN");
|
||
|
else if (mode==STOP) Serial.println(" STOP");
|
||
|
#endif
|
||
|
}
|
||
|
else flag_motor[num] = false;
|
||
|
mode_ant[num] = mode;
|
||
|
}
|
||
|
|
||
|
int all_mode_ant = STOP;
|
||
|
|
||
|
void allmotors(int mode, unsigned long time)
|
||
|
{
|
||
|
if ((all_mode_ant!=STOP)&&(mode!=STOP)&&(mode!=all_mode_ant))
|
||
|
{
|
||
|
digitalWrite(rele_up[0], HIGH);
|
||
|
digitalWrite(rele_down[0], HIGH);
|
||
|
digitalWrite(rele_up[1], HIGH);
|
||
|
digitalWrite(rele_down[1], HIGH);
|
||
|
digitalWrite(rele_up[2], HIGH);
|
||
|
digitalWrite(rele_down[2], HIGH);
|
||
|
delay(1000);
|
||
|
}
|
||
|
if (mode==UP)
|
||
|
{
|
||
|
digitalWrite(rele_up[0], LOW);
|
||
|
digitalWrite(rele_down[0], HIGH);
|
||
|
digitalWrite(rele_up[1], LOW);
|
||
|
digitalWrite(rele_down[1], HIGH);
|
||
|
digitalWrite(rele_up[2], LOW);
|
||
|
digitalWrite(rele_down[2], HIGH);
|
||
|
}
|
||
|
else if (mode==DOWN)
|
||
|
{
|
||
|
digitalWrite(rele_up[0], HIGH);
|
||
|
digitalWrite(rele_down[0], LOW);
|
||
|
digitalWrite(rele_up[1], HIGH);
|
||
|
digitalWrite(rele_down[1], LOW);
|
||
|
digitalWrite(rele_up[2], HIGH);
|
||
|
digitalWrite(rele_down[2], LOW);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
digitalWrite(rele_up[0], HIGH);
|
||
|
digitalWrite(rele_down[0], HIGH);
|
||
|
digitalWrite(rele_up[1], HIGH);
|
||
|
digitalWrite(rele_down[1], HIGH);
|
||
|
digitalWrite(rele_up[2], HIGH);
|
||
|
digitalWrite(rele_down[2], HIGH);
|
||
|
}
|
||
|
all_mode_ant = mode;
|
||
|
}
|
||
|
|
||
|
void control()
|
||
|
{
|
||
|
while (flag_motor[0]||flag_motor[1]||flag_motor[2])
|
||
|
{
|
||
|
for (int i=0; i<3; i++)
|
||
|
{
|
||
|
if (flag_motor[i])
|
||
|
{
|
||
|
// Serial.print("Motor ");
|
||
|
// Serial.print(i);
|
||
|
// if (mode_ant[i]==UP) Serial.println(" UP");
|
||
|
// else if (mode_ant[i]==DOWN) Serial.println(" DOWN");
|
||
|
// else if (mode_ant[i]==STOP) Serial.println(" STOP");
|
||
|
|
||
|
if (((millis()-time_motor[i]) >= time_final[i])||((!digitalRead(button[i]))&&(mode_ant[i]==UP)))
|
||
|
{
|
||
|
motor(i,STOP,0);
|
||
|
#if DEBUG==true
|
||
|
Serial.print("Motor ");
|
||
|
Serial.print(i);
|
||
|
Serial.print(" STOP ");
|
||
|
Serial.println(millis()-time_motor[i]);
|
||
|
#endif
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void loop() {
|
||
|
|
||
|
//if (!digitalRead(fc[2])) motor(0, UP, 100);
|
||
|
//else if (!digitalRead(fc[1])) motor(0, DOWN, 100);
|
||
|
//else if (!digitalRead(fc[0])) motor(0, STOP, 100);
|
||
|
|
||
|
//if (!digitalRead(fc[2])) motor(1, UP, 100);
|
||
|
//else if (!digitalRead(fc[1])) motor(1, DOWN, 100);
|
||
|
//else if (!digitalRead(fc[0])) motor(1, STOP, 100);
|
||
|
|
||
|
//if (!digitalRead(fc[2])) motor(2, UP, 100);
|
||
|
//else if (!digitalRead(fc[1])) motor(2, DOWN, 100);
|
||
|
//else if (!digitalRead(fc[0])) motor(2, STOP, 100);
|
||
|
|
||
|
if (!digitalRead(button[2])) allmotors(UP, 100);
|
||
|
else if (!digitalRead(button[1])) allmotors(DOWN, 100);
|
||
|
else if (!digitalRead(button[0])) allmotors(STOP, 100);
|
||
|
|
||
|
|
||
|
// motor(0, UP, 100);
|
||
|
// motor(1, UP, 100);
|
||
|
// motor(2, UP, 100);
|
||
|
// delay(4000);
|
||
|
// motor(0, DOWN, 100);
|
||
|
// motor(1, DOWN, 100);
|
||
|
// motor(2, DOWN, 100);
|
||
|
// delay(4000);
|
||
|
// motor(0, STOP, 0);
|
||
|
// delay(1000);
|
||
|
// motor(0, DOWN, 0);
|
||
|
// delay(1000);
|
||
|
|
||
|
// control();
|
||
|
// delay(1000);
|
||
|
|
||
|
// if (Serial.available())
|
||
|
// Serial1.write(Serial.read());
|
||
|
// if (Serial1.available())
|
||
|
// Serial.write(Serial1.read());
|
||
|
|
||
|
}
|