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');   // передаем символ начала передачи данных
  }
}