Ondersteuning > Programmeren
Python --> C/C++
henkoegema:
Ik probeer dit stukje programma in (micro)Python om te zetten naar C/C++ voor een Arduino.
(micro)Python
Dit stukje programma leest de gegevens van een sensor.
De inhoud wordt gesplitst m.b.v. de komma (,) in 4 variablelen. (q0, q1,q2 en q3)
--- Code: ---.............
.............
dataPacket=ad.readline() # deze lijn leest de input van een sensor. b.v. "-0.01,0.55,-0.7,-1"
dataPacket=str(dataPacket,'utf-8')
splitPacket=dataPacket.split(",")
q0=float(splitPacket[0])
q1=float(splitPacket[1])
q2=float(splitPacket[2])
q3=float(splitPacket[3])
...........
...........
--- Einde van code ---
Tijdens het testen ben ik tot zover gekomen:
C/C++ (Arduino)
--- Code: ---// https://www.codingame.com/playgrounds/14213/how-to-play-with-strings-in-c/string-split
void setup(){
Serial.begin(115200);
}
void loop(){
char dataPacket[] = "-0.01,0.55,-0.7,-1";
char delim[] = ",";
char *ptr = strtok(dataPacket, delim);
while (ptr != NULL){
Serial.println(ptr);
ptr = strtok(NULL, delim);
q0 = float .......???;
q1 = float .......???;
q2 = float .......???;
q3 = float .......???;
}
// delay(1000);
}
--- Einde van code ---
Output van dit programma is:
Mijn probleem is hoe ik de waarden van de gesplitste string in C/C++ kan toevoegen aan q0, q1,q2,q3. :|
erik1984:
Zoiets werkt als je zeker weet dat er in dataPacket[] altijd netjes 4 getallen zitten bij splitsen op komma. Ik ben zeker geen C-expert, dus voor eigen risico ;) C is een mijnenveld waarin je heel makkelijk een stapje verkeerd zet.
--- Code: ---#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int main (int argc, char *argv[])
{
char dataPacket[] = "-0.01,0.55,-0.7,-1";
char delim[] = ",";
float q0 = atof(strtok(dataPacket, delim));
float q1 = atof(strtok(NULL, delim));
float q2 = atof(strtok(NULL, delim));
float q3 = atof(strtok(NULL, delim));
printf("q0 = %f\n", q0);
printf("q1 = %f\n", q1);
printf("q2 = %f\n", q2);
printf("q3 = %f\n", q3);
return 0;
}
--- Einde van code ---
henkoegema:
Erik.
Het is bijna goed. ;)
De waarde van q0 is ok.
Echter de waarden van q1,q2,q3 zijn allemaal 0.00 :'(
--- Code: ---
void setup(){
Serial.begin(115200);
}
void loop(){
char dataPacket[] = "-0.01,0.55,-0.7,-1";
char delim[] = ",";
char *ptr = strtok(dataPacket, delim);
float q0 = atof(strtok(dataPacket, delim));
float q1 = atof(strtok(NULL, delim));
float q2 = atof(strtok(NULL, delim));
float q3 = atof(strtok(NULL, delim));
Serial.println(q0);
Serial.println(q1);
Serial.println(q2);
Serial.println(q3);
delay(1000);
}
--- Einde van code ---
henkoegema:
--- Citaat van: erik1984 op 2021/04/11, 19:57:29 ---Zoiets werkt als je zeker weet dat er in dataPacket[] altijd netjes 4 getallen zitten bij splitsen op komma. Ik ben zeker geen C-expert, dus voor eigen risico ;) C is een mijnenveld waarin je heel makkelijk een stapje verkeerd zet.
--- Code: ---#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int main (int argc, char *argv[])
{
char dataPacket[] = "-0.01,0.55,-0.7,-1";
char delim[] = ",";
float q0 = atof(strtok(dataPacket, delim));
float q1 = atof(strtok(NULL, delim));
float q2 = atof(strtok(NULL, delim));
float q3 = atof(strtok(NULL, delim));
printf("q0 = %f\n", q0);
printf("q1 = %f\n", q1);
printf("q2 = %f\n", q2);
printf("q3 = %f\n", q3);
return 0;
}
--- Einde van code ---
--- Einde van citaat ---
In jouw programma werkt het WEL. =D
In mijn Arduino (nog niet)
henkoegema:
Hoera, hoera. Het werkt. =D
Bij deze mijn dank aan Erik voor de genomen moeite. ^-^
Navigatie
[0] Berichtenindex
[#] Volgende pagina
Naar de volledige versie