Как отправить 2 данных на обработку с Arduino
Я новичок в Arduino и обработке данных, поэтому прошу прощения за любые ошибки. У меня есть проблема с отправкой нескольких данных на обработку из Arduino. Я могу легко отправить 1 данные, но я не могу отправить больше 2 данных, может ли кто-нибудь помочь?!??. Это мой код Arduino:
#include <DHT.h>
#define Type DHT11
int dhtpin =2;
float temopValC;
float temopValF;
DHT HT(dhtpin,Type);
#include <Servo.h>
int servopin=9;
int servopos;
Servo servo1;
int trigpin=10;
int ecopin=11;
float distance;
float spedd=343;
float timee;
void setup() {
Serial.begin(9600);
HT.begin();
delay(200);
pinMode(trigpin,OUTPUT);
pinMode(ecopin,INPUT);
servo1.attach(servopin);
}
void loop() {
temopValC=HT.readTemperature();
temopValF=HT.readTemperature(true);
spedd =331.3 +(0.6 *temopValC);
//Serial.println(spedd);
/*Serial.print("Temp C/F "); //temp val
Serial.print(temopValC);
Serial.print(" ");
Serial.println(temopValF);
delay (1005);*/
for(servopos=0;servopos < 180; servopos +=1 ){
digitalWrite(trigpin,LOW);
delayMicroseconds(2000);
digitalWrite(trigpin,HIGH);
delayMicroseconds(15);
digitalWrite(trigpin,LOW);
timee=pulseIn(ecopin,HIGH);
timee= timee /1000000.;
timee= timee /3600.;
distance= spedd * timee;
distance = distance /2;
distance = distance * 63360;//inch
distance =distance *2.54; //cm
distance= distance *2;
//Serial.print(distance);
//Serial.print(" ");
// delay(200);
servo1.write(servopos);
//delay(100);
// Serial.print(servopos);
//Serial.println(" ");
delay(100);
}
for(servopos=180;servopos >= 1; servopos -=1){
digitalWrite(trigpin,LOW);
delayMicroseconds(2000);
digitalWrite(trigpin,HIGH);
delayMicroseconds(15);
digitalWrite(trigpin,LOW);
timee=pulseIn(ecopin,HIGH);
timee= timee /1000000.;
timee= timee /3600.;
distance= spedd * timee;
distance = distance /2;
distance = distance * 63360;//inch
distance =distance *2.54; //cm
distance= distance *2;
// Serial.print(distance);
// Serial.print(" ");
//delay(200);
servo1.write(servopos);
//delay(100);
// Serial.print(servopos);
//Serial.println(" ");
// delay(100);
}
/*if(distance < 14.28){
Serial.println("..............o");
delay(800);
}
if(distance> 14.28){
Serial.println(" h ");
delay(800);
}
if(distance== 14.28){
Serial.println("i ");
delay(800);
}
*/
}
И это мой код обработки для одних данных:
import processing.serial.*;
Serial mySerial;
String mystring= null;
int nl=10;
float myVal;
void setup(){
size(800, 600);
String myport= Serial.list() [2];
mySerial=new Serial(this,myport,9600);
}
void draw(){
while(mySerial.available() >0){
mystring =mySerial.readStringUntil(nl);
if(mystring != null){
background(0);
myVal=float(mystring);
println(myVal);
}
}
ellipse(250,myVal,10,10);
rect(0,0,20,10);
rect(0,40,20,10);
rect(0,80,20,10);
rect(0,120,20,10);
rect(0,160,20,10);
rect(0,200,20,10);
rect(0,240,20,10);
rect(0,280,20,10);
rect(0,320,20,10);
rect(0,360,20,10);
rect(0,400,20,10);
rect(0,440,20,10);
rect(0,480,20,10);
rect(0,520,20,10);
rect(0,560,20,10);
rect(0,600,20,10);
}
Я хочу изменить значение x эллипса с помощью вторых данных из Arduino.
@Eser, 👍1
Обсуждение2 ответа
Если вы имеете в виду отправку нескольких целых чисел, чисел с плавающей точкой или строк, вы можете использовать формат CSV.
Формат CSV:
sentData = переменные,переменные,переменные3
Затем вы можете декодировать его с помощью вещей, похожих на подстроку на стороне обработки.
Вы можете сделать что-то вроде примера, показанного ниже
Serial.println(">" + String(Data1));
Serial.println("<" + String(Data2));
Serial.println("#" + String(Data1));
на стороне обработки вы можете проверить, начинаются ли данные с ">" чем его первая переменная
if (mystring[0]=='>')
{
//здесь будет ваш код
}
вы можете опустить первого создателя в строке, создав новую подстроку.
- Отправка информации (например, строки) через цифровые контакты
- Отправка mouseX и mouseY из обработки в Arduino
- Справка по последовательному входу
- ОБНОВЛЕНИЕ: ошибка в коде обработки - не получает правильные данные от Arduino
- Два адруино подключены к малине по usb, но один переподключается во время выполнения кода обработки
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Использовать все контакты как цифровые входы/выходы
где в коде Arduino вы печатаете первое значение?, @Juraj
Непонятно, какие ценности вы хотите отправить. Кроме того, в вашем коде вы никогда не отправляете никаких значений по последовательному каналу. В комментариях есть несколько последовательных звонков. Пожалуйста, покажите действительно работающий скетч (имеется в виду работа с отправкой первого значения). Тогда мы сможем разобраться с остальными. Кроме того, пожалуйста, используйте функцию автоформата Arduino IDE, чтобы получить правильный отступ. Это сделало бы ваш код более читабельным., @chrisl
При использовании
Serial.println ()
в конце данных передается "символ возврата каретки", а затем "символ новой строки". Функция обработкиfloat()
вернетNaN
, если она не получит допустимое число. Я не уверен на 100%, но, возможно, "символ возврата каретки" заставляет функциюfloat()
возвращатьNaN
. https://processing.org/reference/floatconvert_.html, @VE7JRO