Как отправить 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.

, 👍1

Обсуждение

где в коде Arduino вы печатаете первое значение?, @Juraj

Непонятно, какие ценности вы хотите отправить. Кроме того, в вашем коде вы никогда не отправляете никаких значений по последовательному каналу. В комментариях есть несколько последовательных звонков. Пожалуйста, покажите действительно работающий скетч (имеется в виду работа с отправкой первого значения). Тогда мы сможем разобраться с остальными. Кроме того, пожалуйста, используйте функцию автоформата Arduino IDE, чтобы получить правильный отступ. Это сделало бы ваш код более читабельным., @chrisl

При использовании Serial.println () в конце данных передается "символ возврата каретки", а затем "символ новой строки". Функция обработки float() вернет NaN, если она не получит допустимое число. Я не уверен на 100%, но, возможно, "символ возврата каретки" заставляет функцию float() возвращать NaN. https://processing.org/reference/floatconvert_.html, @VE7JRO


2 ответа


0

Если вы имеете в виду отправку нескольких целых чисел, чисел с плавающей точкой или строк, вы можете использовать формат CSV.

Формат CSV: sentData = переменные,переменные,переменные3

Затем вы можете декодировать его с помощью вещей, похожих на подстроку на стороне обработки.

,

0

Вы можете сделать что-то вроде примера, показанного ниже

Serial.println(">" + String(Data1));
Serial.println("<" + String(Data2));
Serial.println("#" + String(Data1));

на стороне обработки вы можете проверить, начинаются ли данные с ">" чем его первая переменная

if (mystring[0]=='>')
{
  //здесь будет ваш код
}

вы можете опустить первого создателя в строке, создав новую подстроку.

,