Hola de tod@s, estoy experimentando un poco con el reconocimiento de voz y unas matrices de LEDs.
El tema es el siguiente:
He realizado una aplicacion (muy simple aún) en C# con visual studio la cual reconoce palabras y las envia por bluetooth a Arduino. Uso Aruduino UNO Rev3, modulo bluetooth HC-06 una matriz LED de cuatro elementos y dos matrices LED de un elemento.
La libreria usada para el control de las matrices es:
Arduino debe reconocer la palabra y mostrará en las matrices LED una "cara", me explico, tengo dos matrices LED cada una de un elemento a modo de "ojos" y una matriz LED de cuatro elementos a modo de "boca".
Todo lo anterior funciona por separado, donde tengo el problema es a la hora de procesar la informacion llegada por el bluetooth.
El codigo de la aplicacion en C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Speech.Recognition;
using System.IO.Ports;
namespace WpfApplication1
{
/// <summary>
/// Lógica de interacción para MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
SpeechRecognitionEngine _Recognition = new SpeechRecognitionEngine();
SerialPort sp = new SerialPort();
public MainWindow()
{
InitializeComponent();
foreach (string s in SerialPort.GetPortNames())
{
portList.Items.Add(s);
}
}
private void btSalir_Click(object sender, RoutedEventArgs e)
{
Close();
}
private void btEscuchar_Click(object sender, RoutedEventArgs e)
{
_Recognition.SetInputToDefaultAudioDevice();
_Recognition.LoadGrammar(new DictationGrammar());
_Recognition.SpeechRecognized += _Recognition_SpeechRecognized;
_Recognition.RecognizeAsync(RecognizeMode.Multiple);
}
private void _Recognition_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
foreach (RecognizedWordUnit word in e.Result.Words)
{
lbPalabra.Items.Add(word.Text);
sp.Open();
sp.Write(word.Text);
sp.Close();
}
}
private void portList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
}
private void btConectar_Click(object sender, RoutedEventArgs e)
{
sp.PortName = portList.Text;
}
}
}
He escrito dos códigos para arduino que adjunto por superar el nº de caracteres permitidos.
Con el código FaceLED_v2.1.2 uso la sentencia "if" pero nunca ejecuta los "if". Me da la impresión que lo que almaceno en "buffer" es más de lo que muestra en:
Serial.println(buffer);
y estoy desconcertado porque con esta linea de código me muestra en el serial la palabra correcta, pero para mi desespero, no entra en los "if".
He enviado datos desde aplicaciones Android y ocurre lo mismo
Usando el codigo FaceLED_v2.1.3 decidí probar a sustituir los "if " por un "switch case" pero me tira el siguiente error:
switch quantity not an integer
Si alguien tiene alguna pista estaria muy agradecido.
FaceLED_v2.1.2.ino (20.7 KB)
FaceLED_v2.1.3.ino (21 KB)