Помощь в дописание программы
- Войдите на сайт для отправки комментариев
Привет всем! Вопрос вот в чем, я пишу скетч для управления реле-модулей. Мне нужно чтобы можно было реле управлять с помощью символов (например, "*"вкл(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);
}
Вот схема если конечно потребуется:

А дальше нужно воспользоваться поиском по сайту. И почитать хотя бы тут Serial.
#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); } } }Я сегодня щедрый на быдлокод....
В данном случае хватило бы символа:
char cmd = Serial.read(); if(cmd == '*'){ .... .... else if (cmd == '1'){Ну а если поместить номера выводов в массив, то можно будет все делать в циклах:
#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); } } }