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
 



 
No hay comentarios:
Publicar un comentario