Отдельно от последовательного порта для digitalWrite()
Это мой текущий код (Arduino Mega 2560):
#define p1 2
#define p2 3
void setup() {
pinMode(p1, OUTPUT);
pinMode(p2, OUTPUT);
Serial.println("ARDUINO : CONNECTED");
}
void loop() {
if (Serial.available()) {
String state = Serial.readString();
if (state.startsWith("LED1ON")) {
digitalWrite(p1, HIGH);
}
if (state.startsWith("LED1OFF")) {
digitalWrite(p1, LOW);
}
if (state.startsWith("LED2ON")) {
digitalWrite(p2, HIGH);
}
if (state.startsWith("LED2OFF")) {
digitalWrite(p2, HIGH);
}
// ... и светодиод следующего состояния
}
}
как я могу сделать, чтобы для нескольких последовательных входов использовался разделитель(";")? например: LED1ON;LED2OFF
ожидаемое: однократная команда (LED1ON;LED2OFF) множество условий (светодиод включается, светодиод 2 выключается)
пожалуйста, спасибо
@Ganang Wahyu W, 👍1
Обсуждение3 ответа
Рассмотрите возможность рефакторинга вашего кода таким образом, чтобы вы читали строки, а затем выполняли поиск по символам строки, копируя каждый символ в новую строку, пока не найдете точку с запятой. В этом случае не копируйте точку с запятой. Вместо этого выполните существующий оператор "if" операторы включения/выключения светодиодов в зависимости от содержимого новой строки. Когда закончите, сотрите новую строку, вернитесь назад и продолжайте копировать символы в новую строку до следующей точки с запятой. Если данных для копирования больше нет, читайте дополнительные данные, пока данные не станут недоступны.
В C++ существует более быстрый способ анализа строки на основе заданного разграничивающего символа. Но это отвлекает вас от того, что происходит на самом деле. Вероятно, это то, что изложено в этом ответе., @st2000
Возможно, вам захочется посетить справку по библиотеке Arduino, чтобы узнать, что возможно и как ее использовать. .
В вашем случае вас интересует метод readStringUntil()
.
Чтение, понимание, экспериментирование, отладка и завершение оставляются пользователю в качестве упражнения.
readString читает из Serial, пока не истечет время ожидания. Это означает, что он может не дойти или выйти за пределы как конца строки (если он есть), так и точки с запятой.
Я предлагаю читать в буфер char
(скажем, длиной 30 байт) до тех пор, пока не будет достигнута новая строка или точка с запятой. Затем завершите буфер с помощью 0x00 (чтобы сделать его правильной строкой «C»), а затем выполните простое сравнение строк (strcmp
).
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как получить уникальный идентификатор для всех плат Arduino?
- Как очистить буфер FIFO на MPU6050?
- Элегантное решение для обновления содержимого TFT-дисплея
- Считывание нескольких поворотных энкодеров
- Что выбрать между датчиками температуры и влажности: AM230x или DHT22?
Это похоже на домашнее задание, а цель домашнего задания — научиться анализировать. Символом разграничения является точка с запятой. Это верно?, @st2000
да, братан, используя разделитель; для команды множественного условия. Помоги мне, @Ganang Wahyu W