Hello,
I programmed a simple WPF Form program which sends data over to the arduino which should extract the data from the string with sscanf and store it in an array. My current code looks like this:
#include <AccelStepper.h>
AccelStepper stepperZHohe(1, 2, 5);
AccelStepper stepperZDrehung(1, 3, 6);
AccelStepper stepperGelenk1(1, 4, 7);
AccelStepper stepperGelenk2(1, 12, 13);
int Data[3];
int SerialData[3];
void ReceiveSerialData()
{
while(Serial.available() > 0){}
char string[32];
char byteRead;
int availableBytes = Serial.available();
for(int i=0; i<availableBytes; i++)
{
string[i] = Serial.read();
}
int result[3];
sscanf(string, "%f,%f,%f,%f", &result[0], &result[1], &result[2], &result[3]);
result[3] = Data[3];
}
void setup()
{
stepperZHohe.setMaxSpeed(10000);
stepperZHohe.setSpeed(10000);
stepperZHohe.setAcceleration(10000);
stepperZDrehung.setMaxSpeed(10000);
stepperZDrehung.setSpeed(10000);
stepperZDrehung.setAcceleration(10000);
stepperGelenk1.setMaxSpeed(10000);
stepperGelenk1.setSpeed(10000);
stepperGelenk1.setAcceleration(10000);
stepperGelenk2.setMaxSpeed(10000);
stepperGelenk2.setSpeed(10000);
stepperGelenk2.setAcceleration(10000);
Serial.begin(115200);
Serial.println("ONLINE");
}
void moveTo(int ZHohe, int ZDrehung, int Gelenk1, int Gelenk2)
{
stepperZHohe.moveTo(ZHohe);
stepperZDrehung.moveTo(ZDrehung);
stepperGelenk1.moveTo(Gelenk1);
stepperGelenk2.moveTo(Gelenk2);
}
void loop()
{
ReceiveSerialData();
moveTo(Data[0], Data[1], Data[2], Data[3]);
stepperZHohe.run();
stepperZDrehung.run();
stepperGelenk1.run();
stepperGelenk2.run();
}
The data format looks like this: val1, val2, val3, val4 and I want an array which looks like this [val1, val2, val3, val4]. How can I achieve that?
J-M-L
October 31, 2023, 5:33pm
2
I would suggest to study Serial Input Basics to handle this
the way you read the Serial input is error prone
Hi @finn433 ,
Yeah, hard to understand the recv code but the array below needs to be 4 not 3??
finn433:
int Data[3];
give this a try..
rewrote the recving code and i've increased the array..
seems to work..
#include <AccelStepper.h>
AccelStepper stepperZHohe(1, 2, 5);
AccelStepper stepperZDrehung(1, 3, 6);
AccelStepper stepperGelenk1(1, 4, 7);
AccelStepper stepperGelenk2(1, 12, 13);
int Data[4];
int SerialData[4];
char buff[10];
byte commaCount = 0;
byte recvCount = 0;
bool RecvData() {
bool result = false;
int tmpInt = -1;
if (Serial.available()) {
byte abyte = Serial.read();
switch (abyte) {
case 10: if (commaCount == (sizeof(Data) / sizeof(Data[0])) - 1) {
tmpInt = atoi(buff);
if (tmpInt > -1) {
Data[commaCount] = tmpInt;
} else {
//error in conversion??
Data[commaCount] = 0;
}
result = true;
}
commaCount = 0;
recvCount = 0;
memset(buff, 0, sizeof(buff));
break;//newline
case 44: if (commaCount < (sizeof(Data) / sizeof(Data[0]))) {
tmpInt = atoi(buff);
if (tmpInt > -1) {
Data[commaCount] = tmpInt;
} else {
//error in conversion??
Data[commaCount] = 0;
}
commaCount++;
recvCount = 0;
memset(buff, 0, sizeof(buff));
}
break;//comma
default: if (recvCount < sizeof(buff)) {
buff[recvCount] = abyte;
recvCount++;
}
break;
}
}
return result;
}
void ReceiveSerialData()
{
while (Serial.available() > 0) {}
char string[32];
char byteRead;
int availableBytes = Serial.available();
for (int i = 0; i < availableBytes; i++)
{
string[i] = Serial.read();
}
int result[3];
sscanf(string, "%f,%f,%f,%f", &result[0], &result[1], &result[2], &result[3]);
result[3] = Data[3];
}
void setup()
{
stepperZHohe.setMaxSpeed(10000);
stepperZHohe.setSpeed(10000);
stepperZHohe.setAcceleration(10000);
stepperZDrehung.setMaxSpeed(10000);
stepperZDrehung.setSpeed(10000);
stepperZDrehung.setAcceleration(10000);
stepperGelenk1.setMaxSpeed(10000);
stepperGelenk1.setSpeed(10000);
stepperGelenk1.setAcceleration(10000);
stepperGelenk2.setMaxSpeed(10000);
stepperGelenk2.setSpeed(10000);
stepperGelenk2.setAcceleration(10000);
Serial.begin(115200);
Serial.println(sizeof(Data) / sizeof(Data[0]));
Serial.println("ONLINE");
}
void moveTo(int ZHohe, int ZDrehung, int Gelenk1, int Gelenk2)
{
stepperZHohe.moveTo(ZHohe);
stepperZDrehung.moveTo(ZDrehung);
stepperGelenk1.moveTo(Gelenk1);
stepperGelenk2.moveTo(Gelenk2);
}
void loop()
{
//ReceiveSerialData();
if (RecvData()) {
moveTo(Data[0], Data[1], Data[2], Data[3]);
stepperZHohe.run();
stepperZDrehung.run();
stepperGelenk1.run();
stepperGelenk2.run();
}
}
good luck.. ~q
1 Like
system
Closed
April 29, 2024, 1:24am
4
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.