[examples] Add communication examples (e.g. arduino) (#2500)

Co-authored-by: Andrew Dassonville <dassonville.andrew@gmail.com>
This commit is contained in:
Starlight220
2022-01-07 04:08:57 +02:00
committed by GitHub
parent 5ccfc4adbd
commit 269cf03472
8 changed files with 287 additions and 0 deletions

View File

@@ -0,0 +1,25 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
package edu.wpi.first.wpilibj.examples.digitalcommunication;
import edu.wpi.first.wpilibj.RobotBase;
/**
* Do NOT add any static variables to this class, or any initialization at all. Unless you know what
* you are doing, do not modify this file except to change the parameter class to the startRobot
* call.
*/
public final class Main {
private Main() {}
/**
* Main initialization function. Do not perform any initialization here.
*
* <p>If you change your main robot class, change the parameter type.
*/
public static void main(String... args) {
RobotBase.startRobot(Robot::new);
}
}

View File

@@ -0,0 +1,42 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
package edu.wpi.first.wpilibj.examples.digitalcommunication;
import edu.wpi.first.wpilibj.DigitalOutput;
import edu.wpi.first.wpilibj.DriverStation;
import edu.wpi.first.wpilibj.TimedRobot;
/**
* This is a sample program demonstrating how to communicate to a light controller from the robot
* code using the roboRIO's DIO ports.
*/
public class Robot extends TimedRobot {
// define ports for digitalcommunication with light controller
private static final int kAlliancePort = 0;
private static final int kEnabledPort = 1;
private static final int kAutonomousPort = 2;
private static final int kAlertPort = 3;
private final DigitalOutput m_allianceOutput = new DigitalOutput(kAlliancePort);
private final DigitalOutput m_enabledOutput = new DigitalOutput(kEnabledPort);
private final DigitalOutput m_autonomousOutput = new DigitalOutput(kAutonomousPort);
private final DigitalOutput m_alertOutput = new DigitalOutput(kAlertPort);
@Override
public void robotPeriodic() {
// pull alliance port high if on red alliance, pull low if on blue alliance
m_allianceOutput.set(DriverStation.getAlliance() == DriverStation.Alliance.Red);
// pull enabled port high if enabled, low if disabled
m_enabledOutput.set(DriverStation.isEnabled());
// pull auto port high if in autonomous, low if in teleop (or disabled)
m_autonomousOutput.set(DriverStation.isAutonomous());
// pull alert port high if match time remaining is between 30 and 25 seconds
var matchTime = DriverStation.getMatchTime();
m_alertOutput.set(matchTime <= 30 && matchTime >= 25);
}
}

View File

@@ -770,5 +770,27 @@
"gradlebase": "javaromi",
"mainclass": "Main",
"commandversion": 2
},
{
"name": "Digital Communication Sample",
"description": "An example program that communicates with external devices (such as an Arduino) using the roboRIO's DIO",
"tags": [
"Digital"
],
"foldername": "digitalcommunication",
"gradlebase": "java",
"commandversion": 2,
"mainclass": "Main"
},
{
"name": "I2C Communication Sample",
"description": "An example program that communicates with external devices (such as an Arduino) using the roboRIO's I2C port",
"tags": [
"I2C"
],
"foldername": "i2ccommunication",
"gradlebase": "java",
"commandversion": 2,
"mainclass": "Main"
}
]

View File

@@ -0,0 +1,25 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
package edu.wpi.first.wpilibj.examples.i2ccommunication;
import edu.wpi.first.wpilibj.RobotBase;
/**
* Do NOT add any static variables to this class, or any initialization at all. Unless you know what
* you are doing, do not modify this file except to change the parameter class to the startRobot
* call.
*/
public final class Main {
private Main() {}
/**
* Main initialization function. Do not perform any initialization here.
*
* <p>If you change your main robot class, change the parameter type.
*/
public static void main(String... args) {
RobotBase.startRobot(Robot::new);
}
}

View File

@@ -0,0 +1,57 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
package edu.wpi.first.wpilibj.examples.i2ccommunication;
import edu.wpi.first.wpilibj.DriverStation;
import edu.wpi.first.wpilibj.I2C;
import edu.wpi.first.wpilibj.TimedRobot;
/**
* This is a sample program demonstrating how to communicate to a light controller from the robot
* code using the roboRIO's I2C port.
*/
public class Robot extends TimedRobot {
private static int kDeviceAddress = 4;
private static I2C m_arduino = new I2C(I2C.Port.kOnboard, kDeviceAddress);
private void writeString(String input) {
// Creates a char array from the input string
char[] chars = input.toCharArray();
// Creates a byte array from the char array
byte[] data = new byte[chars.length];
// Adds each character
for (int i = 0; i < chars.length; i++) {
data[i] = (byte) chars[i];
}
// Writes bytes over I2C
m_arduino.transaction(data, data.length, null, 0);
}
@Override
public void robotPeriodic() {
// Creates a string to hold current robot state information, including
// alliance, enabled state, operation mode, and match time. The message
// is sent in format "AEM###" where A is the alliance color, (R)ed or
// (B)lue, E is the enabled state, (E)nabled or (D)isabled, M is the
// operation mode, (A)utonomous or (T)eleop, and ### is the zero-padded
// time remaining in the match.
//
// For example, "RET043" would indicate that the robot is on the red
// alliance, enabled in teleop mode, with 43 seconds left in the match.
StringBuilder stateMessage = new StringBuilder(6);
stateMessage
.append(DriverStation.getAlliance() == DriverStation.Alliance.Red ? "R" : "B")
.append(DriverStation.isEnabled() ? "E" : "D")
.append(DriverStation.isAutonomous() ? "A" : "T")
.append(String.format("%03d", (int) DriverStation.getMatchTime()));
writeString(stateMessage.toString());
}
}