dosazení proměnné

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
epzlin
Příspěvky: 37
Registrován: 17 črc 2019, 19:22
Reputation: 0

dosazení proměnné

Příspěvek od epzlin » 16 led 2022, 09:05

Jak dosadím proměnnou "pozice" namísto čísla "1" v loopu? Obráceným lomítkem jsem to zkoušel, ale nepřišel jsem na to.

Kód: Vybrat vše

#include "MegunoLink.h"
TimePlot MyPlot; //no channel selected

byte pozice = 2;

void setup() {
  Serial.begin(57600);  
  MyPlot.SetXLabel("Time");
  MyPlot.SetYLabel("Value");

  MyPlot.SetSeriesProperties("C1", Plot::Black, Plot::Solid, 2, Plot::NoMarker);
}

void loop() {
  MyPlot.SendData("C1", 1555);	//tady potrebuju dosadit prommenou "pozice" místo čísla 1. Znak "C" musí zůstat

}

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: dosazení proměnné

Příspěvek od kiRRow » 16 led 2022, 09:59

Kód: Vybrat vše

MyPlot.SetSeriesProperties("C" + pozice, Plot::Black, Plot::Solid, 2, Plot::NoMarker);

epzlin
Příspěvky: 37
Registrován: 17 črc 2019, 19:22
Reputation: 0

Re: dosazení proměnné

Příspěvek od epzlin » 16 led 2022, 10:28

nefunguje. Na výstupu serialu mi to dává:

{TIMEPLOT|DATA|nan|T|4105.95}
{TIMEPLOT|DATA|an|T|4107.09}
{TIMEPLOT|DATA|n|T|4043.70}
{TIMEPLOT|DATA||T|4072.18}

Ty čísla 4105,95 atd jsou dosazená z pole dat. To je OK. Mělo by to vypadat takto:

{TIMEPLOT|DATA|C1|T|4105.95}
{TIMEPLOT|DATA|C2|T|4107.09}
{TIMEPLOT|DATA|C3|T|4043.70}
{TIMEPLOT|DATA|C4|T|4072.18}


jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: dosazení proměnné

Příspěvek od jankop » 16 led 2022, 11:23

Kód: Vybrat vše

MyPlot.SendData("C"+String(pozice), 1555);

peterple
Příspěvky: 156
Registrován: 22 zář 2021, 20:20
Reputation: 0

Re: dosazení proměnné

Příspěvek od peterple » 16 led 2022, 12:17

A čo napríklad použiť premennú miesto konštanty? Pozor bude to fungovať iba na jednu cifru. Teda v rozsahu 0-9

Kód: Vybrat vše

#include "MegunoLink.h"
TimePlot MyPlot; //no channel selected

byte pozice = 2;
char seriesName[] = "C1";
void setup() {
  Serial.begin(57600);  
  MyPlot.SetXLabel("Time");
  MyPlot.SetYLabel("Value");

  MyPlot.SetSeriesProperties(seriesName, Plot::Black, Plot::Solid, 2, Plot::NoMarker);
}

void loop() {
  seriesName[1]=pozice|'0';
  MyPlot.SendData(seriesName, 1555);  //tady potrebuju dosadit prommenou "pozice" místo čísla 1. Znak "C" musí zůstat

}

epzlin
Příspěvky: 37
Registrován: 17 črc 2019, 19:22
Reputation: 0

Re: dosazení proměnné

Příspěvek od epzlin » 17 led 2022, 06:20

jankop píše:
16 led 2022, 11:23

Kód: Vybrat vše

MyPlot.SendData("C"+String(pozice), 1555);
no matching function for call to 'XYPlot::SendData(StringSumHelper&, long unsigned int&, float&)'

epzlin
Příspěvky: 37
Registrován: 17 črc 2019, 19:22
Reputation: 0

Re: dosazení proměnné

Příspěvek od epzlin » 17 led 2022, 06:59

peterple píše:
16 led 2022, 12:17
Ano, funguje to. Je způsob, jak to rozchodit i pro větší čísla než 9? Stačí v rozsahu byte.

epzlin
Příspěvky: 37
Registrován: 17 črc 2019, 19:22
Reputation: 0

Re: dosazení proměnné

Příspěvek od epzlin » 17 led 2022, 08:27

Tak zatím jsem to vyřešil takto, ikdyž to asi není moc elegantní. Naštěstí mi stačí 16 pozic.

Kód: Vybrat vše

char names[16][4] = {//16radku o 3znacich
 "C01",
 "C02",
 "C03",
 "C04",
 "C05",
 "C06",
 "C07",
 "C08",
 "C09",
 "C10",
 "C11",
 "C12",
 "C13",
 "C14",
 "C15",
 "C16",    
};


MyPlot.SendData(names[pozice], 1555);

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: dosazení proměnné

Příspěvek od ondraN » 17 led 2022, 09:41

Kód: Vybrat vše

char seriesName[5]={C000};
byte num=0;
for (byte i=0, byte n=100; i<3; i++, n=n/10 ){
	seriesName[i+1]='0'+(num /n);
	num=num %n;
}
pro číslo 136 bude řetězec "C136", pro 1 bude "C001" pro 56 bude "C056"
Šlo by to i bez těch nul před číslem, ale nevím, jestli je tam potřebuješ. Pokud je to jedno, je tenhle postup nejjednodušší.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Google [Bot] a 12 hostů