meerdere strings en variabelen printen

algemene C code
Berichten: 139
Geregistreerd: 28 Jul 2013, 13:30

meerdere strings en variabelen printen

Berichtdoor ercmrj » 06 Jun 2020, 13:18

Ik wilde een routine maken om wat eenvoudiger variabelen en tekst achter elkaar te printen.
Nu doe je dat met bv.

Code: Alles selecteren
String inhoud = "12";
Serial.print("inhoud= ");Serial.print(inhoud);Serial.println("ltr");




Nu had ik zoiets in gedachte maar kom er niet uit hoe ik een variabel aantal strings met de subroutine mee kan geven.

Code: Alles selecteren
String inhoud="12";
S_print("inhoud= ",inhoud," ltr")

mltr = "20";
S_print("inhoud= ",inhoud," ltr"," mltr",mltr)

void S_print( var1,var2,var3,var4 enz..... )

   for (int i=0; i <= aantal variabelen; i++){
      Serial.print(variabelen[i]);
   }
Serial.println;


Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: meerdere strings en variabelen printen

Berichtdoor Koepel » 06 Jun 2020, 17:30

In de taal 'c' moet altijd aangegeven worden van welk type een variabele of parameter is.
De functie sprintf() heeft een variabel aantal parameters, maar dat kan dan ook snel verkeerd gaan.
De Arduino Serial.println() functie kan verschillende dingen printen, maar die zijn stuk voor stuk in de code gedefinieerd.
Dan zijn er macro's. Dat is een #define die lijkt op een functie. Daarmee kun je flink aanrommelen.
In de taal 'c++' zijn er templates, dan gaat de compiler pas bij het compileren kijken hoe het opgevat gaat worden en dan pas de echte code gaat maken.

Je kunt eens kijken naar sprintf(), maar het deel wat een 'float' kan laten zien heeft Arduino er uit gehaald :o omdat het vroeger teveel ruimte in beslag nam op een oude ATmega8 :o

Een functie zoals jij die wilt, dat is misschien mogelijk met een template die je op de ene of andere manier kunt voeden met een variabel aantal parameters, terwijl de parameters van alles kunnen zijn en rechtstreeks doorgegeven worden naar de Serial.print(). Dat zie ik nog niet voor me :?

P.S.: Graag altijd een werkende sketch laten zien, zodat wij er mee aan de slag kunnen gaan.

Berichten: 139
Geregistreerd: 28 Jul 2013, 13:30

Re: meerdere strings en variabelen printen

Berichtdoor ercmrj » 06 Jun 2020, 20:27

Ik heb nog eens verder gezocht op internet, maar kan idd niets vinden wat in de buurt komt.

Heb inmiddels onderstaande sketch gemaakt zonder dynamisch array.

Zou mooier zijn als ik de subroutine zo < print_("klaas ",ss ,"kees ") > zou kunnen gebruiken maar dat lukt ook niet.


Code: Alles selecteren
void setup() {

 void setup() {

  Serial.begin(9600);

  String myStrings[8] = {"piet","jan"};

  print_(myStrings);

  int waarde = 12;
  String ss = String(waarde) + " ";
  myStrings[1] = "klaas ";
  myStrings[2] = ss;
  myStrings[3] = "kees ";

  print_(myStrings);
  // print_("klaas ",ss ,"kees ")  zou mooier zijn
 
}

void loop() {
}

void print_(String array_[8]) {
  for (int ii = 1; ii < 8; ii++) {
    Serial.print(array_[ii]);
  }
  Serial.println();
  for (int ii = 1; ii < 8; ii++) {
    (array_[ii] = "");
  }
}



Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: meerdere strings en variabelen printen

Berichtdoor shooter » 06 Jun 2020, 21:51

je kunt toch een code na de laatste in de rij zetten zoals /n
paul deelen
shooter@home.nl

Berichten: 139
Geregistreerd: 28 Jul 2013, 13:30

Re: meerdere strings en variabelen printen

Berichtdoor ercmrj » 07 Jun 2020, 18:55

Onderstaande methode lijkt me nog het beste, op deze manier kun je text en variabelen (String of integer) willekeurig achter elkaar schrijven.

Alleen was ik aan het kijken of je de routines in een bibliotheek kunt zetten. Op zich was dat wel gelukt maar dan komt er weer iets voor.

naam.S("blabla"); naam.IN(10);

Is eigenlijk ook weer niet zo handig.

ps ik begrijp de /n van Shooter nog niet zo goed, dat is toch gewoon een return.

Code: Alles selecteren
char data[100];

void setup() {

  Serial.begin(9600);
  String ss = "test ";
  int ii = 15;
  float fl=12.33;

  S("dit is een "); S(ss); IN(ii); S(" float=");FL(fl);ent();
  S("dit is een "); S(ss); IN(ii); S(" float=");FL(fl);ent();

}

void loop() {
}

void S(String ss) {
  Serial.print(ss);
}

void IN(int kk) {
  String ss = String(kk);
  Serial.print(ss);
}

void FL(float fl){
  String ss = String(fl);
  Serial.print(ss);
}
void ent(){
  Serial.println();
}

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: meerdere strings en variabelen printen

Berichtdoor shooter » 08 Jun 2020, 08:28

ja inderdaad
paul deelen
shooter@home.nl

Berichten: 8
Geregistreerd: 16 Mrt 2021, 21:40

Re: meerdere strings en variabelen printen

Berichtdoor Johi » 19 Mrt 2021, 21:13

Allen

Eigenlijk is de Arduino compiler een C++ compiler.
En in C++ kun je wel wat leuke dingen doen:

Cast de eerste term naar een String en dan tel je gewoon weg de variablen op bij de String die je aan het maken bent.

Code: Alles selecteren
// voorbeeld: de kot van het elektrisch verbruik op basis van het vast recht en het verbruik:

const float huurMeter = 120;
float verbruik = 1;
const float prijsKwh = 0.25;
const float btw = 21;
float kost;
kost = (huurMeter + verbruik * prijsKwh) * (1 + btw / 100.0);

Serial.println((String)"Kost = (" + huurMeter + "+" + verbruik + "*" + prijsKwh + ") * (1+" + btw + "/100.0) = " + kost);



Mvg,
Johi

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 2 gasten