cocktailweb/CocktailWeb/Pages/SerialTest.razor

70 lines
2.0 KiB
Plaintext

@page "/serialtest"
@using System.IO.Ports
@using Microsoft.Extensions.Options
@inject IOptions<GeneralSettings> Config;
<PageTitle>Serial Test</PageTitle>
<label for="inputdata">Data:</label>
<InputText id="inputdata" @bind-Value="inputdata"></InputText>
<button @onclick="SendData">Send</button>
<p>
<label>Received: @receivedText</label>
</p>
@code {
SerialPort? port;
string? receivedText;
string? inputdata ="LED";
bool status = false;
bool Sending = false;
bool Receiving = false;
public async Task SendData()
{
if (Sending) return; // nichts senden, wenn bereits am Senden
Sending = true;
if (port == null && Config.Value.SerialPort != null)
{
port = new SerialPort(Config.Value.SerialPort);
port.BaudRate = Config.Value.Baudrate; //9600
port.DataReceived += port_DataReceived;
//port.DataBits = 8;
//port.StopBits = StopBits.One;
//port.Parity = Parity.None;
//port.Handshake = Handshake.None;
//port.RtsEnable = true;
port.Open();
}
if (port == null || !port.IsOpen) return; // Port konnte nicht initialisiert werden oder ist bereits geöffnet - dann nicht nochmal öffnen
// port.Write($"<REZEPT:1-40,3-20,5-30,7-30,1-40,3-20,5-30,7-30,1-40,3-20,5-30,7-30:REZEPT>");
port.Write($"<{inputdata}> ");
status = !status;
Sending = false;
// inputdata = null;
}
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (Receiving) return;
Receiving = true;
SerialPort port = (SerialPort)sender;
if (port != null)
{
var text = port.ReadExisting();
Console.WriteLine(text);
receivedText = text;
InvokeAsync(StateHasChanged);
// port.Close();
}
Receiving = false;
}
}