programme de base

tout sur la base pour les nouveaux

subsystème

subsystème

la base des subsystèmes

quand on créer un subsystème le programme de base est celui-ci:

package frc.robot.subsystems;

import edu.wpi.first.wpilibj2.command.SubsystemBase;

public class Bougie extends SubsystemBase {
  /** Creates a new Bougie. */
  public Bougie() {}
  }
  @Override
  public void periodic() {
    // This method will be called once per scheduler run
  }
}

la section import est l'endroit ou tu mets tes codes préfait 

dans le public class Bougie extends SubsystemBase {} tu met tes moteur que tu créé et en dessous de public Bougie() {} tu mets tes fonction(une fonction voir plus bas)

dans le périodic tu mes une action qui ce fera en permanance. C'est une boucle

une fonction

une fonction est une action préfait qui fera tous ce que tu a coder a l'interieur chaque fois que tu l'utilise dans une commande

exmple de fonction:

public void balaye(double vitesse){
    balaye.set(vitesse);
  }

chaque fois que tu veux utiliser un moteur par exemple tu appelles la fonction. dans cette exemple on lui dit de tourner et ensuite on définie ça vitesse en %.

subsystème

moteur

intro:

Quand on utilise un moteur ce qu'on code est un controleur de moteur. On en utilise 4 différent en robotique: CANspark max, CANspark flex, Talon SRX, Talon FX. 

CANspark max= moteur NEO

CANspark flex = moteur vortex

Talon FX = moteur Kraken

Talon SRX = autre moteur comme 775 pro ou SIM

pour créer l'objet du moteur:

les 2 spark ce resemble beaucoup. 

exemple:

final SparkFlex lance = new SparkFlex(17 , MotorType.kBrushless);
final SparkMax accumulateur = new SparkMax(18, MotorType.kBrushless);

final signifie qu'on ne peut modifer cette ligne a d'autre endroit dans le code

SparkFlex ou SparkMax le controleur a utiliser

lance est le nom du moteur c'est toi qui décide du nom

new SparkFlex signifie que tu veux en créer un nouveau 

le 17 est l'ID c'est le nombre qui identifie ton moteur

MotorType.kBrushless ou MotorType.kBrush signifie que le moteur est soit avec ou sans broche. Les moteur a la robotique sont tous brusless

les 2 Talon ce resemble beaucoup.

exemple:

final WPI_TalonSRX pince = new WPI_TalonSRX(2);

WPI_TalonSRX ou WPI_TalonFX le controleur a utiliser

pince est le nom du moteur

new WPI_TalonSRX signifie que tu veux en créer un nouveau 

le 2 est l'ID

ensuite pour dire quel utiliter donner au moteur on créé une fonction.

 exemple:

 public void lance(double vitesse){
    Lanceur.set(vitesse);
  }

public signifie qu'il peut être utlisé partout dans le code

void signifie que tu retourne aucune valeur

le void pourait être renplacer par:

double= renvoit un chiffre a vergule, int= renvoit un chiffre plein, boolean renvoit soit true ou false pour des objet a seulement 2 état par exemple,Srting= renvoit un message.

lance est le nom de la fonction elle sera utilisé dans les command(voir le chapitre sur les Commande)

double vitesse est une variable qui pourra être modifier dans une commande

lanceur est  le nom du moteur utiliser dans la fonction

set est ce que le moteur fait dans la fonction. Set mets la vitesse a la valeur mis dans les parentèse en %

un fonction peux servir pour différente chose mais on l'utilise principalement pour: défénir la vitesse d'un moteur( comme l'exemple), prendre la valeur d'un encodeur(voir juste en bas, ou défémir la position d'un encodeur(voir plus loin).

 public double encodeur(){
  return rotatione.getEncoder().getPosition();
  }

public, double,encodeur et sont des mot qui on été défini plus haut  

return signifie que ce qu'il y a après c'est ce que tu retourne comme valeur

rotatione.getEncoder().getPosition() est que tu prend la position de l'encodeur du moteur rotatione

pour définir la position d'un encodeur pour par exemple reset l'encodeur

  public void reset(){
    monte.getEncoder().setPosition(0);
  }

a la place de rotatione.getEncoder().getPosition() on met monte.getEncoder().setPosition() et le 0 est la valeur de l'encodeur qu'on définit

subsystème

Digital input

Intro:

un digital input est quelque chose qui renvoit un signal on/off. Il y en a plusieur qu'on utilise

une limit Switch est un module avec un bouton qui envoit un signale s'il est activer

une photocell est un laser qui est réflechi vers un détecteur qui renvois un signal si le détecteur ne détecte plus le laser donc que quelque chose est passer devant

pour créer l'objet d'un digital input:

 final DigitalInput limit3 = new DigitalInput(1);

limit3 est le nom donner a la limit switch

le 1 est le nombre du port DIO dans le Roborio(C'est comme le coeur du robot)

pour une fonction:

 public boolean enHaut(){
  return limit3.get();
  } 

boolean signifie que tu renvoit true/false(on/off)

enHaut est le nom de la fonction

return signifie que tu retourne un information

limit3 est le nom du digital input

get() signifie que tu prend l'état de la limit switch(on ou off)

subsystème

Piston

pour programmer un piston on programme les valves ou solenoid. Il peut être double ou simple.

pour créé l'objet du DoubleSolenoid 

private DoubleSolenoid brake = new DoubleSolenoid(PneumaticsModuleType.CTREPCM,Constants.brakeouvre, Constants.brakeferme);

le private veux dire que il ne peut être utilisé a une autre place dans le code

DoubleSolenoid est pour le piston

brake est le nom du piston

new DoubleSolenoid est pour dire que tu veux en créé un nouveau

PneumaticsModuleType.CTREPCM veux dire le type de valve utiliser dans cette exemple c'est un CTRE(un compagnie de module électrique pour la robotique) est c'est branché dans le PCM

Constants.brakeouvre est l'ID de la valve qui envoit l'air donc qui ouvre le piston créé dans un autre fichier appler Constants

Constants.brakeferme est l'ID de la valve qui enlève l'air donc qui ferme le piston

final Solenoid pistondroite= new Solenoid(PneumaticsModuleType.REVPH, Constants.pistondroite);

final a déjà été difinie dans d'autre documentation

Solenoid  est pour dire le piston

pistondroite est le nom donner au piston

new Solenoid est pour dire que tu veux en créé un nouveau

PneumaticsModuleType.REVPH veux dire le type de valve utiliser dans cette exemple c'est un REV branché dans le PH

Constants.pistondroite est l'ID de la valve

pour créé une fonction

pour un simple

pour un double

Command

tous sur la base des command