разобрать строку с arduino в processing

reanon
Offline
Зарегистрирован: 06.01.2016

Всем привет!

подскажите новичку!

решил на процессинге написать программу бортового компа на мотоцикл .

проблемма следующего характера

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

ардуина шлет постоянно строку  

0,0,259,774,251, ,100000001101110000000000000000:

числа через запятую это спидометр, тахометр, напряжение борт сети, уровень топлива и охлождающаяя жидкость

без запятых это лампочки

что я делаю не так?

вот часть кода процессинга

while (myPort.available() !=0) {
    String inBuffer = myPort.readStringUntil(lf);   
    if (inBuffer != null) {
       println(inBuffer);
  int[] nums = int(split(inBuffer, ','));

      sp = nums[0];
      th = nums[1];
      bat= nums[2];
      fu = nums[3];
      tu = nums[4];
      sp=sp+60;
      th=th+60;
      if (sp > 300) sp = 300;
      if (th > 300)  th = 300;
      
    println(bat);
      
   }
 

   }

 

reanon
Offline
Зарегистрирован: 06.01.2016

вроде я понял что строка у меня не простая

часть через запятую, а часть (0 и 1) цыфровые входы без разделителей.

А я пытаюсь разобрать строку как будто она вся с разделителями.

Вот не могу сообразить как ее правильно разобрать чтоб каждое число сохранялось в nums[]

подскажите как правильно

Зарание спасибо!

torvik
Offline
Зарегистрирован: 25.11.2015

Была такая же проблема в цыкле толучилось только вывести на эклан.

А вот так в ручную все получилось. С ардуино отправка идет одной строкой

  Serial.print(xAng);
  Serial.print(",");
  Serial.print(yAng);
  Serial.print(".");
  Serial.print(zAng);
  Serial.println(":");
 
 
 
void serialEvent(Serial port) 
{
  if ( port.available() > 0) {
    val = port.readStringUntil(':'); 
    val = val.substring(0, val.length() - 1);
    index = val.indexOf(",");
    x = val.substring(0, index);
    index2 = val.indexOf(".");
    y = val.substring(index+1, index2);
    z = val.substring(index2+1, val.length());
    print("x:");
    print(x);
    print(" y:");
    print(y);
    print(" z:");    
    println(z);
 
вот здесь все высмотрел 

Видеоуроки по Arduino. I2C и processing (7-я серия, ч1 и ч2)

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

Все эти косяки в любом коде и любом языке рассматриваются по своему.

в C# Windows Form --- MessageBox.Show("строка переманная и т.п."); или консоль.

в консольных приложениях -- соответственно консоль и окно терминала.

в PHP --- var_dump();

в js можно и алертом вывести, что остановит цикл и выведет значение и будет ждать пока ок не нажмешь.

 

В процессинге - кстати видел но пока не смотрел подробно тоже чтото есть.

-косяки в скорости приема данных --- myPort.available() !=0

-есть такая штука скорость порта --- 9600 например бит и т.п.

-есть такая штука - частота микроконтроллера и если в коде вызвать массив то ардуина так тупанет что зависнет...

 

вчера вот писал человеку код - простой двухмерный массив и уно выдавала задержки на секунду...

хотя массив был arr[][] = {{1,2},{3,4},{5,6},{7,8}};