Mittwoch, 13. Juli 2011

Ausflug: WebDuino

Mit der im vorherigen Post erwähnten 'JavaFirmata' habe ich dann eine kleine Demo-Web-Anwendung geschrieben. Aus den Teilen eines Fritzing Starter Kits habe ich ein paar LEDs, einen LDR und ein Potentiometer an den Arduino angeschlossen.

Sechs LEDs gehen über Vorwiderstände an die digitalen Pins 8-13 vom Arduino, der LDR ist mit einem 10kΩ-Widerstand als Spannungsteiler an den analogen Pin 0 angeschlossen und letztlich ist das Potentiometer auch als Spannungsteiler an den analogen Pin 1 angeschlossen.

Mit Hilfe der JavaFirmata kann man dann prima die LEDs ein- und ausschalten sowie die Werte vom LDR bzw. Potentiometer lesen.

Das Projekt (für NetBeans) kann hier heruntergeladen werden. Es folgt dem Model-View-Controler-Pattern, das Servlet "Controller.java" nimmt die Eingaben aus dem HTML-Formular entgegen, verarbeitet sie, hängt anzuzeigende Daten an den Request an und gibt die Kontrolle dann weiter an die JSP-Seite, welche die HTML-Seite darstellt.

Das Servlet als Herz sieht so aus:

public class Controller extends HttpServlet {

private static Firmata f;
private static boolean[] digitalPins = new boolean[14];

static {
try {
f = new Firmata("/dev/tty.usbmodem1d11", 57600);

for (int i = 8; i < 14; i++) {
f.pinMode(i, Firmata.OUTPUT);
}

for (int i = 0; i < 14; i++) {
digitalPins[i] = false;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}

/**
* Processes requests for both HTTP GET and POST methods.
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

request.setAttribute("a0", f.analogRead(0));
request.setAttribute("a1", f.analogRead(1));

for (int i = 8; i < 14; i++) {
digitalPins[i] = request.getParameter("d" + i) != null;
}
try {
for (int i = 8; i < 14; i++) {
if (digitalPins[i]) {
f.digitalWrite(i, Firmata.HIGH);
} else {
f.digitalWrite(i, Firmata.LOW);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
request.setAttribute("digitalPins", digitalPins);

RequestDispatcher rd = request.getRequestDispatcher("arduino.jsp");
rd.forward(request, response);
}

@Override
public void destroy() {
f = null;
}
[...]
}

Kommentare:

  1. In der aktuellen NetBeans IDE (7.1) wird das Projekt nicht erkannt. Woran kann das liegen? Das Firmdata Projekt wird erkannt.

    AntwortenLöschen
  2. Ich habe es gerade probiert, ich kann das Projekt mit der NetBeans-IDE 7.1 problemlos öffnen. Man braucht halt auch das andere Projekt (JavaFirmata) um das 'Refrence problem' zu beheben.

    Grüße,
    Christian

    AntwortenLöschen