mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
[examples] Add communication examples (e.g. arduino) (#2500)
Co-authored-by: Andrew Dassonville <dassonville.andrew@gmail.com>
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user