Залил проект

This commit is contained in:
Sergey Karmanov 2023-10-10 00:49:50 +03:00
parent 528c28c7db
commit aad275a17d
Signed by: serega404
GPG Key ID: B6AD49C8C835460C
5 changed files with 136 additions and 0 deletions

16
LightDataTransfer.sln Normal file
View File

@ -0,0 +1,16 @@

Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LightDataTransfer", "LightDataTransfer\LightDataTransfer.csproj", "{26F6569B-0003-489E-AEA1-3F7112188B44}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{26F6569B-0003-489E-AEA1-3F7112188B44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{26F6569B-0003-489E-AEA1-3F7112188B44}.Debug|Any CPU.Build.0 = Debug|Any CPU
{26F6569B-0003-489E-AEA1-3F7112188B44}.Release|Any CPU.ActiveCfg = Release|Any CPU
{26F6569B-0003-489E-AEA1-3F7112188B44}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<PlatformTarget>ARM64</PlatformTarget>
<Nullable>enable</Nullable>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Iot.Device.Bindings" Version="3.0.0" />
<PackageReference Include="MorseSharp" Version="3.1.1" />
<PackageReference Include="System.Device.Gpio" Version="3.0.0" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,70 @@
using System.Device.Gpio;
using System.Device.Gpio.Drivers;
using MorseSharp;
using MorseSharp.Converter;
TextMorseConverter converter = new TextMorseConverter(Language.English);
const int redPin = 17;
const int greenPin = 27;
const int bluePin = 22;
// Здесь мы используем SysFsDriver, потому что он быстрее всех остальных
// https://github.com/dotnet/iot/issues/1490
using GpioController gpio = new GpioController(PinNumberingScheme.Logical, new SysFsDriver());
gpio.OpenPin(redPin, PinMode.Output);
gpio.OpenPin(greenPin, PinMode.Output);
gpio.OpenPin(bluePin, PinMode.Output);
gpio.Write(redPin, PinValue.High);
gpio.Write(greenPin, PinValue.High);
gpio.Write(bluePin, PinValue.High);
var morse = await converter.ConvertTextToMorse("Hello world");
Console.WriteLine("Morse: " + morse);
while (true)
{
Console.Write("Enter speed multiplier: ");
int speedMultiplier = Convert.ToInt32(Console.ReadLine());
Console.Write("Morse: ");
for (int i = 0; i < morse.Length; i++)
{
Console.Write(morse[i]);
switch (morse[i])
{
case '.':
gpio.Write(redPin, PinValue.Low);
Thread.Sleep(1 * speedMultiplier);
if (morse[i + 1] is not ' ' and not '/')
{
gpio.Write(redPin, PinValue.High);
Thread.Sleep(1 * speedMultiplier);
}
break;
case '_':
gpio.Write(redPin, PinValue.Low);
Thread.Sleep(3 * speedMultiplier);
if (morse[i + 1] is not ' ' and not '/')
{
gpio.Write(redPin, PinValue.High);
Thread.Sleep(1 * speedMultiplier);
}
break;
case '/':
gpio.Write(redPin, PinValue.High);
Thread.Sleep(1 * speedMultiplier);
break;
case ' ':
gpio.Write(redPin, PinValue.High);
Thread.Sleep(3 * speedMultiplier);
break;
default:
Console.WriteLine("Unknown morse code: " + morse[i]);
break;
}
}
Console.WriteLine();
}
gpio.ClosePin(redPin);
gpio.ClosePin(greenPin);
gpio.ClosePin(bluePin);

View File

@ -1,2 +1,34 @@
# MorseToLed
Проект который я делал для конкурса от НКБ ВС, нужно было передать информацию через свет с помощью linux устройства (передатчик) и android смартфона (получатель).
Здесь представлена часть проекта для Raspberry Pi, которая передаёт информацию с помощью морзе. Далее планировалось перенести код в библиотеку и написать в ней небольшой преобразователь текста в морзе, а так же обеспечить возможность подключить внешний преобразователь текста в морзе в стиле Dependency Injection.
## Но
На этапе разработки приложения под android, я хотел попробовать Avalonia framework, но он оказался ещё слишком сырым для android, поэтому я перешёл на maui, но и там всё было не так просто. Так же 2-х летнее расставание с Android studio не позволило бы мне написать приложение в оставшееся время.
# Результат
* Этот репозиторий
* Добавление поддержки русского языка в библиотеку [MorseSharp](https://github.com/p6laris/MorseSharp)
Для откладки этого проекта я нашёл готовое приложение на android [MorseBuddy](https://github.com/anantaraha/morsebuddy) и с его помощью добился скорости стабильного чтения в 65 у.е.
Так же вдохновлялся этим проектом, из которого подчеркнул идею считывания на основе яркости пикселя ([ссылка](https://www.codeproject.com/Articles/46174/Computer-Vision-Decoding-a-Morse-Code-Flashing-LED))
<img src="img/demo.jpg" alt="Результат" style="width:200px;"/>
### Скорость
В коде 1 у.е.равна 1 мс
`В скобочках результат при 65 у.е.`
* `.` - 1 у.е. (65 мс)
* `-` - 3 у.е. (195 мс)
* `меж слов` - 1 у.е. (65 м + два пробела = 195 мс)
* `пробел` - 1 у.е. (65 м)
# Библиотеки
* [MorseSharp](https://github.com/p6laris/MorseSharp)

BIN
img/demo.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB