quinta-feira, 9 de maio de 2013

Estarei no TDC 2013 em Florianópolis!

Olá a todos!

Estarei no TDC 2013 em Florianópolis, no dia 26/05/2013, realizando a palestra "Arduino para .NET ... É Netduino!".

O TDC (The Developers Conference) é um evento tradicional no mundo do desenvolvimento de software, que acontece já há alguns anos e é realizado pela Global Code, uma das maiores empresas de treinamento em tecnologia e desenvolvimento do Brasil.

O TDC 2013 em Florianópolis será um evento de três dias, com diversos assuntos divididos por trilhas. Estarei na trilha "Arduino", mas vou falar de Netduino e Computação Física.

Espero sua presença!

 The Developers Conference 2013, um evento organizado pela Globalcode

quarta-feira, 24 de abril de 2013

Netduino - Sensor de Estacionamento

Olá, amigos!

Como estou sempre buscando algo novo para fazer, esta semana resolvi usar meu sensor ultrassônico HC-SR04 para uma experiência com o Netduino: um sensor de proximidade que emite um bip repetidamente; quanto mais próximo o objeto estiver do sensor, mais rápido o bip toca.

Isso fez o aparelho ter basicamente a mesma característica de um sensor de estacionamento desses que equipam os carros mais modernos, ou que são vendidos em lojas de acessórios para carros.

O objetivo, porém, não é instalar o dispositivo no meu carro: é simplesmente mostrar a utilização do sensor no Netduino e exemplificar como o mesmo lida com tarefas em MultiThread, já que a leitura do sensor é feita pela thread principal, e o bip é controlado por uma thread paralela.

O código fonte do projeto para o Netduino é o seguinte:


Program.cs
using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;


// Escrito por Marcio Paulo Mello Martins para testar o sensor HC-SR04
namespace SensorAproximacao
{
    public class Program
    {
        private static int ticks;

        private static InterruptPort echoPin = new InterruptPort(Pins.GPIO_PIN_D12, true, Port.ResistorMode.Disabled, Port.InterruptMode.InterruptEdgeBoth);
        private static OutputPort triggerPin = new OutputPort(Pins.GPIO_PIN_D13, false);
        private static Beep beep = new Beep() { BeepInterval = 3000 };

        public static void Main()
        {
            echoPin.OnInterrupt += new NativeEventHandler(Port_OnInterrupt);
            echoPin.DisableInterrupt();

            Thread t = new Thread(new ThreadStart(BeepThread));
            t.Start();

            while (true)
            {
                Distance();
                Thread.Sleep(250);
            }
        }

        public static void Distance()
        {
            echoPin.EnableInterrupt();
            triggerPin.Write(false);
            Thread.Sleep(2);
            triggerPin.Write(true);
            Thread.Sleep(10);
            triggerPin.Write(false);
            Thread.Sleep(2);
        }

        private static void Port_OnInterrupt(uint port, uint state, DateTime time)
        {
            if (state == 0) // falling edge, end of pulse
            {
                int pulseWidth = (int)time.Ticks - ticks;
             
                int distance = (pulseWidth * 10 / (int)578.29);
                Debug.Print("Distancia = " + distance.ToString() + " milimetros");
                lock (beep)
                {
                    beep.BeepInterval = distance;
                }
            }
            else
            {
                ticks = (int)time.Ticks;
            }
            echoPin.ClearInterrupt();
        }

     

        private static void BeepThread()
        {
            bool play = false;
            int localInterval;

            while (true)
            {
                lock(beep)
                {
                    play = beep.BeepInterval <= 1000;
                    localInterval = beep.BeepInterval;
                }

                if (play)
                {
                    beep.Play();
                    Thread.Sleep(localInterval);
                }
            }
        }
    }
}


Beep.cs

using System;
using Microsoft.SPOT;
using SecretLabs.NETMF.Hardware;
using System.Threading;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;

namespace SensorAproximacao
{
    internal class Beep
    {
        internal int BeepInterval { get; set; }
        internal PWM speaker = new PWM(Pins.GPIO_PIN_D9);

        internal void Play()
        {
            speaker.SetDutyCycle(100);
            Thread.Sleep(100);
            speaker.SetDutyCycle(0);
        }
    }
}


O link para o vídeo no YouTube também está aqui:
Sensor de Estacionamento com Netduino




Espero que gostem! Até a próxima!

quarta-feira, 6 de fevereiro de 2013

Como deletar um Team Project no Team Foundation Service Preview

Boas !!

A turma da Microsoft resolveu inovar e liberou o acesso à sua ferramenta Cloud do Team Foundation Service: o TFS Preview. Nele, podemos utilizar até 5 usuários de forma gratuita, e criar projetos do TFS gratuitamente também. Estou usando este serviço integrado ao Visual Studio 2012... e é demais! Recomendadíssimo!! O link para o TFS Preview é tfspreview.visualstudio.com.

Acontece que o ser humano é uma coisa maravilhosa: não pode ver um negócio grátis que já sai fazendo aquela bagunça! Lá sai o cidadão criando projeto pra cima e pra baixo... e pensa: "Depois eu apago!". Aí ele vai tentar apagar e, depois de muito procurar, descobre que não existe um botão Delete para os Team Projects.

Então, como se apaga um Team Project?

Felizmente, a galera do Visual Studio disponibilizou uma ferramenta chamada TFSDeleteProject para deletar um projeto indesejado no TFS. Esta ferramenta fica disponível através do Prompt de Comando do Visual Studio 2012, e sua sintaxe é a seguinte:

TFSDeleteProject /force /collection:https://[endereço do TFSPreview]/[coleção do projeto] [nome do projeto]

ABRAÇO!!

quinta-feira, 30 de agosto de 2012

Olá, gente! Escrevi um artigo sobre Netduino muito legal, onde ensino a construir um cubo de Leds de 3x3x3. Segue o link: http://www.devmedia.com.br/-net-microframework-e-netduino/25547 Até a próxima!

quarta-feira, 15 de fevereiro de 2012

Meu novo artigo sobre Expressões Regulares

Gente!
Publiquei mais um artigo no site Linha de Código!

Segue o link:
Resolvendo problemas de identificação de textos com Expressões Regulares em C#

Deixem seus comentários e sugestões!

Abrass!!