Arduino - Lägga till nummer på String variabeln
Arduino - Lägga till nummer på String variabeln
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.
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
Får du verkligen det? Är inte [n] indexering av en array?
Re: Arduino - Lägga till nummer på String variabeln
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
Funkar väl att bara lägga till integern till strängen?
Eller har jag missförstått totalt?
/j
Kod: Markera allt
int Nr=3;
String data="Data";
String test = data + Nr;
/j
Re: Arduino - Lägga till nummer på String variabeln
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;
Sträng = Sträng + Ny_Del;
Re: Arduino - Lägga till nummer på String variabeln
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.
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
Det var lite otydligt, jag trodde också först att det rörde sig om array:er.
Men efter sista meningen
Men kan ju vara helt fel.
/j
Men efter sista meningen
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.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.
Men kan ju vara helt fel.
/j
Re: Arduino - Lägga till nummer på String variabeln
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
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
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
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.
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
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.
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
Jag tror du vill göra så här:
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
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
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
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?
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
Kod: Markera allt
if (INData == '#'){Switch = 1; INData='\n';}
Kod: Markera allt
if (INData == '#'){Switch = 0; INData=' ';}
/j