Попробовал с 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 работает не так, как ожидалось
Код: Выделить всё
#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);
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... responding
Мобильная версия