Sida 1 av 2
					
				Compare string?
				Postat: 19 februari 2016, 09:58:47
				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");
}
  }
			 
			
					
				Re: Compare string?
				Postat: 19 februari 2016, 10:00:43
				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.
 
			
					
				Re: Compare string?
				Postat: 19 februari 2016, 10:10:34
				av FormerMazda
				Följdfråga från en som kan läsa kod utan code-taggar ( 

 )
Vad exakt är det som inte funkar? Får du fel vid kompilering, eller blir inte resultatet som du tänkt dig?
 
			
					
				Re: Compare string?
				Postat: 19 februari 2016, 10:21:27
				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
 
			
					
				Re: Compare string?
				Postat: 19 februari 2016, 10:29:03
				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... 

 
			
					
				Re: Compare string?
				Postat: 19 februari 2016, 10:30:47
				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().
			 
			
					
				Re: Compare string?
				Postat: 19 februari 2016, 10:53:48
				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?
			 
			
					
				Re: Compare string?
				Postat: 19 februari 2016, 10:57:18
				av sodjan
				Som sagt, vi *vet* ju inte hur motsvarande kod med strängar faktiskt ser/såg ut... 

 
			
					
				Re: Compare string?
				Postat: 19 februari 2016, 11:17:53
				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.
 
			
					
				Re: Compare string?
				Postat: 19 februari 2016, 11:22:21
				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.
 
			
					
				Re: Compare string?
				Postat: 19 februari 2016, 11:55:55
				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");
}
}
			 
			
					
				Re: Compare string?
				Postat: 19 februari 2016, 12:01:41
				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?
			 
			
					
				Re: Compare string?
				Postat: 19 februari 2016, 12:15:09
				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.
			 
			
					
				Re: Compare string?
				Postat: 19 februari 2016, 12:42:12
				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.
 
			
					
				Re: Compare string?
				Postat: 19 februari 2016, 13:28:22
				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;"