Entrées numériques - Partie logicielle

Note

Cette section couvre le logiciel relatif aux entrées numériques. Pour un guide sur le branchement électrique aux entrées numériques, voir Entrées numériques.

Le FPGA du roboRIO prend en charge jusqu’à 26 entrées numériques. 10 d’entre elles sont disponibles via les ports DIO intégrés sur le roboRIO lui-même, tandis que les 16 autres sont disponibles via le port MXP.

Les entrées numériques lisent l’un des deux États - « haut » ou « bas ». Par défaut, les ports intégrés de la RIO se liront « haut » en raison des résistances internes (pour plus d’informations, voir Entrées numériques). Par conséquent, les entrées numériques sont le plus couramment utilisées avec des interrupteurs de toute sorte. La prise en charge de cet usage est fournie par le biais de la classe DigitalInput (Java, C++).

La classe DigitalInput

Une entrée DigitalInput peut être initialisée comme suit:

// Initializes a DigitalInput on DIO 0
DigitalInput input = new DigitalInput(0);

Lecture de la valeur du DigitalInput

L’état de DigitalInput peut être interrogé avec la méthode get:

// Gets the value of the digital input.  Returns true if the circuit is open.
input.get();

Création d’une entrée numérique à partir d’une entrée analogique

Note

Un AnalogTrigger construit avec un argument de numéro de port peut partager ce port analogique avec un AnalogInput séparé, mais deux objets AnalogInput peuvent ne pas partager le même port.

Parfois, il est souhaitable d’utiliser une entrée analogique comme entrée numérique. Ceci peut être facilement réalisé en utilisant la classe AnalogTrigger (Java, C++).

Un AnalogTrigger peut être initialisé comme suit. Comme avec AnalogPotentiometer, un AnalogInput peut être transmis explicitement si l’utilisateur souhaite personnaliser les paramètres d’échantillonnage:

// Initializes an AnalogTrigger on port 0
AnalogTrigger trigger0 = new AnalogTrigger(0);

// Initializes an AnalogInput on port 1 and enables 2-bit oversampling
AnalogInput input = new AnalogInput(1);
input.setAverageBits(2);

// Initializes an AnalogTrigger using the above input
AnalogTrigger trigger1 = new AnalogTrigger(input);

Définition des points de déclenchement

Note

Pour plus de détails sur la mise à l’échelle des données « brutes » AnalogInput, voir Entrées analogiques - Partie logicielle.

Pour convertir le signal analogique en signal numérique, il est nécessaire de spécifier à quelles valeurs le déclencheur sera activé et désactivé. Ces valeurs sont préférablement différentes, pour que les changement d’états autour du point de transition se fassent de façon nette (sans oscillations):

// Sets the trigger to enable at a raw value of 3500, and disable at a value of 1000
trigger.setLimitsRaw(1000, 3500);

// Sets the trigger to enable at a voltage of 4 volts, and disable at a value of 1.5 volts
trigger.setLimitsVoltage(1.5, 4);

Utilisation de DigitalInputs dans le code

Comme presque tous les commutateurs reliés au roboRIOt seront utilisés via un DigitalInput, cette classe est extrêmement importante pour un contrôle efficace du robot.

Limiter le mouvement d’un mécanisme

Presque tous les mécanismes motorisés (tels que les bras et les élévateurs) en FRC | reg | devrait recevoir une certaine forme d’interrupteur de « fin de course » pour éviter qu’ils ne s’endommagent à la fin de leur plage de mouvements. Un court exemple est donné ci-dessous:

Spark spark = new Spark(0);

// Limit switch on DIO 2
DigitalInput limit = new DigitalInput(2);

public void autonomousPeriodic() {
    // Runs the motor forwards at half speed, unless the limit is pressed
    if(!limit.get()) {
        spark.set(.5);
    } else {
        spark.set(0);
    }
}

La mise à zéro d’un mécanisme

Les interrupteurs de fin de course sont très importants pour « initialiser à zéro » un mécanisme qui comporte un encodeur. Pour un exemple de ceci, voir Mise à zéro d’un mécanisme.