processing + Arduino
- Войдите на сайт для отправки комментариев
Пт, 03/11/2017 - 10:25
ПРОШУ ПОМОЩИ,пожалуйста проконсультируйте.хочу передать на ардуин из 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");
}
}
}
посмотрите тут, более подробно здесь (сайт, сейчас, почему то не работает, полную ссылку указать не могу(она вверху) или здесь.
Мне не много не то нужно,я отправляю данные на ардуин через СOM порт и хочу что бы ардуинка их переварила
Тут таже ошибка ,что и меня в 1 ссылке. While это бесконечный цикл, он зацикливает на себя , его надо заменить. У меня передача от Arduino к Processing сделана так.
Arduino
void establishContact() { unsigned long currentMillis = millis(); //небольшая задержка перед началом передачи if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; Serial.print('A'); // передаем символ начала передачи данных } }ЕСЛИ ЧЕМ ПОМОЖЕТ !?
//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-------------------------------------------------------------------отправляет значения из PROCESSING в ARDUINO как вручную из окна ввода и затем кнопка SEND
так же можно передавать коды цвета как циклично так и однократно .
а прием в 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------------------------------------------------------------------)