Sida 1 av 2

Arduino - Lägga till nummer på String variabeln

Postat: 26 mars 2018, 23:40:38
av GeekJoan
Alltså antingen är jag trött eller så är det kortslutning i skallen just nu.
Jag vill bara lägga till ett nummer på slutet av en "variabel".

int Nr = 0;
String Data[Nr] = "";

INData = client.read();

if (INData == '#'){Switch = 1;}
if (INData == '*'){Switch = 0; Nr++}

if (Switch == 1){Data[Nr] += INData;

Så för varje gång det kommer en * så räknar den upp 1 så jag får strängar som heter:
Data1
Data2
Data3, osv.

Re: Arduino - Lägga till nummer på String variabeln

Postat: 27 mars 2018, 00:27:45
av sodjan
Får du verkligen det? Är inte [n] indexering av en array?

Re: Arduino - Lägga till nummer på String variabeln

Postat: 27 mars 2018, 01:23:06
av GeekJoan
Jag frågar ju hur man gör... Jag har ingen aning. Jag tar saker ut röven och stoppar in dom i mitt lilla program och hoppas att det ska funka.

Re: Arduino - Lägga till nummer på String variabeln

Postat: 27 mars 2018, 07:24:48
av LarryXz

Re: Arduino - Lägga till nummer på String variabeln

Postat: 27 mars 2018, 08:29:22
av johano
Funkar väl att bara lägga till integern till strängen?

Kod: Markera allt

int Nr=3;
String data="Data";
String test = data + Nr;
Eller har jag missförstått totalt?

/j

Re: Arduino - Lägga till nummer på String variabeln

Postat: 27 mars 2018, 09:16:52
av Icecap
I C++ kan man lägga en sträng/ett tecken i slutet av en sträng just vid att köra:
Sträng = Sträng + Ny_Del;

Re: Arduino - Lägga till nummer på String variabeln

Postat: 27 mars 2018, 13:41:07
av sodjan
Men Data[Nr] är väl en array som heter Data (indexerat av Nr), inte
en sträng med innehållet "Data"...

Sen så behöver kanske arrayen dimensioneras också, om det inte sker dynamiskt.
Och du får alltså Data[1], Data[2], Data[3] o.s.v. Var och en kan innehålla
valfri sträng.

Re: Arduino - Lägga till nummer på String variabeln

Postat: 27 mars 2018, 13:54:23
av johano
Det var lite otydligt, jag trodde också först att det rörde sig om array:er.
Men efter sista meningen
GeekJoan skrev: "Så för varje gång det kommer en * så räknar den upp 1 så jag får strängar som heter:
Data1
Data2
Data3, osv.
så tolkade jag som att det rörde sig om att bygga upp strängar med en fast text "Data" och sen ett dynamiskt nummer.

Men kan ju vara helt fel.

/j

Re: Arduino - Lägga till nummer på String variabeln

Postat: 27 mars 2018, 14:42:36
av sodjan
Det är inte heller klart om "att få strängar" betyder att de existerar en i taget. Eller om de ska existera samtidigt. Ska det bli data[1]="data1", daya[2]="data2" osv.? Man kan ju inte bara skapa strängar löst i luften, de måste lagras någonstans också...

Re: Arduino - Lägga till nummer på String variabeln

Postat: 27 mars 2018, 21:13:56
av GeekJoan
Låt mig förklara. Tror ifs att jag kommit på en annan lösning, men det kunde ju vara bra att veta om det faktiskt gå som jag tänkt först.

Jag kan deklarera strängarna i förväg. Inga problem.

String Data1 = "";
String Data2 = "";
String Data3 = "";
String Data4 = "";
int Nr = 1;


Men i själva loopen skulle jag vilja stoppa in text i sträng Data1 som kommer från hemsida tex. "denna text hamnar i sträng 1".
När ett tecken från hemsidan kommer så vill jag kunna ändra Data1 till Data2 och knöla in "nu kommer det mer text som hamnar i Data2".

Alltså:
INData = client.read(); // Läser av hemsidan och stoppar in det i INData.
if (INData == '*'){ Nr++}; // Om ett * kommer från hemsidan till INData så räknar Nr upp ett
Data(Nr) += INData; // Bygg till inkommande tecken från INData till sträng Data1.

Ex text från hemsidan:
denna text hamnar i sträng 1*nu kommer det mer text som hamnar i Data2 tills nästa*kommer

Resultat:
denna text hamnar i sträng 1 // Åker in i Data1.
*nu kommer det mer text som hamnar i Data2 tills nästa // Åker in i Data2
*kommer // Åker in i Data3

Re: Arduino - Lägga till nummer på String variabeln

Postat: 27 mars 2018, 22:28:34
av mrfrenzy
Det du beskriver är en stack, det finns funktioner för att implementera detta exempel: https://playground.arduino.cc/Code/StackArray

Frågan är varför du vill göra det och vad slutresultatet ska bli? Det finns förmodligen enklare sätt.

Edit: Läste lite noggrannare. Du behöver bara en forloop och en array som Larry länkade.

Re: Arduino - Lägga till nummer på String variabeln

Postat: 28 mars 2018, 01:04:31
av sodjan
Data1 = "";
Data2 = "";
Data3 = "";
Data4 = "";

Varje variabel är en egen variabel. Du kan inte ersätta
siffran i namnet med en annan variabel. Det är det man
har en "array" till. Alltså:

Data[1] = "";
Data[2] = "";
Data[3] = "";
Data[4] = "";

Sen kan du sätta i olika "index" mellan klamrarna och hantera
olika "element" i arrayen.

Notera att Data1, Data2, Data3 och Data4 är *4* helt olika variabler, de
har inget samband med varandra, de bara råkar ha liknande namn. Däremot
är Data[1], Data[2], Data[3] och Data[4] en och samma variabel, en array.

Re: Arduino - Lägga till nummer på String variabeln

Postat: 28 mars 2018, 07:14:28
av TomasL
Jag tror du vill göra så här:

Kod: Markera allt

char tmp[3];
int Nr = 0;
String Data[Nr] = "";

INData = client.read();
......
..........
.........
itoa(Nr, tmp,10);        //gör om en integer till en sträng, lagrar det i tmp[]
strcat(INData,tmp);    //lägger till tmp[] i slutet på INData
strcpy (data[Nr], INData);     //Lägger in det hela i arrayen data
Utmatningen blir då så här:
Nr = 0
INData = "Datagram\0"
itoa()-> tmp = "00\0"
strcat()-> INData = "Datagram00\0"
strcpy -> data[0] = "Datagram00\0"

Om Nr =10, blir då resultatet i Data[10] "Datagram10\0"

\0 betyder strängavslut.
Exakt syntax får du kika på, för detta är i princip så man gör i C

Re: Arduino - Lägga till nummer på String variabeln

Postat: 28 mars 2018, 20:08:37
av GeekJoan
Så här blev det till slut.

String SLArray[6];
char INData = 0;
int Switch = 0;
int Nr = 0;

loop

if (client.available()) {INData = client.read(); // Läser in data från hemsida
if (INData == '#'){Switch = 1; INData=' ';} // Om # tecken kommer så sätt Switch till 1 och byt ut # mot mellanslag.
if (INData == '*'){Switch = 0; Nr++;} // Om * kommer sätt Switch till 0 och räkna upp Nr +1.
if (Switch == 1 && INData != '\n'){SLArray[Nr] += INData;} // Om Switch är 1 och inkommande data inte är en radbrytning Bygg på Array["Nr"0] med inkommande data.
}
int i;
for(i=0;i <= Nr;i = i + 1){Serial.println(SLArray);} // Skriv ut varje Array på en egen rad. Detta kommer senare att bli en egen rad i en LCD.


Verkar funka fint.
Så nu är det klart.

Men då har jag så klart en fråga till.
På raden:

if (INData == '#'){Switch = 1; INData=' ';}
så byter jag ut # till ett mellanslag för jag vill inte ha in # i strängen för då blir det så här: #Sundbyberg.
Vad jag skulle vilja göra är så klart att den bara ignorerar det tecknet istället för att göra det till ett mellanslag. Men att skriva 'Utan mellanslag' går inte. Finns det något smart typ som för radbrytning '\n' som är "ingenting" som jag skulle kunna använda?

Re: Arduino - Lägga till nummer på String variabeln

Postat: 28 mars 2018, 20:44:04
av johano

Kod: Markera allt

if (INData == '#'){Switch = 1; INData='\n';}
eller

Kod: Markera allt

if (INData == '#'){Switch = 0; INData=' ';}
Borde väl funka med den logik du har lite längre ner?
/j