Buggfix Plus
Aktuellt datum och tid: 09.19 2020-04-06

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 21 inlägg ]  Gå till sida 1, 2  Nästa
Författare Meddelande
 Inläggsrubrik: Compare string?
InläggPostat: 09.58 2016-02-19 

Blev medlem: 22.34 2011-04-06
Inlägg: 34
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");

}
}


Upp
 Profil  
 
 Inläggsrubrik: Re: Compare string?
InläggPostat: 10.00 2016-02-19 
EF Sponsor
Användarvisningsbild

Blev medlem: 15.29 2005-05-10
Inlägg: 38388
Ort: Söderköping
Använd gärna code-taggarna så att koden går att läsa.
Sen kan vi kolla på problemet.
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
[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 10.11 2016-02-19, redigerad totalt 1 gång.

Upp
 Profil  
 
 Inläggsrubrik: Re: Compare string?
InläggPostat: 10.10 2016-02-19 

Blev medlem: 14.59 2006-02-27
Inlägg: 4627
Ort: Tranås (Jönköping)
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?


Upp
 Profil  
 
 Inläggsrubrik: Re: Compare string?
InläggPostat: 10.21 2016-02-19 

Blev medlem: 16.26 2009-02-13
Inlägg: 973
Ort: Jönköping
Camro skrev:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
if (AltOne== AltTwo)
   {
   Serial.println (" Value is correct");
}
else if (AltOnel==AltTwo)
{
 
Serial.println("Counting");

}

}


Troligen kompileringsfel då AltOnel inte är deklarerad.

--Per


Upp
 Profil  
 
 Inläggsrubrik: Re: Compare string?
InläggPostat: 10.29 2016-02-19 
EF Sponsor
Användarvisningsbild

Blev medlem: 15.29 2005-05-10
Inlägg: 38388
Ort: Söderköping
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... :-)


Upp
 Profil  
 
 Inläggsrubrik: Re: Compare string?
InläggPostat: 10.30 2016-02-19 

Blev medlem: 14.59 2006-02-27
Inlägg: 4627
Ort: Tranås (Jönköping)
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().


Upp
 Profil  
 
 Inläggsrubrik: Re: Compare string?
InläggPostat: 10.53 2016-02-19 

Blev medlem: 06.51 2008-05-19
Inlägg: 22811
Ort: Upplands väsby
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?


Upp
 Profil  
 
 Inläggsrubrik: Re: Compare string?
InläggPostat: 10.57 2016-02-19 
EF Sponsor
Användarvisningsbild

Blev medlem: 15.29 2005-05-10
Inlägg: 38388
Ort: Söderköping
Som sagt, vi *vet* ju inte hur motsvarande kod med strängar faktiskt ser/såg ut... :-)


Upp
 Profil  
 
 Inläggsrubrik: Re: Compare string?
InläggPostat: 11.17 2016-02-19 

Blev medlem: 06.51 2008-05-19
Inlägg: 22811
Ort: Upplands väsby
Nej men frasen
Citera:
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.


Upp
 Profil  
 
 Inläggsrubrik: Re: Compare string?
InläggPostat: 11.22 2016-02-19 

Blev medlem: 21.28 2004-10-09
Inlägg: 908
Ort: Västerås
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.


Upp
 Profil  
 
 Inläggsrubrik: Re: Compare string?
InläggPostat: 11.55 2016-02-19 

Blev medlem: 22.34 2011-04-06
Inlägg: 34
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");
}

}


Upp
 Profil  
 
 Inläggsrubrik: Re: Compare string?
InläggPostat: 12.01 2016-02-19 
EF Sponsor
Användarvisningsbild

Blev medlem: 15.29 2005-05-10
Inlägg: 38388
Ort: Söderköping
> 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?


Upp
 Profil  
 
 Inläggsrubrik: Re: Compare string?
InläggPostat: 12.15 2016-02-19 
Användarvisningsbild

Blev medlem: 14.52 2005-01-10
Inlägg: 24338
Ort: Aabenraa, Danmark
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.


Upp
 Profil  
 
 Inläggsrubrik: Re: Compare string?
InläggPostat: 12.42 2016-02-19 
EF Sponsor
Användarvisningsbild

Blev medlem: 15.29 2005-05-10
Inlägg: 38388
Ort: Söderköping
Lite beroende på vad man vill veta så kanske detta också fungerar:

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
  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.


Upp
 Profil  
 
 Inläggsrubrik: Re: Compare string?
InläggPostat: 13.28 2016-02-19 

Blev medlem: 21.06 2011-01-29
Inlägg: 969
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;"


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 21 inlägg ]  Gå till sida 1, 2  Nästa

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 7 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
   
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010