Realizzare un programma per l’NXT che simuli il funzionamento di un sistema per il controllo del livello di Radon in un edificio. Utilizzare il sensore di luce per simulare il rivelatore di Radon.
Creare un ascoltatore di evento connesso con il sensore di luce che visualizza sul display dell’NXT il valore letto ad intervalli di 10 secondi.
Creare un altro ascoltatore di evento connesso con i tasti Destra/Sinistra dell’NXT che serve per aumentare o diminuire il valore di soglia, che deve anch’esso essere visualizzato sul display.
Quando il valore misurato dal sensore supera la soglia prefissata deve essere azionato un ventilatore (motore A dell’NXT); quando il valore misurato scende al di sotto della soglia il ventilatore deve essere fermato.
Utilizzare il tasto ESCAPE per far terminare il programma.
Soluzione
package rivelatoreradon; import lejos.nxt.Button; import lejos.nxt.ButtonListener; import lejos.nxt.LCD; import lejos.nxt.LightSensor; import lejos.nxt.Motor; import lejos.nxt.SensorPort; import lejos.nxt.SensorPortListener; import lejos.util.Delay; public class RivelatoreRadon { LightSensor light; private int soglia; class LeftButtonListener implements ButtonListener { @Override public void buttonPressed(Button b) { soglia--; LCD.drawString(soglia + " ", 0, 4); } @Override public void buttonReleased(Button b) { } } class RightButtonListener implements ButtonListener { @Override public void buttonPressed(Button b) { soglia++; LCD.drawString(soglia + " ", 0, 4); } @Override public void buttonReleased(Button b) { } } class LightSensorPortListener implements SensorPortListener { @Override public void stateChanged(SensorPort aSource, int aOldValue, int aNewValue) { int valore = light.readValue(); LCD.drawString(valore + " ", 0, 1); if (valore >= soglia) Motor.A.forward(); else Motor.A.stop(); // Delay.msDelay(10000); } } public RivelatoreRadon() { soglia = 50; LCD.drawString("Valore [Bq/mc]", 0, 0); LCD.drawString("Soglia [Bq/mc]", 0, 3); LCD.drawString(soglia + " ", 0, 4); Button.LEFT.addButtonListener(new LeftButtonListener()); Button.RIGHT.addButtonListener(new RightButtonListener()); light = new LightSensor(SensorPort.S1, false); SensorPort.S1.addSensorPortListener(new LightSensorPortListener()); } public static void main(String[] args) { new RivelatoreRadon(); Button.ESCAPE.waitForPressAndRelease(); } }