En écrivant un programme Netduino 3 qui contrôlera les lumières de tour et d'autres relais pour les hayrides. Mon programme a été écrit avant d'avoir l'appareil, donc je ne sais pas comment ça va marcher, mais j'ai déjà un problème avec l'un des boutons (hazardButton
). Lorsque vous appliquez 3.3v
, l'interruption ne se déclenche pas. Appliquer 5v
fait la même chose, mais en appliquant GND
il déclenche l'interruption, mais en réappliquant GND
il ne désactive pas l'interruption.Incohérence Netduino InterruptPort
Voici mon code:
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;
namespace Tractor_Mate
{
public class Program
{
static InterruptPort hazardButton = new InterruptPort(Pins.GPIO_PIN_D0, false, Port.ResistorMode.Disabled, Port.InterruptMode.InterruptEdgeBoth);
static OutputPort hazardLights = new OutputPort(Pins.ONBOARD_LED, false);
static bool hazardsActive = false;
public static void Main()
{
Debug.Print("Initializing Inputs... ");
hazardButton.OnInterrupt += new NativeEventHandler(hazardButton_OnInterrupt);
Thread.Sleep(Timeout.Infinite);
}
static void hazardButton_OnInterrupt(uint data1, uint data2, DateTime time)
{
while (data2 == 0)
{
hazardLights.Write(true);
Thread.Sleep(500);
hazardLights.Write(false);
Thread.Sleep(500);
hazardsActive = true;
}
hazardsActive = false;
}
}
}
Im obtenir le problème avec le Hazard Lights
et n'a pas essayé tous les autres encore. Im câblage les boutons vers le haut de sorte que lorsque la broche va HIGH
il se déclenchera, et puis quand LOW
il l'éteint.
Votre message (source) est assez long, plus long que nécessaire pour le débogage. S'il vous plaît voir [mcve] pour plus d'informations. Notez que vous avez dit que vous avez un problème avec un bouton - mais vous ne nous avez pas dit lequel. – KevinDTimm
@KevinDTimm J'ai raccourci la source, et j'espère clarifié ma question plus. – hightekjonathan
On dirait que vous déclenchez sur les deux bords, par exemple, il s'allume lorsque vous appliquez GND, puis s'éteint lorsque vous supprimez GND. Si vous voulez appuyer une fois sur le bouton pour l'allumer et une fois pour l'éteindre, vous devez inverser la logique. De même, vous ne devriez pas avoir de boucles infinies dans les gestionnaires d'événements, vous devez utiliser une minuterie pour effectuer la logique. –