You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.9 KiB
Java
80 lines
1.9 KiB
Java
import processing.core.*;
|
|
import cc.arduino.*;
|
|
|
|
class LEDControl {
|
|
final int comRate = 57600;
|
|
|
|
Arduino arduino;
|
|
boolean[] state = {false, false, false, false};
|
|
|
|
LEDControl(PApplet applet, int whichArduino) {
|
|
// Arduino - initialize correct arduino
|
|
String[] arduinos = Arduino.list();
|
|
if (arduinos.length == 0) {
|
|
PApplet.println("There are no arduinos available for use.");
|
|
applet.exit();
|
|
} else {
|
|
PApplet.println("Available arduinos:");
|
|
for(int i = 0; i < arduinos.length; i++) {
|
|
PApplet.println(arduinos[i]);
|
|
}
|
|
PApplet.print("Using arduino ");
|
|
PApplet.println(arduinos[whichArduino]);
|
|
|
|
this.arduino = new Arduino(applet, arduinos[whichArduino], comRate);
|
|
|
|
for (Direction dir : Direction.values()) {
|
|
this.arduino.pinMode(dir.pin, Arduino.OUTPUT);
|
|
}
|
|
}
|
|
}
|
|
|
|
boolean isActive(Direction dir) {
|
|
return this.state[dir.index];
|
|
}
|
|
|
|
public void turnOff(Direction dir) {
|
|
this.arduino.digitalWrite(dir.pin, Arduino.LOW);
|
|
this.state[dir.index] = false;
|
|
}
|
|
|
|
public void turnOn(Direction dir) {
|
|
this.arduino.digitalWrite(dir.pin, Arduino.HIGH);
|
|
this.state[dir.index] = true;
|
|
}
|
|
|
|
public void toggle(Direction dir) {
|
|
if (isActive(dir)) {
|
|
turnOff(dir);
|
|
} else {
|
|
turnOn(dir);
|
|
}
|
|
}
|
|
|
|
public void allOn() {
|
|
for (Direction dir : Direction.values()) {
|
|
turnOn(dir);
|
|
}
|
|
}
|
|
|
|
public void allOff() {
|
|
for (Direction dir : Direction.values()) {
|
|
turnOff(dir);
|
|
}
|
|
}
|
|
|
|
|
|
enum Direction {
|
|
LEFT (0, 10),
|
|
RIGHT (1, 5),
|
|
UP (2, 6),
|
|
DOWN (3, 9);
|
|
|
|
final int index, pin;
|
|
Direction(int index, int pin) {
|
|
this.index = index;
|
|
this.pin = pin;
|
|
}
|
|
}
|
|
}
|