Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tiny Code Reader #13

Merged
merged 4 commits into from
Jan 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 47 additions & 23 deletions Source/CompositeDevices.sln
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,25 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElectronmagneticRelayModule
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sensors", "Sensors", "{78203E26-CBDE-48BC-B8CF-617F8A863D65}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Motion", "Motion", "{7A284A89-FBA4-4E57-9357-B0F3AE9AE429}"
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PersonSensor", "PersonSensor", "{4A6B7EF6-7730-4570-A72F-6E4506227668}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UsefulSensors", "UsefulSensors", "{B9A8627E-0A83-4FEB-B3CF-7772109C3F44}"
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sample", "Sample", "{1B4743D8-E3B7-4466-9A66-266B91AB3676}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PersonSensor", "PersonSensor", "{4A6B7EF6-7730-4570-A72F-6E4506227668}"
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Cameras", "Cameras", "{EFA4C1B3-5257-451E-908F-AF9EDA45F224}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.UsefulSensors.PersonSensor", "Sensors.Motion.UsefulSensors.PersonSensor\Driver\Sensors.Motion.UsefulSensors.PersonSensor.csproj", "{773E12FF-A4F0-4835-9BAA-34454DB42E6B}"
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UsefulSensors", "UsefulSensors", "{72A32E4E-7492-4F7C-BF42-9CF2E664338B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sample", "Sample", "{1B4743D8-E3B7-4466-9A66-266B91AB3676}"
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TinyCodeReader", "TinyCodeReader", "{FCD85A86-0779-4AC3-A12C-91F3C0C5D161}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sample", "Sample", "{B155FD13-EEE6-40B3-9C3A-A0FEADCBE24F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Camera.UsefulSensors.PersonSensor", "Sensors.Camera.UsefulSensors.PersonSensor\Driver\Sensors.Camera.UsefulSensors.PersonSensor.csproj", "{D562BCD2-DDBC-483D-881A-72284A904184}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PersonSensor_Sample", "Sensors.Camera.UsefulSensors.PersonSensor\Samples\PersonSensor_Sample\PersonSensor_Sample.csproj", "{722B73EF-95E5-498F-8A95-FC2F62DF9B36}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Camera.UsefulSensors.TinyCodeReader", "Sensors.Camera.UsefulSensors.TinyCodeReader\Driver\Sensors.Camera.UsefulSensors.TinyCodeReader.csproj", "{D55D9CEE-0E03-43A5-8B8A-11B723C3D608}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PersonSensor_Sample", "Sensors.Motion.UsefulSensors.PersonSensor\Samples\PersonSensor_Sample\PersonSensor_Sample.csproj", "{6046728F-EFF4-4B77-8C15-7CB87B145395}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TinyCodeReader_Sample", "Sensors.Camera.UsefulSensors.TinyCodeReader\Samples\TinyCodeReader_Sample\TinyCodeReader_Sample.csproj", "{A0C0F999-2D2D-4674-BA32-E244CC53D937}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Expand Down Expand Up @@ -107,18 +115,30 @@ Global
{815E8496-8359-4D35-83EB-A1120D3AA404}.Release|Any CPU.ActiveCfg = Release|Any CPU
{815E8496-8359-4D35-83EB-A1120D3AA404}.Release|Any CPU.Build.0 = Release|Any CPU
{815E8496-8359-4D35-83EB-A1120D3AA404}.Release|Any CPU.Deploy.0 = Release|Any CPU
{773E12FF-A4F0-4835-9BAA-34454DB42E6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{773E12FF-A4F0-4835-9BAA-34454DB42E6B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{773E12FF-A4F0-4835-9BAA-34454DB42E6B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{773E12FF-A4F0-4835-9BAA-34454DB42E6B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{773E12FF-A4F0-4835-9BAA-34454DB42E6B}.Release|Any CPU.Build.0 = Release|Any CPU
{773E12FF-A4F0-4835-9BAA-34454DB42E6B}.Release|Any CPU.Deploy.0 = Release|Any CPU
{6046728F-EFF4-4B77-8C15-7CB87B145395}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6046728F-EFF4-4B77-8C15-7CB87B145395}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6046728F-EFF4-4B77-8C15-7CB87B145395}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{6046728F-EFF4-4B77-8C15-7CB87B145395}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6046728F-EFF4-4B77-8C15-7CB87B145395}.Release|Any CPU.Build.0 = Release|Any CPU
{6046728F-EFF4-4B77-8C15-7CB87B145395}.Release|Any CPU.Deploy.0 = Release|Any CPU
{D562BCD2-DDBC-483D-881A-72284A904184}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D562BCD2-DDBC-483D-881A-72284A904184}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D562BCD2-DDBC-483D-881A-72284A904184}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{D562BCD2-DDBC-483D-881A-72284A904184}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D562BCD2-DDBC-483D-881A-72284A904184}.Release|Any CPU.Build.0 = Release|Any CPU
{D562BCD2-DDBC-483D-881A-72284A904184}.Release|Any CPU.Deploy.0 = Release|Any CPU
{722B73EF-95E5-498F-8A95-FC2F62DF9B36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{722B73EF-95E5-498F-8A95-FC2F62DF9B36}.Debug|Any CPU.Build.0 = Debug|Any CPU
{722B73EF-95E5-498F-8A95-FC2F62DF9B36}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{722B73EF-95E5-498F-8A95-FC2F62DF9B36}.Release|Any CPU.ActiveCfg = Release|Any CPU
{722B73EF-95E5-498F-8A95-FC2F62DF9B36}.Release|Any CPU.Build.0 = Release|Any CPU
{722B73EF-95E5-498F-8A95-FC2F62DF9B36}.Release|Any CPU.Deploy.0 = Release|Any CPU
{D55D9CEE-0E03-43A5-8B8A-11B723C3D608}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D55D9CEE-0E03-43A5-8B8A-11B723C3D608}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D55D9CEE-0E03-43A5-8B8A-11B723C3D608}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{D55D9CEE-0E03-43A5-8B8A-11B723C3D608}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D55D9CEE-0E03-43A5-8B8A-11B723C3D608}.Release|Any CPU.Build.0 = Release|Any CPU
{D55D9CEE-0E03-43A5-8B8A-11B723C3D608}.Release|Any CPU.Deploy.0 = Release|Any CPU
{A0C0F999-2D2D-4674-BA32-E244CC53D937}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A0C0F999-2D2D-4674-BA32-E244CC53D937}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A0C0F999-2D2D-4674-BA32-E244CC53D937}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{A0C0F999-2D2D-4674-BA32-E244CC53D937}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A0C0F999-2D2D-4674-BA32-E244CC53D937}.Release|Any CPU.Build.0 = Release|Any CPU
{A0C0F999-2D2D-4674-BA32-E244CC53D937}.Release|Any CPU.Deploy.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -136,12 +156,16 @@ Global
{BC092D17-F8D5-4BEA-ABE4-E98B44A04DA6} = {AE474B14-7388-421B-BB92-8700CD54BC57}
{29CF3228-7907-4FD6-88E3-DB91023B6281} = {AE474B14-7388-421B-BB92-8700CD54BC57}
{815E8496-8359-4D35-83EB-A1120D3AA404} = {BC092D17-F8D5-4BEA-ABE4-E98B44A04DA6}
{7A284A89-FBA4-4E57-9357-B0F3AE9AE429} = {78203E26-CBDE-48BC-B8CF-617F8A863D65}
{B9A8627E-0A83-4FEB-B3CF-7772109C3F44} = {7A284A89-FBA4-4E57-9357-B0F3AE9AE429}
{4A6B7EF6-7730-4570-A72F-6E4506227668} = {B9A8627E-0A83-4FEB-B3CF-7772109C3F44}
{773E12FF-A4F0-4835-9BAA-34454DB42E6B} = {4A6B7EF6-7730-4570-A72F-6E4506227668}
{4A6B7EF6-7730-4570-A72F-6E4506227668} = {72A32E4E-7492-4F7C-BF42-9CF2E664338B}
{1B4743D8-E3B7-4466-9A66-266B91AB3676} = {4A6B7EF6-7730-4570-A72F-6E4506227668}
{6046728F-EFF4-4B77-8C15-7CB87B145395} = {1B4743D8-E3B7-4466-9A66-266B91AB3676}
{EFA4C1B3-5257-451E-908F-AF9EDA45F224} = {78203E26-CBDE-48BC-B8CF-617F8A863D65}
{72A32E4E-7492-4F7C-BF42-9CF2E664338B} = {EFA4C1B3-5257-451E-908F-AF9EDA45F224}
{FCD85A86-0779-4AC3-A12C-91F3C0C5D161} = {72A32E4E-7492-4F7C-BF42-9CF2E664338B}
{B155FD13-EEE6-40B3-9C3A-A0FEADCBE24F} = {FCD85A86-0779-4AC3-A12C-91F3C0C5D161}
{D562BCD2-DDBC-483D-881A-72284A904184} = {4A6B7EF6-7730-4570-A72F-6E4506227668}
{722B73EF-95E5-498F-8A95-FC2F62DF9B36} = {1B4743D8-E3B7-4466-9A66-266B91AB3676}
{D55D9CEE-0E03-43A5-8B8A-11B723C3D608} = {FCD85A86-0779-4AC3-A12C-91F3C0C5D161}
{A0C0F999-2D2D-4674-BA32-E244CC53D937} = {B155FD13-EEE6-40B3-9C3A-A0FEADCBE24F}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {BF2FC8CE-57C6-468C-B82D-D8204E6D9360}
Expand Down
10 changes: 5 additions & 5 deletions Source/Relays.ElectromagneticRelayModule/Driver/Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ private ElectromagneticRelayModule module;

public override Task Initialize()
{
Console.WriteLine("Initialize...");
Resolver.Log.Info("Initialize...");

module = new ElectromagneticRelayModule(Device.CreateI2cBus(), ElectromagneticRelayModule.GetAddressFromPins(false, false, false));

Expand All @@ -28,26 +28,26 @@ public override Task Run()
{
for (int i = 0; i < 5; i++)
{
Console.Write("All on (closed)");
Resolver.Log.Info("All on (closed)");
module.SetAllOn();

Thread.Sleep(1000);

Console.Write("All off (open)");
Resolver.Log.Info("All off (open)");
module.SetAllOff();

Thread.Sleep(1000);

for (int j = 0; j < (int)RelayIndex.Relay4; j++)
{
Console.Write($"{(RelayIndex)j} on (closed)");
Resolver.Log.Info($"{(RelayIndex)j} on (closed)");
module.Relays[j].State = RelayState.Closed;
Thread.Sleep(1000);
}

for (int j = 0; j < (int)RelayIndex.Relay4; j++)
{
Console.Write($"{(RelayIndex)j} off (open)");
Resolver.Log.Info($"{(RelayIndex)j} off (open)");
module.Relays[j].State = RelayState.Open;
Thread.Sleep(1000);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
using Meadow.Devices;
using Meadow.Foundation.Relays;
using Meadow.Peripherals.Relays;
using System;
using System.Threading;
using System.Threading.Tasks;
using static Meadow.Foundation.Relays.ElectromagneticRelayModule;
Expand All @@ -17,7 +16,7 @@ public class MeadowApp : App<F7FeatherV2>

public override Task Initialize()
{
Console.WriteLine("Initialize...");
Resolver.Log.Info("Initialize...");

module = new ElectromagneticRelayModule(Device.CreateI2cBus(), ElectromagneticRelayModule.GetAddressFromPins(false, false, false));

Expand All @@ -28,26 +27,26 @@ public override Task Run()
{
for (int i = 0; i < 5; i++)
{
Console.Write("All on (closed)");
Resolver.Log.Info("All on (closed)");
module.SetAllOn();

Thread.Sleep(1000);

Console.Write("All off (open)");
Resolver.Log.Info("All off (open)");
module.SetAllOff();

Thread.Sleep(1000);

for (int j = 0; j < (int)RelayIndex.Relay4; j++)
{
Console.Write($"{(RelayIndex)j} on (closed)");
Resolver.Log.Info($"{(RelayIndex)j} on (closed)");
module.Relays[j].State = RelayState.Closed;
Thread.Sleep(1000);
}

for (int j = 0; j < (int)RelayIndex.Relay4; j++)
{
Console.Write($"{(RelayIndex)j} off (open)");
Resolver.Log.Info($"{(RelayIndex)j} off (open)");
module.Relays[j].State = RelayState.Open;
Thread.Sleep(1000);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace Meadow.Foundation.Sensors;
namespace Meadow.Foundation.Sensors.Camera;

public partial class PersonSensor
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
using System;
using System.Linq;

namespace Meadow.Foundation.Sensors;
namespace Meadow.Foundation.Sensors.Camera;

/// <summary>
/// Represents a Useful Sensor's Person Sensor
Expand All @@ -29,13 +29,12 @@ public partial class PersonSensor : II2cPeripheral


/// <summary>
/// Initializes a new instance of the ElectroMagneticRelayModule device
/// Initializes a new instance of the Useful Sensor's Person Sensor device
/// </summary>
/// <param name="i2cBus">The I2C bus the peripheral is connected to</param>
/// <param name="address">The bus address of the peripheral</param>
public PersonSensor(II2cBus i2cBus, byte address = 0x62)
public PersonSensor(II2cBus i2cBus)
{
i2cComms = new I2cCommunications(i2cBus, address, DATA_LENGTH);
i2cComms = new I2cCommunications(i2cBus, DefaultI2cAddress, DATA_LENGTH);
readBuffer = new byte[DATA_LENGTH];
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace Meadow.Foundation.Sensors
namespace Meadow.Foundation.Sensors.Camera
{
public partial class PersonSensor
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using static Meadow.Foundation.Sensors.PersonSensor;
using static Meadow.Foundation.Sensors.Camera.PersonSensor;

namespace Meadow.Foundation.Sensors;
namespace Meadow.Foundation.Sensors.Camera;

/// <summary>
/// Represents the structured results returned from the person sensor.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Meadow.Foundation.Sensors.PersonSensor
# Meadow.Foundation.Sensors.Camera.UsefulSensors.PersonSensor

**Useful Sensor's I2C optical person sensor**
**Useful Sensor's Person Sensor I2C optical person sensor**

The **UsefulSensorsPersonSensor** library is designed for the [Wilderness Labs](www.wildernesslabs.co) Meadow .NET IoT platform and is part of [Meadow.Foundation](https://developer.wildernesslabs.co/Meadow/Meadow.Foundation/).

Expand All @@ -17,7 +17,7 @@ PersonSensor personSensor;

public override Task Initialize()
{
Console.WriteLine("Initialize...");
Resolver.Log.Info("Initialize...");

personSensor = new PersonSensor(Device.CreateI2cBus());

Expand All @@ -39,18 +39,14 @@ private void DisplaySensorData(PersonSensorResults sensorData)
{
if (sensorData.NumberOfFaces == 0)
{
Console.WriteLine("No faces found");
Resolver.Log.Info("No faces found");
return;
}

for (int i = 0; i < sensorData.NumberOfFaces; ++i)
{
var face = sensorData.FaceData[i];
Console.Write($"Face #{i}: ");
Console.Write($"{face.BoxConfidence} confidence, ");
Console.Write($"({face.BoxLeft}, {face.BoxTop}), ");
Console.Write($"({face.BoxRight}, {face.BoxBottom}), ");
Console.WriteLine(face.IsFacing == 1 ? "facing" : "not facing");
Resolver.Log.Info($"Face #{i}: {face.BoxConfidence} confidence, ({face.BoxLeft}, {face.BoxTop}), ({face.BoxRight}, {face.BoxBottom}), facing: {face.IsFacing}");
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@
<AssemblyName>UsefulSensorsPersonSensor</AssemblyName>
<Company>Wilderness Labs, Inc</Company>
<PackageProjectUrl>http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/</PackageProjectUrl>
<PackageId>Meadow.Foundation.Sensors.PersonSensor</PackageId>
<PackageId>Meadow.Foundation.Sensors.Camera.UsefulSensors.PersonSensor</PackageId>
<RepositoryUrl>https://github.com/WildernessLabs/Meadow.Foundation</RepositoryUrl>
<PackageTags>Meadow.Foundation,Meadow,camera,person,sensor,AI</PackageTags>
<PackageTags>Meadow.Foundation,Meadow,camera,person,sensor,AI,useful,motion</PackageTags>
<Version>1.7.0</Version>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Description>Useful Sensor's I2C optical person sensor</Description>
<Description>Useful Sensor's Person Sensor I2C optical person sensor</Description>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
using Meadow;
using Meadow.Devices;
using Meadow.Foundation.Sensors;
using System;
using Meadow.Foundation.Sensors.Camera;
using System.Threading;
using System.Threading.Tasks;

Expand All @@ -15,7 +14,7 @@ public class MeadowApp : App<F7CoreComputeV2>

public override Task Initialize()
{
Console.WriteLine("Initialize...");
Resolver.Log.Info("Initialize...");

personSensor = new PersonSensor(Device.CreateI2cBus());

Expand All @@ -38,18 +37,14 @@ private void DisplaySensorData(PersonSensorResults sensorData)
{
if (sensorData.NumberOfFaces == 0)
{
Console.WriteLine("No faces found");
Resolver.Log.Info("No faces found");
return;
}

for (int i = 0; i < sensorData.NumberOfFaces; ++i)
{
var face = sensorData.FaceData[i];
Console.Write($"Face #{i}: ");
Console.Write($"{face.BoxConfidence} confidence, ");
Console.Write($"({face.BoxLeft}, {face.BoxTop}), ");
Console.Write($"({face.BoxRight}, {face.BoxBottom}), ");
Console.WriteLine(face.IsFacing == 1 ? "facing" : "not facing");
Resolver.Log.Info($"Face #{i}: {face.BoxConfidence} confidence, ({face.BoxLeft}, {face.BoxTop}), ({face.BoxRight}, {face.BoxBottom}), facing: {face.IsFacing}");
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\..\Meadow.Core\source\implementations\f7\Meadow.F7\Meadow.F7.csproj" />
<ProjectReference Include="..\..\Driver\Sensors.Motion.UsefulSensors.PersonSensor.csproj" />
<ProjectReference Include="..\..\Driver\Sensors.Camera.UsefulSensors.PersonSensor.csproj" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# Meadow.Foundation.Sensors.Cameras.UsefulSensors.TinyCodeReader

**Useful Sensor's Tiny Code Reader I2C optical QR code reader**

The **UsefulSensorsTinyCodeReader** library is designed for the [Wilderness Labs](www.wildernesslabs.co) Meadow .NET IoT platform and is part of [Meadow.Foundation](https://developer.wildernesslabs.co/Meadow/Meadow.Foundation/).

The **Meadow.Foundation** peripherals library is an open-source repository of drivers and libraries that streamline and simplify adding hardware to your C# .NET Meadow IoT application.

For more information on developing for Meadow, visit [developer.wildernesslabs.co](http://developer.wildernesslabs.co/).

To view all Wilderness Labs open-source projects, including samples, visit [github.com/wildernesslabs](https://github.com/wildernesslabs/).

## Usage

```csharp
TinyCodeReader tinyCodeReader;

public override Task Initialize()
{
Resolver.Log.Info("Initialize...");

tinyCodeReader = new TinyCodeReader(Device.CreateI2cBus());

return Task.CompletedTask;
}

public override Task Run()
{
//one time read
var qrCode = tinyCodeReader.ReadCode();

if (qrCode != null)
{
Resolver.Log.Info($"QR Code: {qrCode}");
}
else
{
Resolver.Log.Info("No QR Code Found");
}

//continuous read
tinyCodeReader.CodeRead += TinyCodeReader_CodeRead;
tinyCodeReader.StartUpdating(TimeSpan.FromSeconds(1));

return Task.CompletedTask;
}

private void TinyCodeReader_CodeRead(object sender, string e)
{
Resolver.Log.Info($"QRCode message: {e} ({DateTime.Now})");
}

```
## How to Contribute

- **Found a bug?** [Report an issue](https://github.com/WildernessLabs/Meadow_Issues/issues)
- Have a **feature idea or driver request?** [Open a new feature request](https://github.com/WildernessLabs/Meadow_Issues/issues)
- Want to **contribute code?** Fork the [Meadow.Foundation.CompositeDevices](https://github.com/WildernessLabs/Meadow.Foundation.CompositeDevices) repository and submit a pull request against the `develop` branch


## Need Help?

If you have questions or need assistance, please join the Wilderness Labs [community on Slack](http://slackinvite.wildernesslabs.co/).
Loading
Loading