Ondersteuning > Programmeren

Python --> C/C++

(1/3) > >>

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