You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
2.7 KiB
57 lines
2.7 KiB
using System;
|
|
using System.Text;
|
|
using M2Mqtt;
|
|
using M2Mqtt.Messages;
|
|
using System.Text.Json;
|
|
|
|
namespace RaspiControl {
|
|
class Programm {
|
|
private static MqttClient client;
|
|
|
|
static void Main(string[] args) {
|
|
try {
|
|
client = new MqttClient("localhost");
|
|
client.MqttMsgPublishReceived += Client_MqttMsgPublishReceived;
|
|
string clientId = Guid.NewGuid().ToString();
|
|
client.Connect(clientId);
|
|
client.Subscribe(new string[] { "APROG/REQUEST" }, new byte[] { MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE });
|
|
Joystick joystick = new Joystick();
|
|
joystick.JoystickChanged += Joystick_JoystickChanged;
|
|
|
|
} catch (Exception ex) {
|
|
Console.WriteLine(ex.Message);
|
|
}
|
|
}
|
|
|
|
private static void Joystick_JoystickChanged(object sender, JoystickEventArgs e) {
|
|
switch (e.Button) {
|
|
case JoystickButton.None:
|
|
break;
|
|
case JoystickButton.Left:
|
|
client.Publish(MqttConstants.MOBILE_NAV_TURN_TOPIC, Encoding.UTF8.GetBytes($"{NavigationConstants.TURN_ANGLE_LEFT}"), MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE, false);
|
|
break;
|
|
case JoystickButton.Right:
|
|
client.Publish(MqttConstants.MOBILE_NAV_TURN_TOPIC, Encoding.UTF8.GetBytes($"{NavigationConstants.TURN_ANGLE_RIGHT}"), MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE, false);
|
|
break;
|
|
case JoystickButton.Up:
|
|
client.Publish(MqttConstants.MOBILE_NAV_MOVE_TOPIC, Encoding.UTF8.GetBytes($"{NavigationConstants.SPEED_FORWARD}"), MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE, false);
|
|
break;
|
|
case JoystickButton.Down:
|
|
client.Publish(MqttConstants.MOBILE_NAV_MOVE_TOPIC, Encoding.UTF8.GetBytes($"{NavigationConstants.SPEED_BACKWARD}"), MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE, false);
|
|
break;
|
|
case JoystickButton.Center:
|
|
client.Publish(MqttConstants.MOBILE_NAV_STOP_TOPIC, Encoding.UTF8.GetBytes($"{NavigationConstants.STOP}"), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false);
|
|
break;
|
|
}
|
|
}
|
|
|
|
private static void Client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e) {
|
|
Console.Write(e.Topic + "\n");
|
|
Console.Write(Encoding.UTF8.GetString(e.Message) + "\n");
|
|
Dictionary<string,object> data = JsonSerializer.Deserialize<Dictionary<string, object>>(e.Message);
|
|
foreach(KeyValuePair<string,object> entry in data) {
|
|
Console.WriteLine(entry.Key+ ": " + entry.Value);
|
|
}
|
|
}
|
|
}
|
|
} |