processing + Arduino

kiselev
Offline
Зарегистрирован: 02.07.2016

ПРОШУ ПОМОЩИ,пожалуйста проконсультируйте.хочу передать на ардуин из processing.Идея в том 1 это счетчик а остальнык цифры это разряды то есть 2=10 3=100 итд по разрядм.Отпроаляю из processing два числа счетчик и разряд то есть 12 12 12 12 это число в адруине должно быть равно 40 надеюсь понятно.вот код.Сложилось такое впечатление что он просто не присваевает m 10. но если это сделать в ручную все работает.Заранее спасибо 

char commandValue;
char razrad;// данные, поступаемые с последовательного порта
int ledPin = 13;
boolean ledState = LOW; //управляем состоянием светодиода
int cord=0;
int s=0;
int m=1;
void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
  establishContact(); // отсылаем байт для контакта, пока ресивер отвечает
}

void loop() {
  // если можно прочитать данные
  if (Serial.available() > 0) {
    razrad  = Serial.read();
  if (razrad == '2') {
     int m=10;
    }
    else{
     int m=1;
    }
    if (razrad == '1') {
      s=s+m;
    }
  }
  else {
    // Отсылаем обратно
    Serial.println("END");
  }
  if (m==10) {
        digitalWrite(ledPin, HIGH);
}
}

void establishContact() {
  while (Serial.available() <= 0) {
    Serial.println("A"); // отсылает заглавную A
    delay(300);
  }
}

import processing.serial.*;

Serial serial; // создаем объект последовательного порта
String received; // данные, получаемые с последовательного порта
// Проверка на поступление данных от Arduino
boolean firstContact = false;
int k;
float c=123.123456;
int mnp=0;
void setup()
{
  size(320, 120);
  String port = Serial.list()[0];
  serial = new Serial(this, port, 9600);
  serial.bufferUntil('\n');
}

void draw() {
}

void serialEvent( Serial myPort) { //формируем строку из данных, которые поступают

  // '\n' - разделитель - конец пакета данны
  received = myPort.readStringUntil('\n'); //убеждаемся, что наши данные не пустые перед тем, как продолжить
  if (received != null) { //удаляем пробелы
    received = trim(received);

    println(received); //ищем нашу строку 'A' , чтобы начать рукопожатие

    //если находим, то очищаем буфер и отсылаем запрос на данные
    if (firstContact == false) {
      if (received.equals("A")) {
        serial.clear();
        firstContact = true;
        myPort.write("A");
        println("contact");
      }
    } else { //если контакт установлен, получаем и парсим данные
      println(received);
  int full=12;
      while(mnp!=full){
        mnp=mnp+1;
        delay(100);
         serial.write('2');
        serial.write('1');
            println('2');
        println(mnp);
      } // когда вы все данные, делаем запрос на новый пакет
      serial.write("A");
    }
  }
}

 

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

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

 

kiselev
Offline
Зарегистрирован: 02.07.2016

Мне не много не то нужно,я отправляю данные на ардуин через СOM порт и хочу что бы ардуинка их переварила 

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

Тут таже ошибка ,что  и меня в 1 ссылке. While это бесконечный цикл, он зацикливает на себя , его надо заменить. У меня передача от Arduino к Processing сделана так.

Arduino

void establishContact() {
  unsigned long currentMillis = millis(); //небольшая задержка перед началом передачи
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    Serial.print('A');   // передаем символ начала передачи данных
  }
}

 

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

ЕСЛИ ЧЕМ ПОМОЖЕТ !? 


//PROCESSING SKETCH-------------------------------------------------------------------
/*
int speed = 9600;                          //начальная скорость порта
import processing.serial.*;                //библиотека 
Serial serial;
import controlP5.*;                        //библиотека кнопки крутилки
ControlP5 cp5;
String portName;
RadioButton r1, r2;        
int TheMyCalor;
int rgb;
void setup() {
  size(680, 430);                          //размеры основного окна
  cp5 = new ControlP5(this);
  cp5.setFont(createFont("Calibri", 16));  // сделаем шрифт побольше
  // create a toggle
  cp5.addToggle("")                        //SENDRGB
     .setPosition(10,360)
     .setSize(240,20)
     ;
  //ON Отправка RGB--------------------------------------------------------------------
   cp5.addButton("ONRGB").setPosition(10, 320).setSize(240, 30);
  //palitra----------------------------------------------------------------------------
  cp5.addColorWheel("myCalor" , 10 , 50 , 240 ).setRGB(color(128,0,255));
  // кнопки---------------------------------------------------------------------
  cp5.addButton("open").setPosition(90, 10).setSize(80, 30);
  cp5.addButton("close").setPosition(170, 10).setSize(80, 30).linebreak();
  //отправка--------------------------------------------------------------------
  cp5.addTextfield("input").setPosition(260, 10).setSize(320, 30);
  cp5.addButton("send").setPosition(590, 10).setSize(80, 30);
  // выпадающий список----------------------------------------------------------
  cp5.addScrollableList("com")
    .setPosition(10, 10)
    .setSize(80, 100)
    .setBarHeight(30)
    .setItemHeight(30)
    .close()
    .addItems(Serial.list());                // добавляем список портов
  ;
  // cкорость порта--------------------------------------------------------------
   r1 = cp5.addRadioButton("radioButton")
         .setPosition(10,400)                //позиция кнопок выбора скорости порта 
         .setSize(80,20)                     //размер кнопок выбора скорости порта 
         .setColorForeground(color(120))
         .setColorActive(color(255))
         .setColorLabel(color(255))
         .setItemsPerRow(5)
         .setSpacingColumn(50)
         .addItem("4800",1)                 //режим 1 равен скорости 4800 бод
         .addItem("9600",2)                 //режим 1 равен скорости 9600 бод
         .addItem("19200",3)                //режим 1 равен скорости 19200 бод
         .addItem("38400",4)                //режим 1 равен скорости 38400 бод
         .addItem("115200",5)               //режим 1 равен скорости 115200 бод
         ;
         for(Toggle t:r1.getItems()) {
       t.getCaptionLabel().setColorBackground(color(255,80));
       t.getCaptionLabel().getStyle().moveMargin(-3,0,0,-3);
       t.getCaptionLabel().getStyle().movePadding(7,0,0,3);
       t.getCaptionLabel().getStyle().backgroundWidth = 55;      //длинна серых окон выбора скорости порта 
       t.getCaptionLabel().getStyle().backgroundHeight = 13;
}}
void radioButton(int TheRadioButton) {
 if(TheRadioButton==1){speed=4800;}                              //при включенном режиме 1 установить скорость в 4800 бод
  if(TheRadioButton==2){speed=9600;}                             //при включенном режиме 1 установить скорость в 9600 бод
   if(TheRadioButton==3){speed=19200;}                           //при включенном режиме 1 установить скорость в 19200 бод
    if(TheRadioButton==4){speed=38400;}                          //при включенном режиме 1 установить скорость в 38400 бод
     if(TheRadioButton==5){speed=115200;}                        //при включенном режиме 1 установить скорость в 115200 бод
     print(speed);
}
public void SENDRGB(boolean MySENDRGB ) {

 if(MySENDRGB==true){rgb=1;}else{rgb=0;}                         //указываем флаг rgb  0 или 1 
}
public void ONRGB(boolean MyONRGB ) {                            
  String textONRGB = "Str=" + ~TheMyCalor;                       //создаем СТРОКУ для отправки цвета
 if(MyONRGB==true) {serial.write(textONRGB);println(textONRGB);} //отправить значение RGB при нажатой кнопке ONRGB (инвертировал ~) 
}
public void myCalor(int TheMyCalor2) {
 TheMyCalor=TheMyCalor2;                                         //глобальная переменная равна локальной
}
void com(int n) {
  portName = Serial.list()[n];
}
void open() {
  serial = new Serial(this, portName, speed);
}
void close() {
  serial.stop();
}
void send() {
  serial.write(cp5.get(Textfield.class, "input").getText());     //Отправка сообщения при нажатой кнопке Send
}
void draw() {
  background(40);                                                // цвет фона
  if(rgb==1){                                                    // если флаг rgb равен 1
    String textMyCalor = "Str=" + ~TheMyCalor;                   //создаем СТРОКУ для отправки цвета
    serial.write(textMyCalor);println(textMyCalor);              //включить постоянную передача цвета
    delay(200);           //задержка
}
}
*/
//PROCESSING SKETCH-------------------------------------------------------------------
georgy36arduino
Offline
Зарегистрирован: 27.11.2021

отправляет значения из PROCESSING в ARDUINO  как вручную из окна ввода и затем кнопка SEND

так же можно передавать коды цвета как циклично так и однократно .

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

а прием в ARDUINO в мое случае выглядит так (дисплей LCD1602 шилд ROBOT drive thefuture v.1

//ARDUINO sketch------------------------------------------------------------------
long commandValue; // данные, поступаемые с последовательного порта
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup(){
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.clear();
  
}
void loop(){
  
   // считывание
   // если можно прочитать данные
  if (Serial.available() > 0) {
    // считываем данные
    //commandValue = Serial.read();
    commandValue = Serial.parseInt();
    lcd.clear();
    lcd.setCursor(0, 0);  
    lcd.print("DATA: ");
    lcd.setCursor(0, 1);
    lcd.print(commandValue,DEC);
    delay(600);
    //lcd.clear();
    }
  delay(100);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("NO Signal");
}
//ARDUINO sketch------------------------------------------------------------------

)