domingo, 26 de janeiro de 2014

Capacete de LEDs com Netduino

Olá, turma!

Fiz mais um video tutorial. Desta vez a experiência é um capacete de LEDs com Microframework e Netduino!

Capacete de LEDs com Microframework e Netduino

Abraço!

domingo, 27 de outubro de 2013

Text Box com Auto Complete em Windows Forms

Olá, meu povo e minha pova!

Respondendo ao colega Wanilton Filho, que me pediu ajuda por email, segue um exemplo simples de como fazer Auto Complete quando digitamos um texto dentro de um TextBox em uma Windows Form.
Eu criei um Windows Form com apenas um Label com o texto "Nome" e uma TextBox chamada "txtNome", onde iremos digitar um nome para que o Auto Complete nos dê sugestões de preenchimento. Veja:


Antes de mais nada, eu atribuí os seguintes valores às seguintes propriedades:

AutoCompleteMode: SuggestAppend

A propriedade AutoCompleteMode possui 4 valores possíveis: 
  • None - Auto Complete desabilitado;
  • Suggest - Exibe uma lista de opções para que o usuário escolha;
  • Append - Completa o texto com a opção mais próxima do digitado;
  • SuggestAppend - Utiliza os dois métodos acima.

AutoCompleteSource: CustomSource.

A propriedade AutoCompleteSource possui 8 valores possíveis:
  • CustomSource – Exibe uma lista personalizada, definida em AutoCompleteCustomSource;
  • FileSystem – Exibe items do sistema de arquivos como fonte;
  • FileSystemDirectories – Determina que apenas nomes de diretórios serão exibidos, ignorando nomes de arquivos;
  • HistoryList – Exibe o histórico de todas as URLs como fonte;
  • RecentlyUsedList – Exibe lista de URL’s mais usadas recentemente;
  • AllUrl – Equivalente ao HistoryList combinado com o RecentlyUsedList;
  • AllSystemResources – Equivalente ao FileSystem combinado com o AllUrl;
  • None – Determina que o recurso de AutoComplete não será habilitado. 
Depois, dentro do método Load do Form, eu criei uma lista do tipo AutoCompleteStringCollection, que contém a lista de elementos que serão utilizados como fonte para o Auto Complete do TextBox, preenchendo a lista com um monte de nomes aleatórios (somente para fins de testes).
Aí, atribuí esta lista à propriedade AutoCompleteCustomSource do TextBox (txtNome).
Veja o código como ficou:

using System;
using System.Windows.Forms;

namespace AutocompleteWinForms
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            AutoCompleteStringCollection lista = new AutoCompleteStringCollection();

            lista.Add("Sofia Ferreira");
            lista.Add("Mateus Melo");
            lista.Add("Lavinia Castro");
            lista.Add("Nicolash Cavalcanti");
            lista.Add("Clara Barros");
            lista.Add("Joao Rodrigues");
            lista.Add("Eduardo Sousa");
            lista.Add("Luís Pereira");
            lista.Add("Marina Castro");
            lista.Add("Brenda Rocha");
            lista.Add("Mariana Martins");
            lista.Add("João Fernandes");
            lista.Add("Carolina Rocha");
            lista.Add("Diego Pereira");
            lista.Add("Marisa Dias");
            lista.Add("Erick Barros");
            lista.Add("Kaua Lima");
            lista.Add("Paulo Barbosa");
            lista.Add("Miguel Carvalho");
            lista.Add("Joao Azevedo");
            lista.Add("Manuela Pinto");
            lista.Add("Arthur Goncalves");
            lista.Add("Luiz Carvalho");
            lista.Add("João Goncalves");
            lista.Add("Victor Alves");
            lista.Add("Ágatha Cardoso");
            lista.Add("Igor Silva");
            lista.Add("Isabela Cardoso");
            lista.Add("Carolina Rodrigues");
            lista.Add("Giovanna Ferreira");
            lista.Add("Gustavo Correia");
            lista.Add("Amanda Gomes");
            lista.Add("Evelyn Pinto");
            lista.Add("Vitoria Dias");
            lista.Add("Isabela Rocha");
            lista.Add("Bruna Rodrigues");
            lista.Add("Melissa Fernandes");
            lista.Add("Lucas Costa");
            lista.Add("Laura Alves");
            lista.Add("Vitór Oliveira");
            lista.Add("Tomás Araujo");
            lista.Add("Ana Cardoso");
            lista.Add("Sarah Cunha");
            lista.Add("Luana Cardoso");
            lista.Add("Pedro Ribeiro");
            lista.Add("Manuela Almeida");
            lista.Add("Kaua Barbosa");
            lista.Add("Kauê Goncalves");
            lista.Add("Matilde Almeida");
            lista.Add("Julia Oliveira");
            lista.Add("Leonardo Pinto");
            lista.Add("Júlio Barbosa");
            lista.Add("Rebeca Pinto");
            lista.Add("Julia Fernandes");
            lista.Add("Ágatha Souza");
            lista.Add("Guilherme Castro");
            lista.Add("Larissa Rodrigues");
            lista.Add("Aline Barros");
            lista.Add("Kaua Rodrigues");
            lista.Add("Aline Lima");
            lista.Add("José Lima");
            lista.Add("Kauan Sousa");
            lista.Add("Lavinia Dias");
            lista.Add("Sophia Oliveira");
            lista.Add("Fábio Almeida");
            lista.Add("Beatriz Alves");
            lista.Add("Bruna Correia");
            lista.Add("Davi Cardoso");
            lista.Add("Kauã Pereira");
            lista.Add("Julian Cardoso");
            lista.Add("Gustavo Goncalves");
            lista.Add("Ana Alves");
            lista.Add("Giovana Pinto");
            lista.Add("Danilo Almeida");
            lista.Add("Bruna Cavalcanti");
            lista.Add("Luis Azevedo");
            lista.Add("Livia Sousa");
            lista.Add("Gabriel Santos");
            lista.Add("Vitór Dias");
            lista.Add("Kai Dias");
            lista.Add("Matilde Castro");
            lista.Add("Julian Araujo");
            lista.Add("Kaua Oliveira");
            lista.Add("Julieta Cardoso");
            lista.Add("Marisa Gomes");

            txtNome.AutoCompleteCustomSource = lista;
        }
    }
}
Lembrando que as chamadas "Add" do objeto "lista" podem ser feitas obtendo dados de uma tabela num banco de dados ou em um arquivo.

É isso aí! Espero que a dúvida do Wanilton tenha sido respondida! Desculpe pela demora!

Abraço!

Que relaxo, meu Deus!

Gente, como eu estou relaxado com este blog!

Notei que minha última postagem foi sobre o TDC 2013 em Florianópolis.
Acabei de voltar do TDC 2013 em Porto Alegre (em que fui palestrante) e nem lembrei de citar isso!

Essa pós-graduação está me sugando todos os segundos livres da minha vida...

Enfim, foi muito legal o TDC 2013 em Porto Alegre. Estive presente nos dois dias, assisti muitas palestras legais, ministrei minha palestra sobre Netduino, fiz novos amigos ... foi muito bom!

Espero repetir a dose em 2014!

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!