Парсинг строки arduino

138
28 октября 2019, 12:30

Передаю строку из андроид приложения

 public void onClickBut3(View v) {
        if(myThreadConnected!=null) {
            String s = "1;3;";
            byte[] bytesToSend = s.getBytes();
            myThreadConnected.write(bytesToSend);
        }
    }

на arduino принимаю так:

String content = "";
char character;
void loop() {
while(Serial.available()) {
      character = Serial.read();
      content.concat(character);
  }
    Serial.println(content);
   if (content == "1;3;") {
    digitalWrite(led_max, HIGH);
  }

Как мне её парсить и конвертировать в int, что бы например если, буду передвать "1;1;", она стала int 1?

if(content == 1){
  //...
}

Нашел такой код но он не работает:

int on_pin=6;
int speed_pin=11;
int led_max=5;
int led_min=4;
int controls_array[5];
char bluetooth_data[20];
String bluetooth_msg;
void set_cooler_speed(int on_status, int speed_status)
{
 digitalWrite(on_pin,!(on_status));
 if((on_status==1)&&(speed_status>0))
 {
  if (speed_status==1)
  {
   analogWrite(speed_pin,5);  
   digitalWrite(led_max,LOW);
   digitalWrite(led_min,HIGH);
  }
  else
  {
   if (speed_status==2)
   {
    analogWrite(speed_pin,60);  
    digitalWrite(led_min,HIGH);
    digitalWrite(led_max,HIGH);          
   }
   else //max speed
   {
    analogWrite(speed_pin,120);  
    digitalWrite(led_min,LOW);
    digitalWrite(led_max,HIGH);    
   }
  }
 }   
}
//-----------------------------------------------------------
void data_parser()
{
 char block[20]; 
 int block_data;
 int ind_data,ind_block,ind_control, ind_tmp; 
 ind_data=0;
 ind_control=0;
 while(bluetooth_data[ind_data]!='\0')
 {
  ind_block=0;
  while(bluetooth_data[ind_data]!=';')
  {
   block[ind_block]=bluetooth_data[ind_data];
   ind_block++;
   ind_data++; 
  }
  block[ind_block]='\0';
  block_data=0;
  for(ind_tmp=0;ind_tmp<ind_block;ind_tmp++)
  {
   block_data=block_data+(block[ind_tmp]-'0');
   if (ind_tmp<ind_block-1) block_data*=10;  
  }
  controls_array[ind_control]=block_data;
  ind_control++;
  ind_data++;
 }
}
//-----------------------------------------------------------------
void pwm25kHzBegin() {
  TCCR2A = 0; // TC2 Control Register A
  TCCR2B = 0; // TC2 Control Register B
  TIMSK2 = 0; // TC2 Interrupt Mask Register
  TIFR2 = 0; // TC2 Interrupt Flag Register
  TCCR2A |= (1 << COM2B1) | (1 << WGM21) | (1 << WGM20); // OC2B cleared/set on match when up/down counting, fast PWM
  TCCR2B |= (1 << WGM22) | (1 << CS21); // prescaler 8
  OCR2A = 79; // TOP overflow value (Hz)
  OCR2B = 0;
}
//------------------------------------------------------------
void setup() {
 pinMode(on_pin, OUTPUT);
 pinMode(speed_pin, OUTPUT);
 pinMode (led_max,OUTPUT);
 pinMode (led_min,OUTPUT); 
 digitalWrite(on_pin,HIGH);
 digitalWrite(led_max,LOW);
 digitalWrite(led_min,LOW);
 controls_array[0]=0;
 controls_array[1]=0;
 pwm25kHzBegin();
}
void loop() {
 bluetooth_msg="1;1;";
  //if(Serial.available() > 0) // есть ли что-то в буфере
  //{
  //   bluetooth_msg += char(Serial.read());
  //}
  //else
  //{ 
   bluetooth_msg.toCharArray(bluetooth_data, 20);
   data_parser();
   bluetooth_msg="";
   set_cooler_speed(controls_array[0],controls_array[1]); 
  //}
}
Answer 1

Например, так:

void loop()
{
   static unsigned char leds[3] = { 13, 12, 11 };
   int number = -1;
   int state = -1;
   while (Serial.available()) {
      character = Serial.read();
      if (character != ';') {
         content.concat(character);
      }
      else if (number < 0) {
         number = content.toInt();
         content = "";
      }
      else {
         state = content.toInt();
         content = "";
      }
   }
   if (number >= 0 && state >= 0 && number <= 2 && state <= 1) {
      digitalWrite(leds[number], state);
      number = -1;
      state = -1;
   }
}

Три светодиода - Digital 13, 12, 11.

Чтобы зажечь светодиод 0 (D13), нужно передать строку "0;1;".

Чтобы погасить светодиод 2 (D11), нужно передать строку "2;0;".

READ ALSO
Парсинг файла с помощью Stream API

Парсинг файла с помощью Stream API

Подскажите как такое можно сделать с помощью стримов? Я в них новичок, может хотябы с помощью каких метов можно сделатьБуду рад любой помощи!

140
Не могу получить список файлов и папок google

Не могу получить список файлов и папок google

Пытаюсь получить список файлов и папок GoogleDriveВ документации написано для того, чтобы получить список нужно выполнить такой запрос:

131
Заполнение TableView из ObservableList, который состоит из массива массивов

Заполнение TableView из ObservableList, который состоит из массива массивов

Коллеги, добрый вечер! Прошу вашей помощи в понимании ObservableListУ меня есть ObservableList, состоящий из массива Object[], каждый элемент которого имеет...

105
Открытие activity в отдельном окне

Открытие activity в отдельном окне

Как сделать что бы новая activity открывалась не по верх другой, а как бы в новом окне, те чтобы при нажатии на кнопку последних программ пользователь...

122