сравнение String на int

zur
Offline
Зарегистрирован: 18.04.2017

доброго времени суток...

как решить проблему...

сериал поступает данные форматe X:100:100

делаю pasing записываю в counter i sped  

counter=currStr.substring(2,4); 
sped=currStr.substring(5,8);
из кнопки поступает импульсы в 
if(digitalRead(10) == LOW  && FS_0 == 0 && FS_2 == 4) FS_0 = 1;
 if (FS_0 == 1)
{
   Count1++;
  if (Count1 <0){
  Count1=0;
 
нужно сравнить counter и Count 1 но не работает  :-(
if (FS_1 == 1 &&  counter == Count1 ) FS_1 = 2; 
 if (FS_1 == 2)
 
kak можно сравнить String и int...
заранее благодарен...
вот скетч целиком
 
 
#include <SoftwareSerial.h>
SoftwareSerial mySerial(11, 12); 
///String inString = "";    // string to hold input
 
 
uint8_t FS_0 = 0;
uint8_t FS_1 = 0;
uint8_t FS_2 = 0;
 
String currStr = "";
String counter = ""; 
String sped = "";
boolean isStringMessage = false;
 int  Count1 = 0; 
String  x ="";
 
byte i;
byte j;  
 
void setup()
{
 
  
 mySerial.begin(9600);
 Serial.begin(9600);
 Serial.println("MACHINE READY");
 
pinMode (10, INPUT);
digitalWrite(10, HIGH);
pinMode (10, INPUT_PULLUP); 
 
 
}
void loop()
{
 
  encoder();
 
 if (!znSerial.available())
 return;
 
 char currSymb = mySerial.read();
  
 if ('\r' == currSymb) {
 if (isStringMessage) {
  
 if (!currStr.compareTo("REV")) 
 {
  Serial.println("reverce-Ok");
  FS_1 = 1;
  FS_2 = 4;
 }
 
else if (!currStr.compareTo("FOR")) 
{
Serial.println("forward-Ok");
 FS_1 = 1;
 FS_2 = 4;
}
 
else if (!currStr.compareTo("STO")) 
{
Serial.println("Stop-Ok");
FS_1 = 0;
 
}
 
 isStringMessage = false;
 } 
 else 
 {
 if (currStr.startsWith("X")) 
 {
 Serial.println(currStr);
counter=currStr.substring(2,4); ///impulsebi brunebistvis
sped=currStr.substring(5,8);/// sichqaris registris gamoyofa
 
Serial.println(sped);
Serial.println(counter);
isStringMessage = true;
 }
 }
 currStr = "";
 } else if ('\n' != currSymb) {
 currStr += String(currSymb);
 }
}
 
void encoder()
{
  if(digitalRead(10) == LOW  && FS_0 == 0 && FS_2 == 4) FS_0 = 1;
 if (FS_0 == 1)
{
   Count1++;
  if (Count1 <0){
  Count1=0;
   
  }
  Serial.println(Count1);
  Serial.println(counter);
   
 
 FS_0 = 2;
 
 
if(digitalRead(10) == HIGH  )
{
  FS_0 = 0;
}
  /// Value = counter;
 if (FS_1 == 1 &&  counter == Count1 ) FS_1 = 2; 
 if (FS_1 == 2)
 {
  Serial.println("ENGINE STOP");
    
    Count1 = 0;
    ///counter ="";
  FS_2 = 5;
  FS_1 = 0; 
 }
}
 
 

 

 

sadman41
Offline
Зарегистрирован: 19.10.2016
andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

String и int сравнить нельзя. Придумайте какой-нибудь другой способ решить Вашу задачу, не используя подобные сравнения.

Logik
Offline
Зарегистрирован: 05.08.2014

Стринг больше. Потому что длинней почти всегда.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Зато длина строки может быть меньше 2. Поэтому не всегда.

Logik
Offline
Зарегистрирован: 05.08.2014

andriano пишет:

Зато длина строки может быть меньше 2. Поэтому не всегда.

То менее 1%. Принебрегаем.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

zur пишет:

как решить проблему...

Для начала правильно вставить код, ибо ...

sadman41 пишет:

Кодокашу не читал, 

И большинство остальных также не читали.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

В 5 фрагменте кода 23 строка содержит ошибку!

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Отказаться от типа String и не пользовать какашки.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Кодокашу не пользовать.

Строку преобразовать в чисто или число в строку, а затем сравнивать.

Aleksk
Offline
Зарегистрирован: 08.06.2016

int Value = atoi(counter);    // преобразование строки в число типа int

 if (FS_1 == 1 &&  Value == Count1 ) FS_1 = 2;
 
 
тут обзор почти всех функций преобрахования строки в число