Как одновременно отправлять символы и значения из обработки в 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);
 }

Можете ли вы мне помочь, что мне делать?

, 👍0

Обсуждение

Вам действительно нужно читать char поверх серийного номера? Почему бы не отправить число, т.е. целое число?, @MichaelT


1 ответ


Лучший ответ:

0

Предоставленный вами пример кода 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));
  }
}
,