Esta es la placa a controlar, un Arduino Nano,
tiene 4 salidas digitales con un led en cada una.
Para poder filtrar los tweets, he creado una "palabra a buscar" (una especie de hashtag), en este caso he escogido la palabra "PruebaComunicacionTA". El último tweet que contenga esta palabra, es el que enviara la información al Arduino.
Para este caso he enviado el siguiente tweet:
PruebaComunicacionTA + 0101 + T +005
Palabra a Buscar + Estados leds + T Si se quiere temporizar + tiempo en segundos (El segundo y cuarto led permanecerán 5 segundos encendidos)
Código Arduino:
// By: jsslxs
// 21 de Abrl del 2014
int led1= 12;
int led2= 10;
int led3= 8;
int led4= 6;
void setup()
{
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
Serial.begin(9600); //Inicio puerto serie
}
void loop()
{
if (Serial.available())
{
delay(100); //Espera 100ms
while (Serial.available()>0) // ejemplo datos recibidos: 0101
{
int cuenta=Serial.available();
int numser[cuenta]; //matriz de bytes
for (int i = 0; i < cuenta; i = i++)
{
numser[i]= Serial.read();
//Serial.println(i);
//Serial.write(numser[i]);
}
if (numser[0]== '1'){ digitalWrite( led1, HIGH);} else { digitalWrite( led1, LOW);}
if (numser[1]== '1'){ digitalWrite( led2, HIGH);} else { digitalWrite( led2, LOW);}
if (numser[2]== '1'){ digitalWrite( led3, HIGH);} else { digitalWrite( led3, LOW);}
if (numser[3]== '1'){ digitalWrite( led4, HIGH);} else { digitalWrite( led4, LOW);}
if (numser[4]== 'T') // Timer, si se introduce una T, al cabo de un tiempo la salidas se podran LOW
{
int num0 = numser[5]-'0';
int num1 = numser[6]-'0';
int num2 = numser[7]-'0';
int tiempo= (num0*100+ num1*10 + num2) *1000; // en segundos
delay(tiempo);
digitalWrite( led1, LOW);
digitalWrite( led2, LOW);
digitalWrite( led3, LOW);
digitalWrite( led4, LOW);
}
}
Serial.flush();
}
}
Aquí la Interfaz:
Los números de caracteres a enviar están limitados a 140 como es en un tweet.
El Timer es el tiempo que tardara en leer el último tweet con la palabra a buscar.
Código Visual Basic:
Imports System.Net
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Conectar.Enabled = False
Conectar.Visible = True
Desconectar.Enabled = False
Desconectar.Visible = False
End Sub
Private Sub button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Conectar.Click
Conectar.Enabled = False
Conectar.Visible = False
Desconectar.Enabled = True
Desconectar.Visible = True
SerialPort1.BaudRate = ComboBox2.SelectedItem 'Velocidad
SerialPort1.DataBits = ComboBox5.SelectedItem
If ComboBox3.Text = "None" Then 'paridad
SerialPort1.Parity = IO.Ports.Parity.None
ElseIf ComboBox3.Text = "Odd" Then
SerialPort1.Parity = IO.Ports.Parity.Odd
ElseIf ComboBox3.Text = "Even" Then
SerialPort1.Parity = IO.Ports.Parity.Even
ElseIf ComboBox3.Text = "Mark" Then
SerialPort1.Parity = IO.Ports.Parity.Mark
ElseIf ComboBox3.Text = "Space" Then
SerialPort1.Parity = IO.Ports.Parity.Space
End If
If ComboBox4.Text = "None" Then 'stopbits
SerialPort1.Parity = IO.Ports.StopBits.None
ElseIf ComboBox4.Text = "OnePointFive" Then
SerialPort1.Parity = IO.Ports.StopBits.OnePointFive
ElseIf ComboBox4.Text = "One" Then
SerialPort1.Parity = IO.Ports.StopBits.One
ElseIf ComboBox4.Text = "Two" Then
SerialPort1.Parity = IO.Ports.StopBits.Two
End If
SerialPort1.PortName = ComboBox1.SelectedItem
SerialPort1.Open()
Timer1.Interval = Tiempo.Value * 1000
Timer1.Start()
End Sub
Private Sub Habilitar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Habilitar.Click
ComboBox1.Items.Clear()
For Each PuertoDisponible As String In My.Computer.Ports.SerialPortNames
ComboBox1.Items.Add(PuertoDisponible)
Next
If ComboBox1.Items.Count > 0 Then
ComboBox1.Text = ComboBox1.Items(0)
Conectar.Enabled = True
Conectar.Visible = True
Else
MessageBox.Show("Ningún puerto encontrado")
Conectar.Enabled = False
Conectar.Visible = True
End If
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim n As Integer = 0
Dim m As Integer = 140
Dim i As Integer = 0
n = Len(PalabraAbuscar.Text)
m = m - n
NumeroCarac.Maximum = m
Dim url As WebRequest = WebRequest.Create(Seturl.Text)
Dim response As WebResponse = url.GetResponse()
Dim stream As New IO.StreamReader(response.GetResponseStream())
Urlmostrar.Text = stream.ReadToEnd()
Dim SearchForThis As String = PalabraAbuscar.Text
Dim FirstCharacter As Integer = Urlmostrar.Text.IndexOf(SearchForThis)
num.Text = ""
While NumeroCarac.Value > i
num.Text = num.Text & Urlmostrar.Text(FirstCharacter + n + i)
i = i + 1
End While
SerialPort1.Write(num.Text)
End Sub
Private Sub Desconectar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Desconectar.Click
Conectar.Enabled = True
Conectar.Visible = True
Desconectar.Enabled = False
Desconectar.Visible = False
SerialPort1.Close()
Timer1.Stop()
End Sub
End Class
Descargar proyecto: http://www.4shared.com/zip/ICVVXetfce/Arduino_controlado_por_twitter.html