Skip to content

Commit

Permalink
up
Browse files Browse the repository at this point in the history
  • Loading branch information
arnaldojr committed Aug 10, 2024
1 parent 17d08f9 commit 6635265
Show file tree
Hide file tree
Showing 25 changed files with 865 additions and 188 deletions.
562 changes: 562 additions & 0 deletions material/aulas/iot/ex0/solucao.md

Large diffs are not rendered by default.

115 changes: 95 additions & 20 deletions material/aulas/iot/ex1/index.md
Original file line number Diff line number Diff line change
@@ -1,38 +1,113 @@
## Comunicação Serial

## O que esse código faz?
A comunicação serial é fundamental para a troca de dados entre o microcontrolador (o arduino no nosso caso) e outros dispositivos, como um computador, outro arduino, um celular.

Este código de exemplo demonstra como piscar um LED com arduino (blink led).
No arduino usamos a classe `Serial` que oferece várias opções e métodos para gerenciar essa comunicação.

!!! tip
Documentação oficial: [https://www.arduino.cc/reference/pt/language/functions/communication/serial/](https://www.arduino.cc/reference/pt/language/functions/communication/serial/)

## Circuito protoboard
Aqui estão as principais:

![](hello1.PNG)
### Iniciando a comunicação serial:

- `Serial.begin(baudRate);` - Inicia a comunicação serial com a taxa de transmissão especificada.

## Código
```c
void setup() {
Serial.begin(9600);
}
```

!!! tip
A taxa de transmissão padrão é de `9600` bps (bits por segundo), mas outros valores podem ser utilizados conforme a necessidade do projeto. Confira [a tabela de taxas de transmissão mais comuns](https://lucidar.me/en/serialib/most-used-baud-rates-table/) para saber mais.

### Enviando dados pela serial:

- `Serial.print(data);` - Envia dados para a porta serial, `sem pular para uma nova linha`.
- `Serial.println(data);` - Envia dados para a porta serial, `seguido por um caractere de nova linha (\n)`.

```c
int led = 13; //defindo o valor 13 para a variável led
void loop() {

void setup(){
pinMode(led,OUTPUT); //declara led (pino 13 do arduino) como saida (OUTPUT)
Serial.print("Hello, World!");
Serial.println("Hello, World!");

}

void loop(){
digitalWrite(led, HIGH); //acende (HIGH) o led
delay(1000); //delay em milisegundos (1 seg)
digitalWrite(led, LOW); //apaga o led (LOW)
delay(1000); //delay em milisegundos
```

### Recebendo dados pela serial:

A leitura de dados da porta serial no Arduino acontece quando você precisa receber informações de outros dispositivos, como sensores, computadores ou outros microcontroladores.

Antes de tentar ler os dados, é importante verificar se há bytes disponíveis na porta serial. Isso pode ser feito utilizando a função `Serial.available()`, que retorna o número de bytes prontos para serem lidos:

```c
void loop() {

if (Serial.available() > 0) {
// Há dados disponíveis para leitura
}
}
```
??? note "Circuito simulador"
![](hello.PNG)
!!! tip
Certifique-se de sempre verificar a disponibilidade de dados antes de tentar lê-los, evitando assim erros ou falhas no processamento de informações inexistentes.

Depois de confirmar que há dados disponíveis, você pode utilizar diversas funções da classe Serial para ler esses dados. As funções mais comuns são:

## Links para Download
- `Serial.read();` - Lê um único byte da serial. O byte é retornado como um número inteiro entre 0 e 255. Se não houver dados disponíveis, a função retorna -1. Ideal para leituras byte a byte.
- `Serial.readString();` - Lê a entrada serial como uma `String` até que um caractere de nova linha (`
`) seja encontrado ou até que o tempo limite seja atingido. Útil para receber comandos ou mensagens de texto completas.
- `Serial.readStringUntil(character);` - Lê a entrada serial como uma `String` até que o caractere especificado seja encontrado.
- `Serial.parseInt();` - Lê o próximo valor inteiro da porta serial, ignorando caracteres não numéricos até encontrar um número. A leitura continua até encontrar um caractere que não faça parte do número.
- `Serial.parseFloat();` - Lê o próximo valor em ponto flutuante até encontrar um caractere que não seja parte do número, incluindo o ponto decimal.

```c
void loop() {
// Lendo um único byte
Serial.println("Digite unico byte");
while (Serial.available() == 0) {} // Aguarda digitar
int valor = Serial.read();
Serial.print("Byte lido: ");
Serial.println(valor);
Serial.println();


// Lendo uma string completa
Serial.println("Digite uma string completa");
while (Serial.available() == 0) {} // Aguarda digitar
String valorString = Serial.readString();
Serial.print("String recebida: ");
Serial.println(valorString);
Serial.println();

// Lendo uma string até encontrar um caractere específico
Serial.println("Digite uma string com ; no final");
while (Serial.available() == 0) {} // Aguarda digitar
String partialString = Serial.readStringUntil(';');
Serial.print("String parcial até ';': ");
Serial.println(partialString);
Serial.println();

// Lendo um valor inteiro
Serial.println("Digite um valor do tipo inteiro");
while (Serial.available() == 0) {} // Aguarda digitar
int intValue = Serial.parseInt();
Serial.print("Inteiro lido: ");
Serial.println(intValue);
Serial.println();
// Lendo um valor de ponto flutuante
Serial.println("Digite um valor do tipo float");
while (Serial.available() == 0) {} // Aguarda digitar
float floatValue = Serial.parseFloat();
Serial.print("Float lido: ");
Serial.println(floatValue);
Serial.println();
}
```

* [Código arduino](hello.ino)

* [Thinkercad online](https://www.tinkercad.com/things/4e6ZDm63O2D-swanky-robo-blad/editel?sharecode=MftwpiXu-ym4ISoTz_QquJtsnkLvIIlr9fNjBM0J8LI)
### Outros métodos úteis:

* [SimulIDE](hello.simu)
- `Serial.setTimeout(time);` - O `time` determina quanto tempo a função aguardará antes de desistir da leitura, caso os dados não estejam disponíveis.
File renamed without changes
File renamed without changes.
File renamed without changes.
File renamed without changes
36 changes: 17 additions & 19 deletions material/aulas/iot/ex2/index.md
Original file line number Diff line number Diff line change
@@ -1,40 +1,38 @@

## O que esse código faz?

Este código de exemplo demonstra como acender e apagar um LED em um intervalo de 100 milissegundos ao pressionar um botão com Arduino.
Este código de exemplo demonstra como piscar um LED com arduino (blink led).


## Circuito protoboard

![](botao_led.png)
![](hello1.PNG)


## Código

```c
const int led = 13; //define o apelido led para o valor 13
const int botao = 5; //define o apelido botao para o valor 5
int led = 13; //defindo o valor 13 para a variável led

void setup(){
pinMode(led, OUTPUT); //declara o pino13 (led) como saída
pinMode(botao, INPUT_PULLUP); //declara o pino5 (botao) como entrada
pinMode(led,OUTPUT); //declara led (pino 13 do arduino) como saida (OUTPUT)
}

void loop(){
// Faz a leitura do botao
if (digitalRead(botao) == LOW) {
digitalWrite(led, HIGH); //acende o led
delay(100); //delay em milissegundos
digitalWrite(led, LOW); //apaga o led
delay(100); //delay em milissegundos
}
digitalWrite(led, HIGH); //acende (HIGH) o led
delay(1000); //delay em milisegundos (1 seg)
digitalWrite(led, LOW); //apaga o led (LOW)
delay(1000); //delay em milisegundos
}
```

??? note "Circuito simulador"
![](botao_led.png)
![](hello.PNG)


## Links para Download

* [Código arduino](botao_led.ino)
* [Código arduino](hello.ino)

* [Thinkercad online](https://www.tinkercad.com/things/7Kj0XM4gX3q-spectacular-gadzery-saddai/editel?sharecode=OQaQZ0VdZj8Wn1A6vE5bQYnCYxzP5o5q3L7rAaiYlIs)
* [Thinkercad online](https://www.tinkercad.com/things/4e6ZDm63O2D-swanky-robo-blad/editel?sharecode=MftwpiXu-ym4ISoTz_QquJtsnkLvIIlr9fNjBM0J8LI)

* [SimulIDE](botao_led.simu)
* [SimulIDE](hello.simu)
File renamed without changes.
File renamed without changes
27 changes: 6 additions & 21 deletions material/aulas/iot/ex3/index.md
Original file line number Diff line number Diff line change
@@ -1,27 +1,20 @@
## O que esse código faz?

Este código de exemplo demonstra como controlar dois LEDs com Arduino usando um botão e um potenciômetro. Um LED acende e apaga em um intervalo de 100 milissegundos ao pressionar um botão, enquanto o outro LED acende e apaga no mesmo intervalo quando o valor do potenciômetro é maior ou igual a 500.
Este código de exemplo demonstra como acender e apagar um LED em um intervalo de 100 milissegundos ao pressionar um botão com Arduino.

## Circuito protoboard

![](botao_pot_led.png)
![](botao_led.png)

## Código

```c
const int led = 13; //define o apelido led para o valor 13
const int botao = 5; //define o apelido botao para o valor 5
const int ledPwm = 11; //define o apelido ledPwm para o valor 11
const int potAD = A0; //define o apelido potenciometro para o valor A0

void setup(){
// Entradas e saídas digitais
pinMode(led, OUTPUT); //declara o pino13 (led) como saída
pinMode(botao, INPUT_PULLUP); //declara o pino5 (botao) como entrada

// Entradas e saídas analógicas
pinMode(ledPwm, OUTPUT); //declara o pino11 (ledPwm) como saída
pinMode(potAD, INPUT); //declara o pinoA0 (potenciometro) como entrada
}

void loop(){
Expand All @@ -32,24 +25,16 @@ void loop(){
digitalWrite(led, LOW); //apaga o led
delay(100); //delay em milissegundos
}
// Faz a leitura analógica do potenciometro
int pot = analogRead(potAD);
if (pot >= 500) {
digitalWrite(ledPwm, HIGH); //acende o led
delay(100); //delay em milissegundos
digitalWrite(ledPwm, LOW); //apaga o led
delay(100); //delay em milissegundos
}
}
```

??? note "Circuito simulador"
![](botao_pot_led.png)
![](botao_led.png)

## Links para Download

* [Código arduino](botao_pot_led.ino)
* [Código arduino](botao_led.ino)

* [Thinkercad online](https://www.tinkercad.com/things/5b1JG4Y3q3t-super-invention/editel?sharecode=dS7V_4pLzX7VRYxT_0nhTAVBccXTDZoePQuIbPnwtiQ)
* [Thinkercad online](https://www.tinkercad.com/things/7Kj0XM4gX3q-spectacular-gadzery-saddai/editel?sharecode=OQaQZ0VdZj8Wn1A6vE5bQYnCYxzP5o5q3L7rAaiYlIs)

* [SimulIDE](botao_pot_led.simu)
* [SimulIDE](botao_led.simu)
File renamed without changes.
File renamed without changes
40 changes: 20 additions & 20 deletions material/aulas/iot/ex4/index.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
## O que esse código faz?

Este código de exemplo demonstra como controlar dois LEDs com Arduino usando um botão e um potenciômetro, substituindo o uso de `delay()` por `millis()`. Um LED alterna seu estado a cada 100 milissegundos ao pressionar um botão, enquanto o outro LED alterna seu estado no mesmo intervalo quando o valor do potenciômetro é maior ou igual a 500.
Este código de exemplo demonstra como controlar dois LEDs com Arduino usando um botão e um potenciômetro. Um LED acende e apaga em um intervalo de 100 milissegundos ao pressionar um botão, enquanto o outro LED acende e apaga no mesmo intervalo quando o valor do potenciômetro é maior ou igual a 500.

## Circuito protoboard

![](botao_pot_millis.png)
![](botao_pot_led.png)

## Código

Expand All @@ -14,9 +14,7 @@ const int botao = 5; //define o apelido botao para o valor 5
const int ledPwm = 11; //define o apelido ledPwm para o valor 11
const int potAD = A0; //define o apelido potenciometro para o valor A0

unsigned long tempo1 = 0, tempo2 = 0;

void setup() {
void setup(){
// Entradas e saídas digitais
pinMode(led, OUTPUT); //declara o pino13 (led) como saída
pinMode(botao, INPUT_PULLUP); //declara o pino5 (botao) como entrada
Expand All @@ -26,30 +24,32 @@ void setup() {
pinMode(potAD, INPUT); //declara o pinoA0 (potenciometro) como entrada
}

void loop() {
//usando millis no lugar do delay
if (millis() - tempo1 >= 100){
tempo1 = millis();
if (digitalRead(botao) == LOW){
digitalWrite(led, !digitalRead(led));
}
void loop(){
// Faz a leitura do botao
if (digitalRead(botao) == LOW) {
digitalWrite(led, HIGH); //acende o led
delay(100); //delay em milissegundos
digitalWrite(led, LOW); //apaga o led
delay(100); //delay em milissegundos
}
// usando millis
// Faz a leitura analógica do potenciometro
int pot = analogRead(potAD);
if (millis() - tempo2 >= 100 && pot >= 500){
tempo2 = millis();
digitalWrite(ledPwm, !digitalRead(ledPwm));
if (pot >= 500) {
digitalWrite(ledPwm, HIGH); //acende o led
delay(100); //delay em milissegundos
digitalWrite(ledPwm, LOW); //apaga o led
delay(100); //delay em milissegundos
}
}
```

??? note "Circuito simulador"
![](botao_pot_millis.png)
![](botao_pot_led.png)

## Links para Download

* [Código arduino](botao_pot_millis.ino)
* [Código arduino](botao_pot_led.ino)

* [Thinkercad online](https://www.tinkercad.com/things/1S2zV5j5P5o-captivating-mox-duino/editel?sharecode=4vGvV8WZFFHk9q3zqYJbc_-C8oGJRKoRn7zfk1dfQdk)
* [Thinkercad online](https://www.tinkercad.com/things/5b1JG4Y3q3t-super-invention/editel?sharecode=dS7V_4pLzX7VRYxT_0nhTAVBccXTDZoePQuIbPnwtiQ)

* [SimulIDE](botao_pot_millis.simu)
* [SimulIDE](botao_pot_led.simu)
File renamed without changes.
File renamed without changes
Loading

0 comments on commit 6635265

Please sign in to comment.