LEDs mittels CheckBoxes ein- und ausschalten (Java)


Bei Fragen solltest Du Dir unbedingt erst dieses Experiment ansehen!


Wir wollen folgendes Fenster in Java programmieren:




Die Schaltung:

Wir bauen folgende Schaltung auf:




Du kannst jeden Pin mit so einer LED beschalten, der nicht mit "5V", "3V3" oder "GND" beschriftet ist.

Alle LEDs zeigen mit ihrer Kathode zu je einem GPIO-Pin.
Ein 220 Ohm Widerstand kommt von 3.3V und ist mit allen Anoden verbunden.

Ich weiß natürlich auch nicht, welchen Raspberry Du benutzt.
Du könntest z. B. hier nachsehen.


Zum Programmieren benutzen wir in diesem Projekt die Sprache Java.

Falls Java noch nicht auf Deinem Raspi installiert ist, kannt Du dies in einem Terminal tun mit:
           sudo apt-get update && sudo apt-get install oracle-java7-jdk


Das Programm

Du erstellst mit einem Editor (nano, leafpad) oder einer Entwicklungsumgebung (geany) Deiner Wahl folgendes Programm:


import java.io.IOException;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;


public class Schalter extends JFrame implements ChangeListener {

	JCheckBox cb1, cb2, cb3;

	public Schalter() {

		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setSize(300, 150);
		this.setTitle("Raspberry Pi Spielwiese");
		this.setLocationRelativeTo(null);

		this.setLayout(null);

		this.createCheckBoxes();

		this.setVisible(true);

		try {

			Runtime.getRuntime().exec("sudo gpio export 9 out");
			Runtime.getRuntime().exec("sudo gpio export 10 out");
			Runtime.getRuntime().exec("sudo gpio export 11 out");

		} catch (IOException e) {
		}

	}

	private void createCheckBoxes() {
		cb1 = new JCheckBox("GPIO 9");
		cb2 = new JCheckBox("GPIO 10");
		cb3 = new JCheckBox("GPIO 11");

		cb1.setBounds(50, 10, 100, 25);
		cb2.setBounds(50, 40, 100, 25);
		cb3.setBounds(50, 70, 100, 25);

		cb1.setSelected(true);
		cb2.setSelected(true);
		cb3.setSelected(true);

		cb1.addChangeListener(this);
		cb2.addChangeListener(this);
		cb3.addChangeListener(this);

		this.add(cb1);
		this.add(cb2);
		this.add(cb3);

	}

	@Override
	public void stateChanged(ChangeEvent e) {
		
	  try {

		if (e.getSource() == cb1) {
			if (cb1.isSelected()) {
				Runtime.getRuntime().exec("sudo gpio -g write 9 0");
			} else {
				Runtime.getRuntime().exec("sudo gpio -g write 9 1");
			}
		}

		if (e.getSource() == cb2) {
			if (cb2.isSelected()) {
				Runtime.getRuntime().exec("sudo gpio -g write 10 0");
			} else {
				Runtime.getRuntime().exec("sudo gpio -g write 10 1");
			}
		}

		if (e.getSource() == cb3) {
			if (cb3.isSelected()) {
				Runtime.getRuntime().exec("sudo gpio -g write 11 0");
			} else {
				Runtime.getRuntime().exec("sudo gpio -g write 11 1");
			}
		}

	  } catch (IOException ex) {

	  }

	}

	public static void main(String[] args) throws Exception {
		new Schalter();
	}
}
	

... und speicherst es unter dem Namen "Schalter.java" ab.

Kompilieren kannst Du es in einem Terminal mit: javac Schalter.java

Starten kannst Du es mit: java Schalter

Du musst nicht root sein!




Eigentlich haben wir hier Java nur dazu benutzt, um die aus diesem Experiment bekannten Terminalbefehle auszuführen.
Es geht auch eleganter: schau mal hier nach. Dieses Pi4J-Projekt gibt uns einfachere Java-Befehle zum Steuern der GPIO.