Stránka 1 z 2

dosazení proměnné

Napsal: 16 led 2022, 09:05
od epzlin
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

}

Re: dosazení proměnné

Napsal: 16 led 2022, 09:59
od kiRRow

Kód: Vybrat vše

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

Re: dosazení proměnné

Napsal: 16 led 2022, 10:28
od epzlin
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}

Re: dosazení proměnné

Napsal: 16 led 2022, 10:38
od gilhad

Re: dosazení proměnné

Napsal: 16 led 2022, 11:23
od jankop

Kód: Vybrat vše

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

Re: dosazení proměnné

Napsal: 16 led 2022, 12:17
od peterple
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

}

Re: dosazení proměnné

Napsal: 17 led 2022, 06:20
od epzlin
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&)'

Re: dosazení proměnné

Napsal: 17 led 2022, 06:59
od epzlin
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.

Re: dosazení proměnné

Napsal: 17 led 2022, 08:27
od epzlin
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);

Re: dosazení proměnné

Napsal: 17 led 2022, 09:41
od ondraN

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šší.