using System;
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];
namespace FlightMonitor
{
public partial class MainForm : Form
{
private SerialPort serialPort;
private GMapOverlay markersOverlay;
private GMapMarker currentLocationMarker;
public MainForm()
{
InitializeComponent();
InitializeGMap();
InitializeSerialPort();
}
private void InitializeGMap()
{
// Cấu hình GMap
[Link] = [Link];
[Link] = 1;
[Link] = 20;
[Link] = 15;
[Link] = false;
[Link] = new PointLatLng(21.004337, 105.844133); // Vị
trí Hà Nội
markersOverlay = new GMapOverlay("markers");
[Link](markersOverlay);
}
private void InitializeSerialPort()
{
// Cấu hình SerialPort
serialPort = new SerialPort
{
BaudRate = 115200,
Parity = [Link],
DataBits = 8,
StopBits = [Link]
};
[Link] += SerialPort_DataReceived;
}
private void SerialPort_DataReceived(object sender,
SerialDataReceivedEventArgs e)
{
// Xử lý dữ liệu nhận từ drone
string data = [Link]();
Invoke(new Action(() => UpdateFlightData(data)));
}
private void UpdateFlightData(string data)
{
// Giả sử dữ liệu là chuỗi
"lat,lon,altitude,battery,temperature,mode,sats"
var values = [Link](',');
if ([Link] == 7 &&
[Link](values[0], out float latitude) &&
[Link](values[1], out float longitude) &&
[Link](values[2], out float altitude) &&
[Link](values[3], out float battery) &&
[Link](values[4], out float temperature) &&
[Link](values[5], out int mode) &&
[Link](values[6], out int satellites))
{
// Cập nhật bản đồ và các thông số
[Link] = $"Altitude: {altitude} m";
[Link] = $"Battery: {battery} V";
[Link] = $"Temperature: {temperature} °C";
[Link] = $"Flight Mode: {GetFlightModeName(mode)}";
[Link] = $"Satellites: {satellites}";
[Link] = $"Latitude: {latitude}";
[Link] = $"Longitude: {longitude}";
UpdateMapLocation(latitude, longitude);
}
}
private string GetFlightModeName(int mode)
{
switch (mode)
{
case 1: return "Auto Level";
case 2: return "Altitude Hold";
case 3: return "GPS Hold";
case 4: return "RTH";
default: return "Unknown";
}
}
private void UpdateMapLocation(float latitude, float longitude)
{
// Cập nhật vị trí drone trên bản đồ
var point = new PointLatLng(latitude, longitude);
[Link] = point;
if (currentLocationMarker == null)
{
currentLocationMarker = new GMarkerGoogle(point,
GMarkerGoogleType.red_dot);
[Link](currentLocationMarker);
}
else
{
[Link] = point;
}
[Link]();
}
private void btnConnect_Click(object sender, EventArgs e)
{
if (![Link])
{
[Link] = [Link];
[Link]();
[Link] = "Disconnect";
}
else
{
[Link]();
[Link] = "Connect";
}
}
private void MainForm_Load(object sender, EventArgs e)
{
[Link]([Link]());
}
private void btnZoomIn_Click(object sender, EventArgs e)
{
if ([Link] < [Link])
[Link]++;
}
private void btnZoomOut_Click(object sender, EventArgs e)
{
if ([Link] > [Link])
[Link]--;
}
private void btnClearWaypoints_Click(object sender, EventArgs e)
{
// Xóa tất cả waypoint
[Link]();
if (currentLocationMarker != null)
[Link](currentLocationMarker);
}
private void gMapControl1_MouseClick(object sender, MouseEventArgs e)
{
if ([Link] == [Link])
{
// Lấy tọa độ từ vị trí chuột
var point = [Link](e.X, e.Y);
// Hỏi tên waypoint
string waypointName = [Link]("Add Waypoint", "Enter a name
for the waypoint:");
if ([Link](waypointName))
{
waypointName = "Waypoint"; // Tên mặc định
}
// Thêm marker vào bản đồ
var waypointMarker = new GMarkerGoogle(point,
GMarkerGoogleType.blue_pushpin);
[Link] = $"Name: {waypointName}\nLat:
{[Link]:F6}\nLon: {[Link]:F6}";
[Link] = [Link];
[Link](waypointMarker);
// Truyền tọa độ qua SerialPort
SendCoordinatesToDrone([Link], [Link]);
// Thông báo
[Link]($"Waypoint '{waypointName}' added at
({[Link]:F6}, {[Link]:F6}).");
}
}
private void SendCoordinatesToDrone(double latitude, double longitude)
{
if (serialPort != null && [Link])
{
try
{
// Định dạng chuỗi tọa độ
string dataToSend = $"{latitude:F6},{longitude:F6}";
// Gửi dữ liệu qua SerialPort
[Link](dataToSend);
[Link]($"Coordinates sent to drone:\n{dataToSend}");
}
catch (Exception ex)
{
[Link]($"Failed to send data to drone: {[Link]}");
}
}
else
{
[Link]("SerialPort is not open. Cannot send data to
drone.");
}
}
}
}