С# UDP не отвечаетC#

Место общения программистов C#
Ответить
Anonymous
 С# UDP не отвечает

Сообщение Anonymous »

Я пытаюсь поговорить с Arduino через UDP.
Попробовал с packagesender, Arduino отвечает правильно.
Я пытаюсь собрать C# для Windows, работает довольно хорошо, но у меня получается Я застрял на некоторых частях.
Моя основная идея состоит в том, чтобы программное обеспечение Windows отправляло UDP-сообщение каждые 0,250 мс в сторону Arduino и выполняло действие в зависимости от ответа Arduino.
это короткое сообщение в обоих направлениях
ИЛИ
все время прослушиваю порт 1234, но иногда я хочу отправить сообщение в сторону Arduino.< /p>
Надеюсь, у кого-то больше навыков, чем у меня, и он поможет мне это исправить.

Код: Выделить всё

using System.Net;
using System.Net.Sockets;
using System.Runtime.CompilerServices;
using System.Text;

namespace control_drone
{

public partial class Form1 : Form
{
//public static int listenPort = 1234;
// private async Task Sending_Message(String text_to_sendd)
//{
public void Sending_Message(String text_to_sendd)
{
//await Task.Run(() =>
//{
//  byte[] data;
Socket sending_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPAddress send_to_address = IPAddress.Parse("192.168.1.126");
IPEndPoint sending_end_point = new IPEndPoint(send_to_address, 1234);
byte[] send_buffer = Encoding.ASCII.GetBytes(text_to_sendd);
sending_socket.SendTo(send_buffer, sending_end_point);

# This parts below work great except if a the arduino is not connected the software freeze

//   IPEndPoint sender = new IPEndPoint(IPAddress.Any, 1234);
// EndPoint Remote = (EndPoint)(sender);

//data = new byte[256];
//int recv = sending_socket.ReceiveFrom(data, ref Remote);
//string response = Encoding.ASCII.GetString(data, 0, recv);
//test1.Text = response;
//this.Text = response;

//  });

}

public Form1()
{
InitializeComponent();
ReceiveMessage();
//StartListener();
//UDPListener();
// ListenOnport();
//Broadcast_to_arduino();
}

// seems to me that this parts doesn't work at all
private async Task ReceiveMessage()
{
using (var udpClient = new UdpClient(1234))
{
while (true)
{
var receivedResult = await udpClient.ReceiveAsync();
string text = Encoding.ASCII.GetString(receivedResult.Buffer);
this.Text = text;
}
}
}

private void Form1_Load(object sender, EventArgs e)
{
}

private void D1H_Click(object sender, EventArgs e)
{
//ReceiveMessage();
Sending_Message("Yellow hovering");
//this.Text=
//   UDPListener();
//Broadcast_to_arduino();

}

private void D1RTH_Click(object sender, EventArgs e)
{
Sending_Message("COMPUTERPR");
}

private void D2H_Click(object sender, EventArgs e)
{
Sending_Message("COMPUTERYH");
}

private void D2RTH_Click(object sender, EventArgs e)
{
Sending_Message("COMPUTERYR");
}

private void D3H_Click(object sender, EventArgs e)
{
Sending_Message("COMPUTERGH");
}

private void D3RTH_Click(object sender, EventArgs e)
{
Sending_Message("COMPUTERGR");
}

private void D4H_Click(object sender, EventArgs e)
{
Sending_Message("COMPUTERWH");
}

private void D4RTH_Click(object sender, EventArgs e)
{
Sending_Message("COMPUTERWR");
}

private void Green(object sender, PaintEventArgs e)
{
splitContainer1.Panel2.BackColor = Color.AliceBlue;
}

private void split2_panel1_new_colour(object sender, PaintEventArgs e)
{
splitContainer2.Panel2.BackColor= Color.Blue;
}

private void split2_panel2_new_colour(object sender, PaintEventArgs e)
{

}
}
}
работает довольно хорошо, за исключением того, что если Arduino отключен или не отвечает, мое программное обеспечение Windows зависает, и мне пришлось перезагружаться.
Ниже приведен код Arduino у кого пока все работает хорошо, только программное обеспечение Windows работает не так, как ожидалось

Код: Выделить всё

#include "WiFi.h"
#include "AsyncUDP.h"

const char *ssid =  "";
const char *password = "";

int button1=3;
int button2=2;
int relay=9;

AsyncUDP udp;

void setup() {
pinMode(button1, INPUT_PULLUP);
pinMode(button2, INPUT_PULLUP);
pinMode(button1, OUTPUT); //need for seed arduino
pinMode(button2, OUTPUT); //need for seed arduino

Serial.begin(115200);

WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
if (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("WiFi Failed");
while (1) {
delay(1000);
}
}
if (udp.listen(1234)) {
Serial.print("UDP Listening on IP: ");
Serial.println(WiFi.localIP());
Serial.println("UDP connected");
udp.onPacket([](AsyncUDPPacket packet) {
//Serial.print(", Data: ");
//Serial.write(packet.data());
//Serial.println();
//reply to the client
//packet.printf("Got %u bytes of data", packet.data());
//packet.print("Hello Server");
//packet.broadcastTo("Anyone", 1234);

//button

int Lastsate;
int state1=digitalRead(button1);
int state2=digitalRead(button2);
if(state1 == 1 && (state2 == 0))
{

//Serial.print("first side is pressed:  ");
//Serial.println(state1);
packet.print("first side is pressed");
//packet.print("button number 2");
//digitalWrite(relay, HIGH);
Lastsate=0;
}

if(state2 == 1 &&  (state1 == 0)){
//Serial.print("button number 2:  ");
//Serial.println(state2);
packet.print("button number 2");
//digitalWrite(relay, LOW);
Lastsate=0;

}
// for esp32C3 seeed value need to be 0
if(state1 == 0 && (state2 == 0)){
//Serial.println("well there is no winnerrrrr");
packet.print("No button pressed");
Lastsate=1;

}
//button parts

});
//Send unicast
//udp.print("Hello Server!");
//udp.broadcastTo("Anyone", 1234);
}
}

void loop() {
delay(1000);
Serial.println("new line");
//Send broadcast on port 1234
// udp.broadcastTo("Anyone here?", 1234);
}
Я пробую другой код из Интернета, и мне кажется, что никто не работает, поскольку ответ Arduino не появляется в текстовом поле, но Arduino получает команду, потому что я видел ее в сериалах и также хорошо работает с отправителем пакетов в обе стороны

Подробнее здесь: https://stackoverflow.com/questions/791 ... responding
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»