Communicating with Arduino

The following Arduino sketch reads incoming messages and echoes them back once the entire message has been read. Feel free to use and modify this sketch to your own purposes.

// Delimiter constant to signal end-of-message
#define delimiter "\n"
// This will store incoming messages
String recieved = "";
void setup(){
  // Open the serial port
  Serial.begin(9600);
}
void loop(){
}
// This is called whenever there is incoming data
void serialEvent(){
  // Read the incoming data
  char append = Serial.read();
  // Append the character to our string
  recieved += append;
  // Check for a newline, signaling that the message is complete
  if(recieved.endsWith(delimiter)){
    // Remove the newline
    recieved.replace(delimiter, "");
    recieved.trim();
    // Echo the complete message
    Serial.println(recieved);
    // Reset the message
    recieved = "";
  }
}

Additionally, other plugins may be equipped to listen for events from the serial port:

import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import com.shortcircuit.mcinteractive.events.MCIMessageReceivedEvent;
import com.shortcircuit.mcinteractive.events.MCISerialConnectEvent;
import com.shortcircuit.mcinteractive.events.MCISerialDisconnectEvent;
import com.shortcircuit.mcinteractive.events.MCISerialPortEvent;

public class MCIEventListener implements Listener{
    @EventHandler
    public void onConnect(final MCISerialConnectEvent event) {
        Bukkit.getLogger().info("Connected to " + event.getCommPortIdentifier().getName());
    }
    @EventHandler
    public void onDisconnect(final MCISerialDisconnectEvent event) {
        Bukkit.getLogger().info("Disconnected from " + event.getCommPortIdentifier().getName());
    }
    @EventHandler
    public void onEvent(final MCISerialPortEvent event) {
        Bukkit.getLogger().info("Event from " + event.getCommPortIdentifier().getName());
    }
    @EventHandler
    public void onMessage(final MCIMessageReceivedEvent event) {
        Bukkit.getLogger().info("Message from " + event.getCommPortIdentifier().getName()
                + ": " + event.getMessage());
    }
}

Comments

Posts Quoted:
Reply
Clear All Quotes