Recuperar dato ingresado en C# para utilizarlo en BASIC STAMP

Estimados estoy trabajando en un proyecto con las siguientes tecnologías:
C# y microcontrolador BASIC STAMP:

El microcontrolador BASIC STAMP lo tengo conectado al PC a través de un cable DB9.


PROBLEMA:
- Ya logré hacer la conexión desde la aplicación c# con el puerto COM5.

- Luego creo un caja de texto donde debo escribir un nro del 1 al 5. Al ingresar este numero del 1 al 5, presiono el boton enviar donde hago lo siguiente:

puertoSerie.WriteLine(textBox1.Text);


- El problema es que no se como recuperar el valor ingresado en la caja de texto de la aplicacion, este valor debo recuperarlo en el microcontrolador basic stamp para dar una orden de encender un led
(led 1, led 2, led 3... led 5 esto lo se hacer en basic stamp). Lo que no se hacer es como recuperar el valor.

PASOS de lo que necesito:
- La idea es que si ingrese un 1 en la caja de texto de la aplicación en c#
- pueda recuperar el valor 1 en basic stamp.
En el microcontrolador



*****CODIGO COMPLETO DE C#***********************************

Código:
Dejo el código completo, a alguien le puede servir también si quiere establecer una conexión entre una aplicación en C# y el puerto serial (esto esta funcionando)

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

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        SerialPort puertoSerie = new SerialPort();

        public Form1()
        {
            InitializeComponent();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            puertoSerie.PortName = "COM5";
            puertoSerie.BaudRate = 9600;
            puertoSerie.DataBits = 8;
            puertoSerie.ReadTimeout = 5000;
            puertoSerie.Open();
            label1.Text = "*** Abierto y configurado."; 
        }

        private void button5_Click(object sender, EventArgs e)
        {            
            puertoSerie.Close();
            label1.Text = "*** Cerrado.";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //puertoSerie.WriteLine(textBox1.Text);
            puertoSerie.WriteLine(textBox1.Text);

             label1.Text = "Presiono ENVIARR";
        }
    }
}
 
Última edición por un moderador:
Hola. No es que te quiera desilusionar ni nada, pero te recomiendo algo: Aprendé un lenguaje conocido, como C o C++. Recomiendo el 2do porque es más completo y hoy día es muy usado, tanto para algunos microcontroladores como para PCs. El C# es un intermedio entre los 2, como una mezcla, pero no es tan utilizado, por lo que la probabilidad de dar con alguien que sepa ese lenguaje y te pueda ayudar es menor.

Un saludo.
 
@BrunoARG sin ofender pero el C# no es mal lenguaje, ya se puese usar no solo en Windows, tambien en Linux, Mac, Androis, iOS y ya está llegando hasta a los MCU (ARM de 32bits que no es cualquier cosa pero es algo), aquí el problema no es con la interfaz sino el como maneja los datos el MCU.

En el código del MCU debes considerar que si usas WriteLine el sistema termina con "\r\n", si te basta con un carácter prueba usando solo Write(), yo una ves hice un control que indicaba los valores a un MSP430 para controlar un motor, lo hacia via Write() en lugar de WriteLine(), aparte si envías el texto tienes que hacer la comparación de caracteres, no es if (recibido == 1) sino if (recibido == '1')
 
Hola.
El problema es que no se como recuperar el valor ingresado en la caja de texto de la aplicacion, este valor debo recuperarlo en el microcontrolador basic stamp para dar una orden de encender un led
(led 1, led 2, led 3... led 5 esto lo se hacer en basic stamp). Lo que no se hacer es como recuperar el valor.

PASOS de lo que necesito:
- La idea es que si ingrese un 1 en la caja de texto de la aplicación en c#
- pueda recuperar el valor 1 en basic stamp.
En el microcontrolador

Sobre BasicStamp no se mucho pero si sobre Basic, necesitas utilizar el UART... ( ya lo configuras ), que esté con la misma configuración en protocolo y velocidad que la PC.
En el programa para el basicStamp necesitas capturar el caracter y colocarlo en una variable... para luego hacer lo que desees... ojo que cada caracter está en formato ASCII.

Si envias una cadena o String al BasicStamp es necesario capturar uno a uno y colocar cada caracter en un array por ejemplo... si el string siempre tien la misma longitud, basta con contar la cantidad de caracteres entrantes para determinar cuando terminar la captura y si el strign es variable en longitud, necesitas saber cuando termina...

En el foro hay mucho sobre el UART en lenguaje Basic pero para PICs, pero como son similares te puede ser de ayuda.

PD. ¿¿¿Como??? discrepo con BrunoARG sobre que el C# no es conocido y ya tiene varios añitos... si a .NET nos referimos, hay bastante información para C#... muuucha!!!

Saludos.
 
Estimados Gracias por su ayuda.

Les comento que estoy trabajando con el mismo código mostrado arriba y para enviar la instrucción al Basic Stamp utilizo la instrucción

puertoSerie.Write("LOW 1"); // LOW es una instrucción de basic stamp 2 que enciende el Led 1

A las personas que me puedan ayudar, despues de enviar esta instrucción desde C# cual sería el paso siguiente:

¿Esta instrucción le estará llegando al BASIC STAMP, o es necesario que desde la aplicación que estoy creando en C# deba enviar este dato a través de un PIN del puerto Serial (el cable que conecta el PC con basicStamp es el DB9)?

Espero sus respuestas Muchas Gracias por su tiempo.
 

Adjuntos

  • 20140423_114134.jpg
    20140423_114134.jpg
    70.8 KB · Visitas: 3
Hola.
Se utiliza SERIN para la recepción de datos en BasicStamp... puedes usar el modificador STR y una variable en array para recivir la cadena o string.
Text VAR BYTE(6)
SERIN algo [STR Text]
ACLARO que no se mucho de los BasicStamp, revisa aquí como es ésta configuración que tambien hay otros modificadores y argumentos.

Otro detalle, es que un BasicStamp es básicamente un microcontrolador... no comprende directamente datos en string, así ahunque envies desde C# un "LOW 1", el BasicStamp no va a comprender nada puesto que solo son caracteres.
En este punto debes de comparar dato por dato u otra forma el contenido de la variable array para recién determinar que acción deba hacer...

PD. Las normas del foro no permiten temas duplicados del mismo autor, te pueden moderar.

Saludos.
 
Gracias por la respuesta.

Entonces lo que podría hacer para simplificar el envío del dato desde C#, podría ser:

puertoSerie.Write("1");

Otra consulta con la instrucción realizada anteriormente el microcontrolador ya estaría recibiendo el dato 1 . Solo me bastaría ver como recuperarlo a través del comando SERIN en BASIC STAMP (mi consulta es para saber si necesito hacer algo más en la aplicación en c# o con eso ya finalizaria esa parte para C#)
---

Luego en Basic Stamp debería recuperar este dato, por lo que entiendo. Investigaré como recuperar ese dato a través de SERIN.

Muchas Gracias por tu ayuda.
 
Entonces lo que podría hacer para simplificar el envío del dato desde C#, podría ser:

puertoSerie.Write("1");
Si es posible. Recives el caracter "1" y se compara... algo así:

IF DatoRcv = "1" THEN
LED1 = 1
ELSE
LED1 = 0
ENDIF

Claro, respetando la instaxis para el BasicStamp.
También se puede con array string solo que requiere mayor tratamiento manual.

Otra consulta con la instrucción realizada anteriormente el microcontrolador ya estaría recibiendo el dato 1 . Solo me bastaría ver como recuperarlo a través del comando SERIN en BASIC STAMP (mi consulta es para saber si necesito hacer algo más en la aplicación en c# o con eso ya finalizaria esa parte para C#)
---

Luego en Basic Stamp debería recuperar este dato, por lo que entiendo. Investigaré como recuperar ese dato a través de SERIN.

La PC (desde C#) y el BasicStamp deben de tener la misma configuración, es importante (baudios, bits de stop, paridad, etc)...

Ten en cuenta que tal y como estas trabajando, estas enviando un "1" desde C# que es un caracter en ASCII. Lo mismo debes de repetar en BasicStamp ya que un "1" (ASCII) no es igual que 1 (decimal) por ejemplo.
Saludos.
 
Estimados.

He intentado de encender el led en microcontrolador basic stamp.

Cuando yo presiono el boton enviar donde hago lo siguiente:

puertoSerie.Write("1");

Yo nunca puedo tener una respuesta desde Basic Stamp, como puedo ejecutar dicho codigo de BASIC STAMP guardado en un archivo: aplicacion.bsp

Al presionar el boton enviar de C#, se necesita ejecutar alguna instrucción para llamar a este archivo o solo con tener conectado el PC y el microcontrolador por BASIC STAMP con el conector DB9 sirve, ya que cuando presiono dicho boton no logro conseguir nada.



-------------------------------------------
El codigo para el microcontrolador Basic Stamp es el siguiente:

' {$STAMP BS2p}
' {$PBASIC 2.5}

INPUT 2

'Para recibir por el PIN 2, del BS2 a 9600 bps, 8N, invertido:
Dato_Recivido VAR Byte

SERIN 2, 16468,[Dato_Recivido]

LOW 1
--------------------------------------
 
Una vez que realizo lo siguiente desde mi aplicación.

puertoSerie.Write("1");


----
En este momento no me interesa recuperar el dato que estoy enviando, solo me gustaria poder ver que se enciende un LED en el micro BASIC STAMP.


Como poner al microcontrolador en modo listener que este escuchando y cuando venga un dato pueda hacer algo tan sencillo como un:

LOW 2
LOW 3
HIGH 2
HIGH 3

En este momento no me interesa recuperar el dato, solo ver que se puedan comunicar el sistema y el micro.

Saludos.
 
Atrás
Arriba