Classe JoyStick

* **SourceForge wiki: JoyStick**

Classe para controlar um módulo joystick.

**Declarações públicas:**

```
class JoyStick{
public:
  JoyStick();

  void begin(byte xAxisPin, byte yAxisPin, byte zButtonPin);
  void axisConfig(int normalizeTo, byte tolerance, boolean zIgnoreXY=false);
  void run();
  int readXAxis();
  int readYAxis();
  boolean readZButton();

protected:
  virtual void onZButtonPressed(){}
  virtual void onZButtonReleased(){}
  virtual void onXAxisChange(int xVal){}
  virtual void onYAxisChange(int yVal){}
};

```

### **Como usar**

Chame ***begin()*** antes de qualquer outro método para informar os pinos no arduino. As leituras podem ser configuradas chamando o método ***axisConfig()***. Use ***readXAxis()*** e ***readYAxis()*** para ler os valores dos eixos e ***readZButton()*** para ler o status do botão Z. Se preferir trabalhar com eventos, derive a classe ***JoyStick*** e reescreva-os. Nesse caso, não se esqueça de chamar o método ***run()*** pelo menos uma vez por loop.

**void begin(byte xAxisPin, byte yAxisPin, byte zButtonPin)**

Chame antes de qualquer outro método. Lê os valores dos eixos e os usa como referência para a origem dos eixos (zero). As próximas leituras retornarão valores negativos para valores abaixo da referência.

* **xAxisPin**: pino para o eixo x (analógico).
* **yAxisPin**: pino para o eixo y (analógico).
* **zButtonPin**: pino para o botão z (digital).

**void axisConfig(int normalizeTo, byte tolerance, boolean zIgnoreXY=false)**

Configura as leituras dos eixos. Por default, as leituras de eixos XY retornam valores entre -512 e 512 (aproximadamente). O parâmetro ***normalizeTo*** faz as leituras serem mapeadas para o valor informado. Por exemplo, se for 100, as leituras retornarão valores entre -100 e 100.

* **normalizeTo**: Valor para normalizar as leituras dos eixos.
* **tolerance**: Variação mínima dos eixos para disparar eventos (depois de normalizado).
* **zIgnoreXY**: Ignora eventos dos eixos XY quando o botão Z está pressionado.

**void run()**

Reads axes and button status and triggers events if needed. If you use events, this method must be called at least once per loop.

**int readXAxis()**

Read and return the x axis value. The returned value can be normalized if ***axisConfig()*** method was called.

* **return**: x axis value normalized.

**int readYAxis()**

Read and return the y axis value. The returned value can be normalized if ***axisConfig()*** method was called.

* **return:** y axis value normalized.

**boolean readZButton()**

Read Z button status.

* **return**: true if Z button is pressed , false if not.

**virtual void onZButtonPressed()**

Event triggered when Z button is pressed.

Events are triggered by ***run()*** method, so to work with events you must call ***run()*** at least once per loop.

**virtual void onZButtonReleased()**

Event triggered when Z button is released.

Events are triggered by ***run()*** method, so to work with events you must call ***run()*** at least once per loop.

**virtual void onXAxisChange(int xVal)**

Event triggered when X axis value change at least the tolerance informed in ***axisConfig()*** method (default=1).

Events are triggered by ***run()*** method, so to work with events you must call ***run()*** at least once per loop.

* **xVal**: X axis value.

**virtual void onYAxisChange(int xVal)**

Event triggered when Y axis value change at least the tolerance informed in ***axisConfig()*** method (default=1).

Events are triggered by ***run()*** method, so to work with events you must call ***run()*** at least once per loop.

* **yVal**: Y axis value.