https://foro.gambas-es.org/viewtopic.php?f=1&t=3728&p=21112#p21112
-----------------------------------
celtilander
Lunes, 31 Marzo 2014, 20:15

Re: Conexión Gambas-Arduino
-----------------------------------
En el caso que me ocupa me pasa esto:
-Si no abro el serialmonitor, no funciona.
-Si tengo abierto el serial monitor, funciona, pero recibo 2 mensajes de arduino

La aplicación trata de enviar desde un textbox un texto tipo "LETRA,NUMERO,NUMERO", arduino lo recibe y contesta con lo recibido que visualizo en un TextArea. El caso es que como he dicho en el primer caso... la aplicación de gambas no recibe nada y en el segundo recibe 2 mensajes, el primero con la info enviada y un segundo vacío.
Perdonar por la longitud del mensaje pero no se hacerlo de otra forma.

[u]Código gambas[/u]
[code linenumbers=false syntax=gambas]' Gambas class file

Public velocidad As Integer ' 9600
Public paridad As Integer ' 0-none 1-even 2-odd
Public bits_de_datos As Integer ' 5.6.7.8
Public bits_de_parada As Integer ' 1,2
Public s As String

Public Sub Form_Close()

  If SportA.Status = Net.Active Then Close SPortA
  Me.Close

End

Public Sub SPortA_Read()  ' Arduino Azul

  Dim sBuffer As String

  Read #SportA, sBuffer, Lof(SportA)
  TextArea1.Text = TextArea1.Text & " " & sBuffer

End

Public Sub Form_Open()

  Me.center
  velocidad = 57600
  paridad = 0
  bits_de_datos = 8
  bits_de_parada = 1

End

Public Sub Label1_MouseDown()

  If SportA.Status = Net.Active
    Close SportA

  Else

    SportA.PortName = "/dev/ttyACM0"
    SportA.Speed = velocidad
    SportA.Parity = paridad
    SportA.DataBits = bits_de_datos
    SportA.StopBits = bits_de_parada
    SportA.FlowControl = paridad
    SportA.Open()
    Print #SportA, TextBox1.text

  End If

End[/code]

[u]Código Arduino[/u]

[code linenumbers=false syntax=c]const int lonbuffer=5; // longitud del buffer
char buffer[lonbuffer]; // buffer para almacenar el comando
int val1; // valor de primer parámetro
int val2; // valor de segundo parámetro

void setup()
{
  Serial.begin(57600);
}

void loop()
{
  if (Serial.available());
  {
   comunicar();
  }
}
void comunicar()
{
  if (Serial.available() > 0) 
   {
      int lonComando;
      lonComando=Serial.readBytesUntil(',', buffer, lonbuffer);
      buffer[lonComando]='\0'; // Añadimos el terminador de cadena
      // el buffer debe contener un comando.
      val1=Serial.parseInt();
      val2=Serial.parseInt();
      // Recibimos los dos parámetros. Si el número de parámetros varía dependiendo del comando, deberemos primero ver qué comando es para saber qué y cuántos parámetros recibiremos
      Serial.print("Comando recibido: ");
      Serial.println(buffer);
      Serial.print("Param1: ");
      Serial.println(val1);
      Serial.print("Param2: ");
      Serial.println(val2);
    }

}[/code]


