En esta ocasión empezaremos a jugar con las entradas del GPIO poniendo tres pulsadores que usaremos para hacer diferentes acciones.
Este seria el esquema
![](https://www.rivas.cloud/wp-content/uploads/2022/04/Schematic_Meteo-RPi_2022-04-13-1024x724.png)
Crearemos un nuevo proyecto C# para net Core 3.1 y pegaremos este codigo
En el se puede ver como llamamos a las funciones que actuaran con los eventos de paso de nivel alto a nivel bajo ( PinEventTypes.Rising ) y las de paso de nivel bajo a nivel alto (PinEventTypes.Falling ) , vamos cuando se pulsa y se suelta el pulsador ….
using System; using System.Device.Gpio; using System.Threading; namespace Test_Pulsadores { class RPi { static void Main(string[] args) { //Codigo Raspberry pi //Definicion de I/O int Led_Rojo = 26; int Led_Verde = 6; int Led_Amarillo = 5; int pulsador_1 = 17; int pulsador_2 = 27; int pulsador_3 = 22; GpioController controller = new GpioController(); //Modo de trabajo I/O controller.OpenPin(Led_Verde, PinMode.Output); controller.OpenPin(Led_Amarillo, PinMode.Output); controller.OpenPin(Led_Rojo, PinMode.Output); controller.OpenPin(pulsador_1, PinMode.InputPullUp); controller.OpenPin(pulsador_2, PinMode.InputPullUp); controller.OpenPin(pulsador_3, PinMode.InputPullUp); controller.RegisterCallbackForPinValueChangedEvent(pulsador_1, PinEventTypes.Rising, evento_pulsar_pulsador_1); controller.RegisterCallbackForPinValueChangedEvent(pulsador_1, PinEventTypes.Falling, evento_soltar_pulsador_1); controller.RegisterCallbackForPinValueChangedEvent(pulsador_2, PinEventTypes.Rising, evento_pulsar_pulsador_2); controller.RegisterCallbackForPinValueChangedEvent(pulsador_2, PinEventTypes.Falling, evento_soltar_pulsador_2); controller.RegisterCallbackForPinValueChangedEvent(pulsador_3, PinEventTypes.Rising, evento_pulsar_pulsador_3); controller.RegisterCallbackForPinValueChangedEvent(pulsador_3, PinEventTypes.Falling, evento_soltar_pulsador_3); while (true) { for (int nContador = 0; nContador < 3; nContador++) { Thread.Sleep(250); controller.Write(Led_Verde, PinValue.Low); controller.Write(Led_Amarillo, PinValue.Low); controller.Write(Led_Rojo, PinValue.Low); switch (nContador) { case 0: controller.Write(Led_Verde, PinValue.High); break; case 1: controller.Write(Led_Amarillo, PinValue.High); break; case 2: controller.Write(Led_Rojo, PinValue.High); break; } Thread.Sleep(250); Console.Write("."); } } void evento_pulsar_pulsador_1(object sender, PinValueChangedEventArgs args) { Console.WriteLine(DateTime.Now + " " + args.PinNumber + " pulsado ..."); controller.Write(Led_Rojo, PinValue.High); Thread.Sleep(500); controller.Write(Led_Rojo, PinValue.Low); } void evento_soltar_pulsador_1(object sender, PinValueChangedEventArgs args) { Console.WriteLine(DateTime.Now + " " + args.PinNumber + " soltado ...."); } void evento_pulsar_pulsador_2(object sender, PinValueChangedEventArgs args) { Console.WriteLine(DateTime.Now + " " + args.PinNumber + " pulsado ..."); controller.Write(Led_Amarillo, PinValue.High); Thread.Sleep(500); controller.Write(Led_Amarillo, PinValue.Low); } void evento_soltar_pulsador_2(object sender, PinValueChangedEventArgs args) { Console.WriteLine(DateTime.Now + " " + args.PinNumber + " soltado ...."); } void evento_pulsar_pulsador_3(object sender, PinValueChangedEventArgs args) { Console.WriteLine(DateTime.Now + " " + args.PinNumber + " pulsado ..."); controller.Write(Led_Verde, PinValue.High); Thread.Sleep(500); controller.Write(Led_Verde, PinValue.Low); } void evento_soltar_pulsador_3(object sender, PinValueChangedEventArgs args) { Console.WriteLine(DateTime.Now + " " + args.PinNumber + " soltado ...."); } } } }
Y veremos en la consola cuando pulsamos y soltamos cada uno de los pulsadores , así como cuando pulsamos nos encenderá el led correspondiente durante medio segundo
El publica con pscp esta bien , pero no es lo mas optimo , después de buscar encontré Dot Net SSH Deployer , que podéis encontrar aquí .
Puede ser que necesitéis instalar el SDK de net core 3.1
https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/sdk-3.1.417-windows-x64-installer
y el SDK de NET 6.0
https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/sdk-6.0.201-windows-x64-installer
En la raiz del proyecto ejecutar
dotnet tool install --global dotnet-ssh
![](https://www.rivas.cloud/wp-content/uploads/2022/04/image-29.png)
Y para configurar seguir los pasos que nos va preguntando
dotnet-ssh configure MyRaspberryPi --auth-type UserSecrets --auth usuario:contraseña
![](https://www.rivas.cloud/wp-content/uploads/2022/04/image-30.png)
Ahora cuando le demos a ejecutar subirá directamente y de forma diferencial todos los ficheros modificados , la primera carga es un poco lenta ya que tiene que subir todas las dependencias del proyecto.
![](https://www.rivas.cloud/wp-content/uploads/2022/04/image-25.png)
![](https://www.rivas.cloud/wp-content/uploads/2022/04/image-26.png)
Luego solo actualiza los cambios con lo que es muy rápido en hacer el deploy
![](https://www.rivas.cloud/wp-content/uploads/2022/04/image-28.png)
![](https://www.rivas.cloud/wp-content/uploads/2022/04/image-31-1024x600.png)
Ejecutaremos nuestra aplicación con :
dotnet /home/antonio/net/test_pulsadores/Test\ Pulsadores.dll
![](https://www.rivas.cloud/wp-content/uploads/2022/04/image-32.png)
Y este seria el resultado ejecutándose
![](https://www.rivas.cloud/wp-content/uploads/2022/04/ezgif.com-gif-maker-4.gif)
Con esto y un bizcocho …………..