Rivelatore di Radon

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();
	}
}