Помощь в дописание программы

AZ7
Offline
Зарегистрирован: 17.01.2013

Привет всем! Вопрос вот в чем, я пишу скетч для управления реле-модулей. Мне нужно чтобы можно было реле управлять с помощью символов (например, "*"вкл(ON) или "1"выкл(OFF)) в терминале. Вот начало скетча, дальше не знаю что делать:

#define RELAY_ON 0
#define RELAY_OFF 1

#define Relay_1 3
#define Relay_2 4
#define Relay_3 5

void setup()
{
digitalWrite(Relay_1, RELAY_OFF);
digitalWrite(Relay_2, RELAY_OFF);
digitalWrite(Relay_3, RELAY_OFF);

pinMode(Relay_1, OUTPUT);
pinMode(Relay_2, OUTPUT);
pinMode(Relay_3, OUTPUT);
}

void loop()
{
digitalWrite(Relay_1, RELAY_ON);
delay(1000);
digitalWrite(Relay_2, RELAY_ON);
delay(1000);
digitalWrite(Relay_3, RELAY_ON);
delay(1000);

digitalWrite(Relay_1, RELAY_OFF);
delay(1000);
digitalWrite(Relay_2, RELAY_OFF);
delay(1000);
digitalWrite(Relay_3, RELAY_OFF);
delay(1000);
}

Вот схема если конечно потребуется:


 

maksim
Offline
Зарегистрирован: 12.02.2012

А дальше нужно воспользоваться поиском по сайту. И почитать хотя бы тут Serial.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013
#define RELAY_ON 0
#define RELAY_OFF 1

#define Relay_1 3
#define Relay_2 4
#define Relay_3 5

void setup()
{
	Serial.begin(9600);
	pinMode(Relay_1, OUTPUT);
	pinMode(Relay_2, OUTPUT);
	pinMode(Relay_3, OUTPUT);

	digitalWrite(Relay_1, RELAY_OFF);
	digitalWrite(Relay_2, RELAY_OFF);
	digitalWrite(Relay_3, RELAY_OFF);
}

void loop()
{
	if(Serial.available() > 0){
		String cmd = Serial.read();
		if(cmd.indexOf("*") != -1){
			digitalWrite(Relay_1, RELAY_ON);
			delay(1000);
			digitalWrite(Relay_2, RELAY_ON);
			delay(1000);
			digitalWrite(Relay_3, RELAY_ON);
			delay(1000);
		}else if (cmd.indexOf("1") != -1){
			digitalWrite(Relay_1, RELAY_OFF);
			delay(1000);
			digitalWrite(Relay_2, RELAY_OFF);
			delay(1000);
			digitalWrite(Relay_3, RELAY_OFF);
			delay(1000);
		}
	}
}

Я сегодня щедрый на быдлокод....

maksim
Offline
Зарегистрирован: 12.02.2012

В данном случае хватило бы символа:

char cmd = Serial.read();
if(cmd == '*'){
....
....
else if (cmd == '1'){

 

maksim
Offline
Зарегистрирован: 12.02.2012

Ну а если поместить номера выводов в массив, то можно будет все делать в циклах:

#define RELAY_ON 0
#define RELAY_OFF 1

#define Relay_1 3
#define Relay_2 4
#define Relay_3 5

byte pins[] = {Relay_1, Relay_2, Relay_3};

void setup()
{
  Serial.begin(9600);
  for(byte i = 0; i < 3; i++) pinMode(pins[i], OUTPUT);
  for(byte i = 0; i < 3; i++) digitalWrite(pins[i], RELAY_OFF);
}

void loop()
{
  if(Serial.available() > 0)
  {
    char cmd = Serial.read();
    if(cmd == '*') for(byte i = 0; i < 3; i++)
    {
      digitalWrite(pins[i], RELAY_ON);
      delay(1000);
    }
    else if(cmd == '1') for(byte i = 0; i < 3; i++)
    {
      digitalWrite(pins[i], RELAY_OFF);
      delay(1000);
    }
  }
}