Black Friday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
BF extended 2022

Diskuze: Proč dva stejné řetězce nejsou stejné?

Aktivity
Avatar
Petr Adámek
Člen
Avatar
Petr Adámek:24.4.2020 16:23

Ahoj
Zkouším porovnat dva String řetězce, které mají stejný obsah, ale při porovnání neplatí rovnost. Arduino odešle zprávu PRIPOJENO kterou načtu a pak srovnávám s řetězcem uloženým v proměnné. Obsah je totožnej, ověřeno výpisem do Labelu.

c sharp

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;

namespace WindowsFormsApplication22
{
    public partial class Form1 : Form
    {

        String[] ports;
        SerialPort port;
        String nacitani;
        String porovnani ="PRIPOJENO";
        int vysledek = 0;
        public Form1()
        {
            InitializeComponent();

        }



        private void button1_Click(object sender, EventArgs e)
        {


                ports = SerialPort.GetPortNames();
                port = new SerialPort(ports[0], 9600, Parity.None, 8, StopBits.One);
                port.Open();
                System.Threading.Thread.Sleep(2000);
                port.WriteLine("ANO");

                nacitani = port.ReadLine();

                vysledek = String.Compare(porovnani,nacitani);
                MessageBox.Show(vysledek.ToString());

            port.Close();
        }



    }

Arduino

String inputString="";
byte stringComplete;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

}

void loop() {
  while (Serial.available()) {
    char inChar = (char)Serial.read();
    inputString += inChar;
    if (inChar == '\n') {
      stringComplete = true;
    }
  }

  if (stringComplete){
    inputString.trim();
    char* data = inputString.c_str();
    char* part = strtok(data, " ");

      //ČTENÍ
      if (strcmp(data, "ANO") == 0)
      {
      //Serial.print("HODINA1=");
      Serial.println("PRIPOJENO");
      }


    inputString="";
    stringComplete=0;
  }



}

Zkusil jsem: Zkoušel jsem porovnávat přes if, equals

Chci docílit: Ověřuji správný port.

 
Odpovědět
24.4.2020 16:23
Avatar
HONZ4
Člen
Avatar
Odpovídá na Petr Adámek
HONZ4:24.4.2020 18:31

možná obsahuje nějaký neviditelný znak.
Zkus:
vysledek = String.Compare(po­rovnani,nacita­ni.Trim());

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
24.4.2020 18:31
Avatar
Odpovídá na Petr Adámek
Luboš Běhounek Satik:24.4.2020 18:32

Voláš Serial.println - za text PRIPOJENO se ti ještě podle nastavení arduina připojí jeden nebo dva znaky, které označují nový řádek, takže třeba v labelu to vidět není, ale v tom co ti přijde z arduina je jeden nebo dva znaky navíc.
Mělo by jen stačit místo println volat print.

Editováno 24.4.2020 18:34
Nahoru Odpovědět
24.4.2020 18:32
https://www.facebook.com/peasantsandcastles/
Avatar
Luboš Běhounek Satik:24.4.2020 18:36

I když koukám, že se to načítá přes readline, takže by se to teoreticky mělo odmazat. Zkus si nechat vypsat jednotlivé znaky v tom stringu jako čísla a uvidíš, kde se to bude lišit, tipoval bych nějaký prázdný znak, jak psal nahoře HONZ4.

Nahoru Odpovědět
24.4.2020 18:36
https://www.facebook.com/peasantsandcastles/
Avatar
Petr Adámek
Člen
Avatar
Petr Adámek:24.4.2020 19:48

Vyřešeno, s metodou trim funguje jak má. Jak říkáte, musel to být neviditelný znak. Díky za rychlou pomoc 8-)

 
Nahoru Odpovědět
24.4.2020 19:48
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.