HELP ! String PROCESSING

georgy36arduino
Offline
Зарегистрирован: 27.11.2021

Добрый вечер ! Просьба такая))

передаю с Ардуино примерно такие данные и получаю их правильно на стороне

Processing'a

 

40,BF,E6,19.
40,BF,E6,19.
40,BF,E6,19.
C0,3F,E6,19.
40,BF,E6,19.
40,BF,E6,19.
40,BF,E6,19.
40,BF,E6,19.
C0,3F,E6,19.
40,BF,E6,19.
40,BF,E6,19.

код Processing

import processing.serial.*;
String bufer="";
Serial myPort;

void setup()
{
   myPort = new Serial(this, "COM5", 4800);
  size (500,500);
}

void draw()
{ 
  while (myPort.available() > 0)
  {
    char inByte = myPort.readChar();
    bufer=bufer+inByte;
    println(bufer);   
}
}  
  

Вопрос в том что хотеться получить массив с данными

iint massve [] = {40, BF, E6, 19};

 

georgy36arduino
Offline
Зарегистрирован: 27.11.2021

Пока результат такой....

// Example by Tom Igoe

import processing.serial.*;

Serial myPort;  // The serial port

void setup() {
  // List all the available serial ports
  printArray(Serial.list());
  // Open the port you are using at the rate you want:
  myPort = new Serial(this, Serial.list()[1], 4800);
}

void draw() {
  // Expand array size to the number of bytes you expect
  byte[] inBuffer = new byte[7];
  while (myPort.available() > 0) {
    inBuffer = myPort.readBytes();
    myPort.readBytes(inBuffer);
    if (inBuffer != null) {
      String myString = new String(inBuffer);
      String st = myString;
      String ADDR = "";
      String OSTATOC = "";
        for (int j = 0; j < st.length(); j++) {
            if ( j < st.length() /4) {
                ADDR += st.charAt(j);
            }else
                OSTATOC += st.charAt(j);
       }
                //println(ADDR);
                println("Значение ADDR :     " + ADDR);
//-------------------------------------------------------------------------                
        String st1 = OSTATOC;
        String ADDR_inv = "";
        String OSTATOC1 = "";
        for (int j = 0; j < st1.length(); j++) {
            if ( j < st1.length() /3) {
                ADDR_inv += st1.charAt(j);
            }else
                OSTATOC1 += st1.charAt(j);
       }
               // println(ADDR_inv);
                println("Значение ADDR_inv : " + ADDR_inv);
//-------------------------------------------------------------------------                
        String st2 = OSTATOC1;
        String DATA = "";
        String OSTATOC2 = "";
        for (int j = 0; j < st2.length(); j++) {
            if ( j < st2.length() /2) {
                DATA += st2.charAt(j);
            }else
                OSTATOC2 += st2.charAt(j);
       }
               // println(DATA);
                println("Значение DATA :     " + DATA);
                //println(OSTATOC2);
                println("Значение DATA_inv : " + OSTATOC2);
                println("---------------------------------------");

    }
  }
}

ata3d
Offline
Зарегистрирован: 24.05.2017

Тут лежит рабочая версия передачи данных с Ардуино в Процессинг и отображение данных в графике, может что то пригодится.

 

georgy36arduino
Offline
Зарегистрирован: 27.11.2021

ого спасибо ata3d ща гляну!

georgy36arduino
Offline
Зарегистрирован: 27.11.2021

Короче говоря все ответы найдены)) гуглить тоже надо уметь!

//PROCESSING----------------------------------------------------------------
// Example by Tom Igoe

import processing.serial.*;//библиотека сериал

Serial myPort;  // сериал порт

void setup() {
  // список портов
  printArray(Serial.list());
  // номер порта и битрейт
  myPort = new Serial(this, Serial.list()[1], 4800);
}

void draw() {
  while (myPort.available() > 0) {// если данные пришли
    String inBuffer = myPort.readString();   // пишем в буффер (Строка)
    if (inBuffer != null) {// если принятые данные не равны null
      println(inBuffer);// печатаем данные в порт
      
      

//ВАРИАНТ 1 -----------------------------------------------------------------
// String inBuffer = $;36;AA;01;A2;2F;0F;GD;.
// разделить строку по разделтелю (тип данных String )
String[] list = split(inBuffer, ';');
// list[0] в " $", list[1] в "36"..
//Функция split () разбивает строку на части*(Parsing!)
print("StartBit: ");print(list[0]);print("   ");
// разделить строку по разделтелю (тип данных int )
int[] listNEW=int(split(inBuffer, ';'));

//ПЕЧАТАЕМ В ПОРТ НОВЫЕ ДАННЫЕ-----------------------------------------------------
int ADDR=listNEW[1];// сохраняем данные адреса,в ADDR как тип данных (int)
// печатаем в порт значение ADDR с указателем типа данных (dec,hex,bin)
print("ADDR: ");print(hex(ADDR));print("   ");   // печатаем в порт данные (String)
print("X: ");print(list[2]);print("   ");        // печатаем в порт данные (String)
print("Y: ");println(list[3]);                   // ...
print("Calor_R: ");print(list[4]);print("   ");  // ...
print("Calor_G: ");print(list[5]);print("   ");  // ...
print("Calor_G: ");println(list[6]);// ...
print("saturation: ");println(list[7]);          // ...


//ВАРИАНТ 2-------------------------------------------------------------------
//String ADDR = inBuffer.substring(2,4);
//String X = inBuffer.substring(5,7);
//String Y = inBuffer.substring(8,10);
//String Calor_R = inBuffer.substring(11,13);
//String Calor_G = inBuffer.substring(14,16);
//String Calor_B = inBuffer.substring(17,19);
//String saturation = inBuffer.substring(20,22);

//ПЕЧАТАЕМ В ПОРТ НОВЫЕ ДАННЫЕ------------------------------------------------
//print("ADDR: ");print(ADDR);print("   ");
//print("X: ");print(X);print("   ");
//print("Y: ");println(Y);
//print("Calor_R: ");print(Calor_R);print("   ");
//print("Calor_G: ");print(Calor_G);print("   ");
//print("Calor_G: ");println(Calor_B);
//print("saturation: ");println(saturation);

    }
  }
}
//PROCESSING----------------------------------------------------------------

//ARDUINO------------------------------------------------------------------
/*
[$][ADDR][;][X,HEX][;][Y,HEX][;][Calor_R,HEX][;][Calor_G,HEX][;][Calor_B,HEX][;][saturation,HEX][.]

Начало посылки(StartMark)-[$]
Адрес(36)-[ADDR]
Координаты-[X,HEX][Y,HEX]
Цвет-[Calor_R,HEX][Calor_G,HEX][Calor_B,HEX]
Насыщенность-[saturation,HEX]
Разделитель-[;]
Конец посылки-[.]
*/
//ПРИМЕР ВЫВОДА В ПОРТ 
/*
$;36;AA;01;A2;2F;0F;GD;.
$;36;A9;01;A2;2F;0F;GD;.
$;36;A6;01;A2;2F;0F;GD;.
$;36;A6;01;A2;2F;0F;GD;.
$;36;A6;01;A2;2F;0F;GD;.
$;36;A6;01;A2;2F;0F;GD;.
$;36;A6;01;A2;2F;0F;GD;.
$;36;A6;01;A2;2F;0F;GD;.
$;36;A6;01;A2;2F;0F;GD;.
$;36;A6;01;A2;2F;0F;GD;.
$;36;A6;01;A2;2F;0F;GD;.
$;36;A6;01;A2;2F;0F;GD;.
$;36;A7;01;A2;2F;0F;GD;.
$;36;A7;01;A2;2F;0F;GD;.
$;36;A7;01;A2;2F;0F;GD;.

*/


int coordinates_X;// Координаты по Х

char  StartMark= '$';// старт бит
char  Delimiter=';';// разделитель
char  EndOfLine ='.';// конец

String ADDR="36";// адрес
String coordinates_Y="01";// Координаты по Y
String calorRGB[]={"A2","2F","0F"};// цвет rgb
String saturation="GD";// Насыщенность


#include <SoftSerial.h>     /* Allows Pin Change Interrupt Vector Sharing */
#include <TinyPinChange.h>  /* Ne pas oublier d'inclure la librairie <TinyPinChange> qui est utilisee par la librairie <RcSeq> */
SoftSerial mySerial(2, 3); // RX, TX пины порта
int analogInput = A0;
float vout = 0.0;
int value = 0;
int  DATA;
void setup()  
{
   pinMode(analogInput, INPUT);
Serial.begin(57600);//порт на прием открыть на скорости 57600
//while (!Serial) {;} // дождитесь подключения последовательного порта.
mySerial.begin(4800);//порт на отправку открыть на скорости 57600
delay(100);
}
void loop() // run over and over
{
  value = analogRead(analogInput);
  float X=(value*2.25)/10.24;//158.8-diol poteri
int coordinates_X=X;
 //ПАКЕТ ПОСЫЛКА ТЕСТ
  mySerial.print(StartMark);mySerial.print(Delimiter);
  mySerial.print(ADDR);mySerial.print(Delimiter);
  mySerial.print(coordinates_X,HEX);mySerial.print(Delimiter);
  mySerial.print(coordinates_Y);mySerial.print(Delimiter);
  mySerial.print(calorRGB[0]);mySerial.print(Delimiter);
  mySerial.print(calorRGB[1]);mySerial.print(Delimiter);
  mySerial.print(calorRGB[2]);mySerial.print(Delimiter);
  mySerial.print(saturation);mySerial.println(EndOfLine);
  delay(500);
  }
//ARDUINO------------------------------------------------------------------

 

georgy36arduino
Offline
Зарегистрирован: 27.11.2021

результат  в Processing то что мне и нужно было 

$;36;0;01;A2;2F;0F;GD.

StartBit: $   ADDR: 36   X: 0   Y: 01
Calor_R: A2   Calor_G: 2F   Calor_G: 0F
saturation: GD.

 

только точку обрезать ))
 
wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Я уже почти неделю наблюдаю эту странную активность и все же спрошу:

Ты зачем силы и время тратишь на мертворожденный проект "Процессинг"? Для взаимодействия с Ардуино на ПК можно использовать все что угодно. И Питон и Яву и C# и даже просто С. Можно MATLAB в его свободной версии - GNU Oktave, если хочется много мат обработки. Но не это "поделие", навыки использования которого тебе потом нигде и никогда не пригодятся.

Я бы посоветовал Python или Java. И тот и другой навыки - ценны для будущего трудоустройства, если ты молод, и просто очень полезны, если ты пенсионер и осваиваешь новое хобби.

SAB
Offline
Зарегистрирован: 27.12.2016

Иногда использую процессинг для небольших проектов под андроид, когда надо быстренько сваять какой нибудь обмен данными  и управление с телефоном, и чтобы удобное и более менее красивое было оформление картинки. Там все проще, чем использовать громоздкие  андроидовские сдк.

georgy36arduino
Offline
Зарегистрирован: 27.11.2021

wdrakula Ты может и прав в целом, поясню я человек новенький в языках пр. вот и выбрал PEOCESSING так как он показался ближе к Ардуине и к изучению в целом а синтаксис и основной базис как я понимаю везде схож.

Спасибо за приведенные примеры  Питон, и Яву, и C#,  MATLAB ,GNU Oktave пытаюсь параллельно С# изучать

georgy36arduino
Offline
Зарегистрирован: 27.11.2021

SAB пишет:

Иногда использую процессинг для небольших проектов под андроид, когда надо быстренько сваять какой нибудь обмен данными  и управление с телефоном, и чтобы удобное и более менее красивое было оформление картинки. Там все проще, чем использовать громоздкие  андроидовские сдк.

SAB наверно через некоторое время и я стану пользоваться PROCESSING'ом только 

в редких случаях  

georgy36arduino
Offline
Зарегистрирован: 27.11.2021

wdrakula пишет:

Я уже почти неделю наблюдаю эту странную активность и все же спрошу:

Ты зачем силы и время тратишь на мертворожденный проект "Процессинг"? Для взаимодействия с Ардуино на ПК можно использовать все что угодно. И Питон и Яву и C# и даже просто С. Можно MATLAB в его свободной версии - GNU Oktave, если хочется много мат обработки. Но не это "поделие", навыки использования которого тебе потом нигде и никогда не пригодятся.

Я бы посоветовал Python или Java. И тот и другой навыки - ценны для будущего трудоустройства, если ты молод, и просто очень полезны, если ты пенсионер и осваиваешь новое хобби.

И подскажи я правильно понимаю что для С# среда IDE хорошо подходит Visul Studio

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Я не из мира Windows совершенно. Использую Винду только для проверок, как на ней работает код. Поэтому про C# ничего не скажу. Я написал, что с моей точки зрения нужно изучать платформо-независимые инструменты - Python и Java. Да и спрос на них гораздо больше, чем на C#.

С C# работает Дет Симен - к нему обращайся.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

wdrakula пишет:

С C# работает Дет Симен - к нему обращайся.

работал. 3 года взат. счас я вапще безработный. 

Upd.  А так-то да, Шарп это мощь и сила.  :)  Синтаксис, максимально приближенный к Си + идеология Delphi. Причем, разрабоччики не оглядывались на пыльные тома замшелых С++ стандартов, и вводили в язык те конструкции, которые считали необходимыми (свойства, foreach, делегаты и т.д).  Получилось не без шероховатостей, канеш, но красиво. :) 

lilik
Offline
Зарегистрирован: 19.10.2017

SAB пишет:

Иногда использую процессинг... 

А можно сделать альтернативу "монитор-порту", что бы не только букво-цифры, но и графики, диаграммы, картинки, иконки по ним и т.д. :-)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

wdrakula пишет:

С C# работает Дет Симен - к нему обращайся.

и еще программисты пишущие сервиcную программу для TESLA )))

georgy36arduino
Offline
Зарегистрирован: 27.11.2021

lilik пишет:

SAB пишет:

Иногда использую процессинг... 

А можно сделать альтернативу "монитор-порту", что бы не только букво-цифры, но и графики, диаграммы, картинки, иконки по ним и т.д. :-)

Да вполне можно в библиотеке есть много примеров  http://www.sojamo.de/libraries/controlP5/