Pete Brown’s Gadgeteer Robot from a Windows Form.. :-)

Talking about the Pete Brown’s Gadgeteer robot, several people ask me how to do a simple winform listener because they have the limit of express versions or simply don’t have developer licence to test app’s for the store.

Just in five minuts… everybody can jump driving a winform app and the Magic Robot using the Gadgeteer!

using System.Net;
using System.Net.Sockets;

namespace RobotServiceSample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            StartListener();
 
            button1.MouseLeave += MouseLeave;
            button2.MouseLeave += MouseLeave;
            button3.MouseLeave += MouseLeave;
            button4.MouseLeave += MouseLeave;
            button5.MouseLeave += MouseLeave;

            button1.MouseEnter += Move_right;
            button2.MouseEnter += Move_left;
            button3.MouseEnter += Send_Stop;
            button4.MouseEnter += Move_backward;
            button5.MouseEnter += Move_forward;
        }

        private TcpListener _listener;
        private Thread _listenerThread;
        private void StartListener()
        {
            _listenerThread = new Thread(RunListener);
            _listenerThread.Start();
        } 

        TcpClient client;
        private void RunListener()
        {
            _listener = new TcpListener(new IPAddress(new byte[] {192,168,1,101}), 5150);
            _listener.Start();

            textBoxLog.Text += «listening at : « + _listener.LocalEndpoint.ToString()+«\n\r»;
            while (true)
            {
                client = _listener.AcceptTcpClient();
                this.Invoke(
                    new Action(
                        () =>
                        {
                            textBoxLog.Text = «»;
                            textBoxLog.Text += string.Format(«New robot from {0} \n\r», client.Client.RemoteEndPoint);
                        }
                    )); ;
                ThreadPool.QueueUserWorkItem(ProcessClient, client);
            }
        }

        private void ProcessClient(object state)
        {
            TcpClient client = state as TcpClient;
        }

        void MouseLeave(object sender, EventArgs e)
        {
            sendStream(Encoding.ASCII.GetBytes(«/panic»));
        }

        private void Move_right(object sender, EventArgs e)
        {
            sendStream(Encoding.ASCII.GetBytes(«/right»));
        } 

        private void Move_left(object sender, EventArgs e)
        {
            sendStream(Encoding.ASCII.GetBytes(«/left»));
        }

        private void Send_Stop(object sender, EventArgs e)
        {
            sendStream(Encoding.ASCII.GetBytes(«/stop»));
        }

        private void Move_backward(object sender, EventArgs e)
        {
            sendStream(Encoding.ASCII.GetBytes(«/backward»));
        }

        private void Move_forward(object sender, EventArgs e)
        {
            sendStream(Encoding.ASCII.GetBytes(«/forward»));
        }

         void sendStream(byte[] bytes)
        {
            NetworkStream stream = client.GetStream();
            stream.Write(bytes, 0, bytes.Length);
        }

    }
}

You can find the complete post in 10Rem at : http://10rem.net/blog/2012/09/10/controlling-a-netmf-gadgeteer-robot-from-a-windows-8-app

Enjoy!!
PepLluis,

PS: No doubt in ask if you need the same code for VB

Barcelona Developers Con : Retro, Makers y Robotics

Os dejo un pequeño testimonio de mi paso por el BcnDevCon13, donde muchísima gente se acercó amablemente al stand, para ver i trastear con el Gadgeteer… “esto empieza a ser un clásico” J También tuvimos ocasión de compartir un particular “Hackathon” con los chicos de Microsoft (en concreto Pablo) y nuestro MagicRobot dirigiéndolo desde el giroscopio de una Surface… espero que podamos colgar el video y como no un post en MSDN.

Crónica 🙂
El pasado domingo se cerró la tercera edición del BcnDevCon (Barcelona Developers Conference). El éxito de las últimas ediciones ha impulsado el evento incluyendo nuevas fórmulas para propiciar un espacio común uniendo diferentes comunidades entorno a un fin común. El “do it by your self” toma forma en un espacio donde los “retro” los “makers” y los “robotics” juegan en una misma cancha para compartir el ingenio que produce objetos increíbles y actividades repletas de imaginación.

Sin duda es un gran espacio a tener en cuenta en el futuro, pues sin duda es el caldo de cultivo para que muchos creativos puedan intercambiar inquietudes y socializar iniciativas que de otra forma caerían en baúl de sastre.

En esta ocasión, el evento ha ocupado tres días (Viernes, Sábado, Domingo) y ha cambiado de ubicación: El Design Hub es un excelente espacio en la plaza de las Glorias, las anteriores ediciones ocuparon «Les Drassanes”; a gustos… pero a mi que soy clásico estas últimas me parecían más “in”. :-))

En mi opinión las futuras ediciones deberían mejorar la organización y dinamización de conferencias y charlas dirigidas, pues creo que un tanto por ciento de temas deberían trabajarse desde la organización para de esa forma dirigir mínimamente la temática, que de otra forma aparece como muy dispersa para el público en general.

Bueno espero que el año que viene podamos reunirnos de nuevo durante unos días.

Gracias a la organización, sponsors y participantes!!
Happy Haking

The Barcelona Developers Conference is back!

Este fin de semana, se celebra la BcnConDev de este 2013, además de una excelente zona «retro» disponemos de una sensacional área para «Robotics» y markers.

Segunda convocatoria 🙂 Si aun no conoces la «GadgetoMania»… vente mañana a la Design Hub de la plaza de las glorias en Barcelona y trastea con un montón de gadgets que traeré conmigo para que podamos montarnos algún que  otro desafío, por supuesto con la ayuda de nuestro portátil y visual Studio.

Por de pronto… a primera hora de la mañana nos las compondremos para mover a nuestro «carricoche» particular con los sensores de una Surface o de un Wndows Phone… si te mola, te estaremos esperando!

 

Y para que no falte, un poco de código que resuelve la comunicación y asi puedas concentrarte en la parte de los sensores.

        private TcpListener _listener;
        private Thread _listenerThread;
        private void StartListener()
        {
            _listenerThread = new Thread(RunListener);
            _listenerThread.Start();
        } 

        TcpClient client;
        private void RunListener()
        {
            _listener = new TcpListener(new IPAddress(new byte[] {192,168,1,101}), 5150);
            _listener.Start(); 
            while (true)
            {
                client = _listener.AcceptTcpClient();
                this.Invoke(
                    new Action(
                        () =>
                        {
                            // string.Format(«Nueva Conexion desde {0} \n\r», client.Client.RemoteEndPoint);
                        }
                    )); ;
                ThreadPool.QueueUserWorkItem(ProcessClient, client);
            }
        } 

        private void ProcessClient(object state)
        {
            TcpClient client = state as TcpClient;
        } 

        void Panic(object sender, EventArgs e)
        {
            sendStream(Encoding.ASCII.GetBytes(«/panic»));
        } 

        private void Atras(object sender, EventArgs e)
        {
            sendStream(Encoding.ASCII.GetBytes(«/backward»));
        } 

        private void Adelante(object sender, EventArgs e)
        {
            sendStream(Encoding.ASCII.GetBytes(«/forward»));
        } 

        void sendStream(byte[] bytes)
        {
            NetworkStream stream = client.GetStream();
            stream.Write(bytes, 0, bytes.Length);
        }

Hasta Mañana!!
PepLluis,