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