Compare string?

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Camro
Inlägg: 34
Blev medlem: 6 april 2011, 23:34:07

Compare string?

Inlägg av Camro »

Hej



Följande program fungerar bra i Arduinoś IDE. Men när jag vill byta ut integer mot en ASCII string så fungerar det inte. Har provat att byta ut alla int mot String och bytt ut Serial.parseInt mot Serial.readString. Vad gör jag för fel?



Mvh Tommy

-----------------------------------------------------------------------------------------

int AltOne=2000;
int AltTwo;
//nt val=1;
//int sensorValue = 0;
void setup() {
Serial.begin(9600);

}

void loop() {
AltTwo = Serial.parseInt();

if (AltOne== AltTwo)
{
Serial.println (" Value is correct");
}
else if (AltOnel==AltTwo)
{

Serial.println("Counting");

}
}
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43152
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Compare string?

Inlägg av sodjan »

Använd gärna code-taggarna så att koden går att läsa.
Sen kan vi kolla på problemet.

Kod: Markera allt

[code]
  int AltOne=2000;
  int AltTwo;
  //nt val=1;
...
...
[/code]
Och det är nog även en bra idé att visa den ändrade koden
som inte fungerar och inte bara en otydlig förklaring.
Senast redigerad av sodjan 19 februari 2016, 10:11:17, redigerad totalt 1 gång.
FormerMazda
Inlägg: 6066
Blev medlem: 27 februari 2006, 14:59:36
Ort: Tranås (Jönköping)

Re: Compare string?

Inlägg av FormerMazda »

Följdfråga från en som kan läsa kod utan code-taggar ( :wink: )
Vad exakt är det som inte funkar? Får du fel vid kompilering, eller blir inte resultatet som du tänkt dig?
perra_e
Inlägg: 983
Blev medlem: 13 februari 2009, 16:26:53
Ort: Jönköping

Re: Compare string?

Inlägg av perra_e »

Camro skrev:

Kod: Markera allt

if (AltOne== AltTwo)
   {
   Serial.println (" Value is correct");
}
else if (AltOnel==AltTwo)
{
  
Serial.println("Counting");

}
}
Troligen kompileringsfel då AltOnel inte är deklarerad.

--Per
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43152
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Compare string?

Inlägg av sodjan »

Det är ju svårt att säga eftersom den kod som visades
ju inte var den som inte fungerade. Det är bättre att vänta
på att rätt kod visas innan man analyserar för mycket... :-)
FormerMazda
Inlägg: 6066
Blev medlem: 27 februari 2006, 14:59:36
Ort: Tranås (Jönköping)

Re: Compare string?

Inlägg av FormerMazda »

Men den felskrivningen var så uppenbar, så jag misstänker att den inte är problemet?

Jag tror snarare att Serial.parseInt() aldrig blir = 2000?
Istället för att få villkoren att bli vad du vill, testa att debugga genom att skriva ut vad du får ur Serial.parseInt().
Nerre
Inlägg: 26655
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Compare string?

Inlägg av Nerre »

Du kan väl inte jämföra två strängar med "=="? För att jämföra strängar i C så använder man ju strcmp() eller nåt sånt?
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43152
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Compare string?

Inlägg av sodjan »

Som sagt, vi *vet* ju inte hur motsvarande kod med strängar faktiskt ser/såg ut... :-)
Nerre
Inlägg: 26655
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Compare string?

Inlägg av Nerre »

Nej men frasen
Men när jag vill byta ut integer mot en ASCII string så fungerar det inte.
är ganska talande. I C är det ju en enorm skillnad mellan integers och strängar. En sträng är ju egentligen en pekare till en en null-terminerad array. Jag kan inte komma på en enda situation i C där man kan byta integer mot sträng rakt av.
zealotry
Inlägg: 918
Blev medlem: 9 oktober 2004, 22:28:40
Ort: Västerås

Re: Compare string?

Inlägg av zealotry »

Nerre skrev:Du kan väl inte jämföra två strängar med "=="? För att jämföra strängar i C så använder man ju strcmp() eller nåt sånt?
I arduino-världen är det ok: https://www.arduino.cc/en/Tutorial/Stri ... nOperators

Fast lite oklart vilken sorts sträng som används här.
Camro
Inlägg: 34
Blev medlem: 6 april 2011, 23:34:07

Re: Compare string?

Inlägg av Camro »

Ok jag ska förtydliga mig.

Följande kod funkar bra.
----------------------------------

int One=2000;
int Two;
//int val=1;
//int sensorValue = 0;
void setup() {
Serial.begin(9600);

}

void loop() {
Two = Serial.parseInt();

if (One== Two)
{
Serial.println (" Value is correct");
}


}
----------------------------------------------------

Men när jag vill låsa ascii tecken på serieporten istället för integer funkar det inte, vad gör jag för fel? Vill alltså att när jag skickar "xxx" på serieporten så ska svaret på serieporten bli "Value is correct". I båda fallen kompileras det korrekt men koden fungerar inte.

----------------------------------------------------

String One="xxx";
String two;
//int val=1;
//int sensorValue = 0;
void setup() {
Serial.begin(9600);

}

void loop() {
two = Serial.readString();
if (One== two)
{
Serial.println (" Value is correct");
}

}
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43152
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Compare string?

Inlägg av sodjan »

> Ok jag ska förtydliga mig.

Code-taggarna är en bra början till det...

Om du gör Serial.println på både One och two (varför inte Two?)
så ser båda helt OK ut?
Användarvisningsbild
Icecap
Inlägg: 26106
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Compare string?

Inlägg av Icecap »

Arduino kör en sorts C++ varför man kan jämföra två strängar på det sätt som anges.

När du läser en sträng, vad avgör att den är avslutat? Är det <Enter>?
Och kommer den med i strängen?

Jag hade ju testat att skriva ut den mottagna sträng, byte för byte, för att se vilka data som finns i den, sedan får man lösa problemet.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43152
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Compare string?

Inlägg av sodjan »

Lite beroende på vad man vill veta så kanske detta också fungerar:

Kod: Markera allt

  if (two.substring(1) == One)
  {
    Serial.println (" Value is correct");
  }
Men som sagt, A och O här är ju att faktiskt *veta* vad One
respektive two innehåller säkert.
Mr Andersson
Inlägg: 1394
Blev medlem: 29 januari 2011, 21:06:30
Ort: Lapplandet

Re: Compare string?

Inlägg av Mr Andersson »

Det finns, som jag ser det, några problem med Serial.ReadString().
Det är en blockerande funktion. Den stannar hela programmet i Serial.setTimeout() ms.
Den stannar bara efter Serial.setTimeout() ms. Är du för snabb att repetera sändningen får du dubbletter i strängen. Och innehåller det du skickar en newline så får du med det i resultatsträngen. Vill du bryta på newline (eller valfritt annat tecken) så är readStringUntil() bättre.
Det är en String-funktion så det blir en väldans massa new/delete i bakgrunden.

Se t.ex. https://hackingmajenkoblog.wordpress.co ... e-arduino/ för ett bättre exempel. Och vill du sen ha resultatet som en String så "String mystring = buffer;"
Skriv svar