# 3.1 Código em Java

___

Nesta página será descrito como deve ser feito o código em Java para lermos os dados obtidos pelo sensor infravermelho. Antes de começarmos a programar é importante esclarecer alguns items:

- Estamos considerando que você já saiba como mexer no VS Code WPILib de maneira geral e tenha sua elétrica montada conforme os capítulos anteriores.
- O código é o mesmo para qualquer sensor infravermelho retro reflexivo, ou que tenha um input apenas, como nosso caso.
____
## **Código**

A primeira etapa que devemos fazer é declarar a nossa entrada do roboRIO que estará fazendo a leitura do sensor. Portanto:

```java
  DigitalInput sensorInfravermelho = new DigitalInput(0);
```

Onde temos o número **0** é o local - parâmetro da função construtora da classe **DigitalInput** - que deve ser declarado qual porta **DIO** do roboRIO estamos utilizando, nesse caso, a 0, mas poderia ser a 1, 2, 3...
____

A segunda parte é a exibição desses valores em uma dashboard, em nosso caso estaremos utilizando a *shuffleboard*. Para fazer isso apenas faça - **dentro de uma função períodica para leituras contínuas**:

```java
@Override
public void robotPeriodic() 
{
  SmartDashboard.putBoolean("Estado do sensor IR", sensorInfravermelho.get());
}
```

> Caso sua leitura esteja invertida, ou seja, quando o sensor não está detectando nenhum objeto ele retorna verdadeiro (nesse caso será representado pelo true na *shuffleboard*), mas se detectar retorna falso. Para resolver isso apenas precisamos inverter a leitura. Para isso faça como o código abaixo:

```java
@Override
public void robotPeriodic() 
{
  SmartDashboard.putBoolean("Estado do sensor IR", !sensorInfravermelho.get());
}
```
>Se estiver utilizando o sensor ED30-D80B4 é possível reverter a leitura na própria calibração do sensor, para isso de uma olhada na página [1.3 Calibração do sensor](https://docs.stemos.com.br/books/sensores-quick-irs/page/13-calibracao-do-sensor)
____

## **Exibição na shuffleboard**

Quando colocarmos nossa variável de leitura na *shuffleboard*, será apenas uma caixa de texto, portanto, ela dirá *true* ou *false*. Entretanto é possível alterarmos para uma boolean box, a qual indicará pela cor se nosso sensor esta ou não lendo algo. Para fazer isso, clique com o botão direito no elemento da *shuffleboard* e faça o seguinte:

<div align="center">

[![Captura de tela 2023-10-17 150637.png](https://docs.stemos.com.br/uploads/images/gallery/2023-10/scaled-1680-/captura-de-tela-2023-10-17-150637.png)](https://docs.stemos.com.br/uploads/images/gallery/2023-10/captura-de-tela-2023-10-17-150637.png)

</div>

Caso nosso sensor detecte um objeto essa caixa deverá ficar verde.
___
> Lembrando que se ficar invertido é necessário reverter isso na leitura do código, como descrito mais acima nesta página