Как одновременно отправлять символы и значения из обработки в Arduino
Я пытался установить частоту встроенного светодиода в Arduino, а также включать и выключать его.
Я создал интерфейс с ручками и кнопками обработки . Я хочу установить задержку между ВКЛ и ВЫКЛ с помощью одной ручки и задержку ВЫКЛ и ВКЛ с помощью другой ручки. И кнопка мигает светодиодом с заданной частотой
В Arduino я пробовал что-то вроде этого:
if(Serial.available() >0){
char val=Serial.read();
switch(val)
{
case 'c':
theValue=Serial.read();
break;
case 'd':
theValue1=Serial.read();
break;
case 'r':
digitalWrite(13,HIGH);
delay(theValue);
digitalWrite(13,LOW);
delay(theValue1);
break;
}
}
В обработке:
public void Blink(){
myPort.write('r');
}
public void knobON(int theValue){
myPort.write('c');
myPort.write(theValue);
}
public void knobOFF(int theValue1){
myPort.write('d');
myPort.write(theValue1);
}
Можете ли вы мне помочь, что мне делать?
@Gunes, 👍0
Обсуждение1 ответ
Лучший ответ:
Предоставленный вами пример кода Arduino неполный и не компилируется. На стороне обработки я бы объединил время включения светодиода со временем выключения, используя разделитель, а затем заканчивая его \n
. Примерно так: myPort.write("1000:2000\n");
.
Существует множество способов синтаксического анализа последовательных данных в unsigned long
для использования в функции delay()
. Вот скетч, иллюстрирующий один из способов его анализа. Я использую последовательный монитор для отправки следующих тестовых данных 1000:2000 (светодиод горит на 1 секунду, гаснет на 2 секунды). Последовательный монитор отправляет символ \n
.
char buffer[16];
unsigned long onTime;
unsigned long offTime;
void setup(){
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop(){
if(Serial.available() > 0){
Serial.readBytesUntil('\n', buffer, 13);
char * pch;
pch = strtok(buffer, ":");
onTime = strtol(pch, &pch, 10);
pch = strtok(NULL, ":");
offTime = strtol(pch, NULL, 10);
digitalWrite(13, HIGH);
delay(onTime);
digitalWrite(13, LOW);
delay(offTime);
memset(buffer, 0, sizeof(buffer));
}
}
- Отправка информации (например, строки) через цифровые контакты
- Отправка mouseX и mouseY из обработки в Arduino
- Графические данные датчика усилия направляются через HX711?
- Как отправить 2 данных на обработку с Arduino
- Справка по последовательному входу
- Плоттер с ЧПУ НА базе ардуино, необходимо устранить ошибку (invalid conversion from 'char' to 'char*' [-fpermissive]indexY = '\0';
- ОБНОВЛЕНИЕ: ошибка в коде обработки - не получает правильные данные от Arduino
- Получение двух значений через последовательный порт с помощью сервоприводов
Вам действительно нужно читать
char
поверх серийного номера? Почему бы не отправить число, т.е. целое число?, @MichaelT