Hola a todos, lo que pasa es que necesito conectar arduino con c# para visualizar en una aplicación de windows la temperatura y humedad por medio de IO ports, pero intento conectar y siempre me sale el error de "Tiempo de espera del semáforo agotado" no se como resolverlo y estoy buscando hace mucho tiempo no se si sea problema de mi pc o controlador, He intentado en c# poner una variable en un puerto y me sale siempre el mismo error, aquí colocaré el código que tiene la placa de arduino y el codigo en c# para poder recibir los datos.
#include <SPI.h>
#include <Ethernet.h>
// Configuración de direccion MAC e IP.
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);
// Inicia la libreria Ethernet server con el puerto 80 (por defecto el puerto HTTP).
EthernetServer server(80);
void setup() {
// Inicia el puerto serie.
Serial.begin(9600);
// Inicia la conexión Ethernet y el servidor.
Ethernet.begin(mac, ip);
server.begin();
Serial.print("IP local del servidor ");
Serial.println(Ethernet.localIP());
}
void loop() {
EthernetClient client = server.available(); // Escucha a los clientes entrantes.
if (client) { // Si un cliente se conecta al servidor:
Serial.println("Nuevo cliente");
boolean currentLineIsBlank = true; // Marcador para enviar la respuesta desde el servidor.
while (client.connected()) { // Repite mientas existe clientes conectados:
if (client.available()) {
char c = client.read();
Serial.write(c); // Imprime por el puerto serie la petición del cliente (caracter a caracter)
if (c == '\n' && currentLineIsBlank) { // Se envia la respuesta a una petición de un cliente cuando a finalizado la petición:
// Respuesta:
client.println("HTTP/1.1 200 OK"); // Enviar un encabezado de respuesta HTTP estándar
client.println("Content-Type: text/html");
client.println("Connection: close"); // Se cerrará la conexiós despues de enviar la respuesta.
client.println();
client.println("<!DOCTYPE HTML>"); // Tipo de documento.
client.println("<html>"); // Etiqueta html inicio del documento.
client.print("jos3cort3s Arduino");
client.println("
"); // Etiqueta html salto de linea.
client.println("<meta http-equiv=\"refresh\"content=\"15\">"); // Etiqueta html para que el navegador se actualice cada 20 sg.
//----------------------------------------------------------
client.print(tempeHume());
break;
}
if (c == '\n') { // Si el caracter es un salto de linea:
currentLineIsBlank = true; // La petición a terminado, se respondera a dicha peticón en el sigueitne ciclo.
}
else if (c != '\r') { // Si el caracter no es un retorno de carro (la petición no a terminado).
currentLineIsBlank = false; // Seguimos escuchando la petición.
}
}
}
delay(1); // Espera para dar tiempo al navegador a recivir los datos.
client.stop(); // Cierra la conexión.
Serial.println("Cliente desconectado");
Serial.println();
}
}
Aqui va uno de los tantos codigos que he intentado de c#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
using System.IO;
namespace Arduino_Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
String[] puertos = SerialPort.GetPortNames();
String puerto = "";
int dato = 0;
int contador = 0;
private void Form1_Load(object sender, EventArgs e)
{
foreach (string mostrar in puertos)
{
comboBox1.Items.Add(mostrar);
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
puerto = comboBox1.Text;
try
{
serialPort1.PortName = puerto;
serialPort1.ReadTimeout = 20000;
serialPort1.Open();
CheckForIllegalCrossThreadCalls = false;
if (serialPort1.IsOpen == true)
{
timer1.Start();
}
}
catch (Exception ex)
{
MessageBox.Show("Error Siguiente: "+ex,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
timer1.Stop();
}
}
private void timer1_Tick(object sender, EventArgs e)
{
label3.Text = "";
}
private void button1_Click(object sender, EventArgs e)
{
serialPort1.Close();
serialPort1.Dispose();
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
dato = serialPort1.ReadByte();
contador++;
if (contador == 1)
{
label3.Text = "recibiendo datos";
int humedad = dato;
label5.Text = humedad.ToString();
}
if (contador == 2)
{
label3.Text = "recibiendo datos";
int temperatura = dato;
label4.Text = temperatura.ToString();
contador = 0;
}
}
}
}
Por favor necesito ayuda