Оформи код соответствующим тэгом, см. Правила
Доброго времени суток!
Совсем недолго в теме ардуино и программирования в целом, поэтому мой вопрос может показаться очень глупым, но необходим совет и помощь в решении проблемы.
Делаю проект, в котором ардуино должен управлять больше 10 реле, интерфейс на processing. Каждый шаг согласно видео с "Заметки ардуинщика" по написанию интерфейса для ардуино. В скетче используется оператор switch...case. 10 реле ( case 0-9) отрабатывают штатно, не забивают друг друга. При срабатывании case 10 и 11 невозможно полностью управлять реле из 0-9, а именно - например, при включении реле из case 10 остальные тоже можно включить, но выключить их уже не получается, пока не будет команды на выключение реле из case 10.
Скетч из IDE
#include "Parser.h"
int relePin1 = 2;
int relePin2 = 3;
int relePin3 = 4;
int relePin4 = 5;
void setup() {
Serial.begin(57600);
pinMode(relePin1, OUTPUT);
pinMode(relePin2, OUTPUT);
pinMode(relePin3, OUTPUT);
pinMode(relePin4, OUTPUT);
}
void loop() {
if (Serial.available() > 0){
char buf[50];
Serial.readBytesUntil(';', buf, 50);
Parser data(buf, ',');
int ints[15];
data.parseInts(ints);
switch (ints[0]) {
case 0: digitalWrite(relePin1, ints[1]);
break;
case 1: digitalWrite(relePin2, ints[1]);
break;
case 2: digitalWrite(relePin3, ints[1]);
break;
case 3: digitalWrite(relePin4, ints[1]);
break;
case 4: digitalWrite(13, ints[1]);
break;
case 5: digitalWrite(13, ints[1]);
break;
case 6: digitalWrite(13, ints[1]);
break;
case 7: digitalWrite(13, ints[1]);
break;
case 8: digitalWrite(13, ints[1]);
break;
case 9: digitalWrite(13, ints[1]);
break;
case 10: digitalWrite(13, ints[1]);
break;
case 11: digitalWrite(13, ints[1]);
break;
}
}
Кусок кода из processing и весь код в целом повторяет код из видео.
void toggle1(int val) {
serial.write("0,"+ val +";");
}
void toggle11(int val) {
serial.write("10,"+ val +";");
}
Заранее огромное спасибо за помощь!
Совсем недолго в теме ардуино и программирования в целом, поэтому мой вопрос может показаться очень глупым, но необходим совет и помощь в решении проблемы.
Делаю проект, в котором ардуино должен управлять больше 10 реле, интерфейс на processing. Каждый шаг согласно видео с "Заметки ардуинщика" по написанию интерфейса для ардуино. В скетче используется оператор switch...case. 10 реле ( case 0-9) отрабатывают штатно, не забивают друг друга. При срабатывании case 10 и 11 невозможно полностью управлять реле из 0-9, а именно - например, при включении реле из case 10 остальные тоже можно включить, но выключить их уже не получается, пока не будет команды на выключение реле из case 10.
Скетч из IDE
#include "Parser.h"
int relePin1 = 2;
int relePin2 = 3;
int relePin3 = 4;
int relePin4 = 5;
void setup() {
Serial.begin(57600);
pinMode(relePin1, OUTPUT);
pinMode(relePin2, OUTPUT);
pinMode(relePin3, OUTPUT);
pinMode(relePin4, OUTPUT);
}
void loop() {
if (Serial.available() > 0){
char buf[50];
Serial.readBytesUntil(';', buf, 50);
Parser data(buf, ',');
int ints[15];
data.parseInts(ints);
switch (ints[0]) {
case 0: digitalWrite(relePin1, ints[1]);
break;
case 1: digitalWrite(relePin2, ints[1]);
break;
case 2: digitalWrite(relePin3, ints[1]);
break;
case 3: digitalWrite(relePin4, ints[1]);
break;
case 4: digitalWrite(13, ints[1]);
break;
case 5: digitalWrite(13, ints[1]);
break;
case 6: digitalWrite(13, ints[1]);
break;
case 7: digitalWrite(13, ints[1]);
break;
case 8: digitalWrite(13, ints[1]);
break;
case 9: digitalWrite(13, ints[1]);
break;
case 10: digitalWrite(13, ints[1]);
break;
case 11: digitalWrite(13, ints[1]);
break;
}
}
Кусок кода из processing и весь код в целом повторяет код из видео.
void toggle1(int val) {
serial.write("0,"+ val +";");
}
void toggle11(int val) {
serial.write("10,"+ val +";");
}
Заранее огромное спасибо за помощь!