none
Comparar String con dato recibido de arduino RRS feed

  • Pregunta

  • Hola estoy haciendo una comparacion en visual studio conectado con arduino este es el codigo de visual studio:

                string dato;

                dato = serialPort1.ReadExisting();
                richTextBox1.AppendText(dato);
                if (dato=="ok") 
                {
                    pictureBox1.ImageLocation = "C:/Users/BrahianS/source/repos/Proyecto1/banana.gif";
                }else
                {
                    pictureBox1.ImageLocation = "C:/Users/BrahianS/source/repos/Proyecto1/banana2.gif";
                }

    /////

    codigo arduino

    Serial.println("ok");

    el problema es que no entra en el if siendo los datos iguales en el richbox muestra ok pero no entra al if , si pongo dato == dato si entra, tambien intente con dato.equals("ok") y tampoco entra gracias por su ayuda


    martes, 11 de diciembre de 2018 23:11

Respuestas

  • hola

    El richtextbox el string que genera aplica formato, no se va a comparar nunca igual

    pero igual veo que comparas la variable, podrias ver si hay algun caracter de fin de linea, a veces estos device lo agregan, podrias evaluar el array de la lectura

    no se si puede poner un breakpoint he inspeccionar la variable, seguramente veas este caracter

    C# Serial Port Communication Arduino

    valida que desde arduino se envia un dato simple, que el ok sea un 0 o 1

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 12 de diciembre de 2018 12:54

Todas las respuestas

  • Buenas,

    Puede que sea un problema con como envías los datos desde arduino y que no sea como esperas que se hace, por ejemplo los retorno de carro, etc...

    Se me ocurren 2 cosas, la primera, poner un breakpoint sobre if (dato=="ok")  y ver que trae exactamente "dato", para descartar cosas raras, por ejemplo "ok " no es igual que "ok", el espacio final marca la diferencia, y es algo que en el richTextBox1 no vas a poder apreciar fácil...

    Una posible solucion, asumiendo que que el problema es que pueda haber algun espacio en blanco de más metido por ahí, podría ser algo así:

    if (dato.Trim()=="ok") 

    Con el Trim vas a quitar espacios en blanco (difíciles de ver si no los estas buscando específicamente) que pùeden hacer que el == retorne false.

    Cualquier duda que tengas nos comentas

    Atte


    Jorge Turrado Ferrero

    Mis repositorios en GitHub

    Mi Blog


    Ranking GitHub Euskadi
    Ranking GitHub Alava

    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    miércoles, 12 de diciembre de 2018 12:29
  • hola

    El richtextbox el string que genera aplica formato, no se va a comparar nunca igual

    pero igual veo que comparas la variable, podrias ver si hay algun caracter de fin de linea, a veces estos device lo agregan, podrias evaluar el array de la lectura

    no se si puede poner un breakpoint he inspeccionar la variable, seguramente veas este caracter

    C# Serial Port Communication Arduino

    valida que desde arduino se envia un dato simple, que el ok sea un 0 o 1

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 12 de diciembre de 2018 12:54
  • Hola estoy haciendo una comparacion en visual studio conectado con arduino este es el codigo de visual studio:

                string dato;

                dato = serialPort1.ReadExisting();
                richTextBox1.AppendText(dato);
                if (dato=="ok") 
                {
                    pictureBox1.ImageLocation = "C:/Users/BrahianS/source/repos/Proyecto1/banana.gif";
                }else
                {
                    pictureBox1.ImageLocation = "C:/Users/BrahianS/source/repos/Proyecto1/banana2.gif";
                }

    /////

    codigo arduino

    Serial.println("ok");

    el problema es que no entra en el if siendo los datos iguales en el richbox muestra ok pero no entra al if , si pongo dato == dato si entra, tambien intente con dato.equals("ok") y tampoco entra gracias por su ayuda


    Aquí un ejemplo de controlar la cadena de mil formas.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Cadenas_de_caracteres_Consola_01
    {
        class Program
        {
            static void Main(string[] args)
            {
                #region Configuración ventana.
                // Título de la ventana.
                Console.Title = "Cadenas de caracteres Consola 01";
    
                // Tamaño de la ventana, x, y.
                Console.SetWindowSize(100, 35);
    
                // Color de fondo.
                Console.BackgroundColor = ConsoleColor.DarkBlue;
    
                // Color de las letras.
                Console.ForegroundColor = ConsoleColor.Yellow;
    
                // Limpiar pantalla y dejarlo todo en color de fondo.
                Console.Clear();
    
                // Visible el cursor.
                Console.CursorVisible = true;
                #endregion
    
                // Asignar un valor a una cadena.
                string cadena;
                cadena = "Ha dicho: \"¡Revolución!\"";
                Console.WriteLine(cadena);
    
                // Extracción de un carácter particular.
                string cadena1 = "El invierno será lluvioso";
                string cadena2 = "El invierno será frío";
                Console.WriteLine("El cuarto caracter de la cadena1 es:{0}", cadena1[3]);
    
                // Longitud de una cadena.
                Console.WriteLine("La cadena1 contiene {0} caracteres", cadena1.Length);
                //Que dará como resultado 25
    
                // División de una cadena.
                Console.WriteLine("Un trozo de la cadena2= {0}", cadena2.Substring(2, 9));
                //Que dara como resultado invierno.
    
                // Comparación de cadenas.
                if (cadena1 == cadena2)
                {
                    Console.WriteLine("Son la misma.");
                }
                else
                {
                    Console.WriteLine("No son la misma.");
                }
    
                // Otra forma
                if (cadena1.Equals(cadena2))
                {
                    Console.WriteLine("Son la misma.");
                }
                else
                {
                    Console.WriteLine("No son la misma.");
    
                    // Utilizando CompareTo
                    switch (cadena1.CompareTo(cadena2))
                    {
                        case -1:
                            Console.WriteLine("cadena1 es inferior a cadena2.");
                            break;
                        case 0:
                            Console.WriteLine("cadena1 es igual a cadena2.");
                            break;
                        case 1:
                            Console.WriteLine("cadena1 es superior a cadena2.");
                            break;
                    }
                }
    
                // Inserción en una cadena.
                string cadena3;
                cadena3 = cadena2.Insert(17, "muy ");
                Console.WriteLine(cadena3);
                //Resultado: EL invierno será muy frío.
    
                // Supresión de espacios.
                string cadena4;
                // Al principio de la cadena:
                cadena4 = cadena1.TrimStart();
    
                // Al final de la cadena.
                cadena4 = cadena1.TrimEnd();
    
                // Al principio y al final.
                cadena4 = cadena1.Trim();
    
                // Cambio a mayúsculas o minúsculas.
                //Mayúsculas.
                cadena4 = cadena1.ToUpper();
    
                // Minúsculas.
                cadena4 = cadena1.ToLower();
    
                // Búsqueda en una cadena.
                string busca = "@";
                string cadena5 = "Si tiene algún problema contacta con info@aulaweb.com.es";
                int posicion = 0;
                posicion = cadena5.IndexOf(busca);
                while (posicion > 0)
                {
                    Console.WriteLine("Cadena encontrada en la posicion {0}", posicion);
                    posicion = cadena5.IndexOf(busca, posicion + 1);
                }
                Console.WriteLine("Fin de la busqueda.");
    
                // Sustitución en una cadena.
                cadena3 = cadena1.Replace("invierno", "verano");
                Console.WriteLine(cadena3);
                // Resultado el verano será lluvioso
    
                // Pulse cualquier tecla para salir.
                Console.ReadKey();
            }
        }
    }


    http://electronica-pic.blogspot.com

    sábado, 21 de agosto de 2021 7:19