Você está na página 1de 68

Apostila

Algoritmos e Programao em
Linguagem C para Engenharia
Eduardo Ono

12/11/2014

Eu sou responsvel pelo que eu falo,


no pelo que voc entende...

Sumrio
1

Introduo ............................................................................................................................................................... 1

Lgica de Programao .................................................................................................................................... 2


2.1

Teoremas de De Morgan ........................................................................................................................ 2

Algoritmos ............................................................................................................................................................... 4

Programao de Computador ....................................................................................................................... 5

4.1

Compilador ................................................................................................................................................... 5

4.2

IDE ..................................................................................................................................................................... 5

A Linguagem de Programao C .................................................................................................................. 6


5.1

Introduo ..................................................................................................................................................... 6

5.1.1

5.2

Instrues e Blocos de Instrues .................................................................................................... 6

5.3

Palavras Reservadas ................................................................................................................................ 7

5.4

Comentrios ................................................................................................................................................. 7

Tipos de Dados e Variveis ............................................................................................................................. 8


6.1

Tipos de Dados............................................................................................................................................ 8

6.2

Variveis ......................................................................................................................................................... 8

6.2.1
6.2.2
6.2.3
6.2.4

Estrutura de um Programa em C ............................................................................................. 6

Nomes de variveis ........................................................................................................................ 9


Declarao de variveis ............................................................................................................... 9
Definio (ou inicializao) de variveis ............................................................................ 9
Declarao e definio de variveis ....................................................................................... 9

6.3

Armadilhas da Linguagem C ......................................................................................................... 10

6.4

Exerccios .................................................................................................................................................... 10

Operadores .......................................................................................................................................................... 12
7.1

Operador de Atribuio....................................................................................................................... 12

7.2

Operadores Aritmticos ...................................................................................................................... 12

7.3

Operadores Lgicos (Booleanos) ................................................................................................... 13

7.4

Operadores Relacionais ...................................................................................................................... 13

7.5

Operadores Lgicos Bit-a-Bit ........................................................................................................... 14

7.6

Precedncia de Operadores .............................................................................................................. 14

Funes da Linguagem C .............................................................................................................................. 15


8.1

Funes de entrada e sada ............................................................................................................... 15

8.1.1

Funes de Entrada..................................................................................................................... 15
i

8.1.2
8.2
9

Funes de Sada .......................................................................................................................... 16

Funes Trigonomtricas................................................................................................................... 16

Estruturas Sequenciais .................................................................................................................................. 17


9.1

Exerccios .................................................................................................................................................... 21

10 Estruturas Condicionais ................................................................................................................................ 22


10.1

Comando if ................................................................................................................................................. 22

10.2

Comando if...else ...................................................................................................................................... 24

10.3

Comando switch ...................................................................................................................................... 30

11 Estruturas de Repetio (ou Iterao) .................................................................................................. 32


11.1

Comando while ......................................................................................................................................... 32

11.2

Comando for .............................................................................................................................................. 34

11.2.1
11.2.2

Nmeros primos ........................................................................................................................... 35


Somatrio e Produtrio ............................................................................................................ 36

11.3

Comando do...while ................................................................................................................................ 36

11.4

Exerccios .................................................................................................................................................... 36

12 Vetores e Matrizes............................................................................................................................................ 38
12.1

Vetores ......................................................................................................................................................... 38

12.1.1

Algoritmos de Busca (ou Pesquisa) .................................................................................... 40

12.1

Matrizes ....................................................................................................................................................... 41

12.2

Exerccios .................................................................................................................................................... 42

13 Strings..................................................................................................................................................................... 43
14 Funes Definidas pelo Usurio................................................................................................................ 44
15 Microcontroladores ......................................................................................................................................... 45
16 Lab_Uino ................................................................................................................................................................ 46
16.1

Caractersticas do Lab_Uino .............................................................................................................. 46

16.2

Entradas e Sadas.................................................................................................................................... 46

16.2.1
16.2.2
16.2.3

Entradas analgicas .................................................................................................................... 46


Sadas Digitais ................................................................................................................................ 46
Sadas PWM ..................................................................................................................................... 46

17 Tpicos de programao com o Lab_Uino ........................................................................................... 48


17.1

Introduo .................................................................................................................................................. 48

17.1.1
17.2

Pisca LED..................................................................................................................................................... 48

17.2.1
17.2.2
17.3

Ferramentas .................................................................................................................................... 48
Fundamentos .................................................................................................................................. 48
Controle da luminosidade do LED no Lab_Uino ........................................................... 50

Leitura de Potencimetro .................................................................................................................. 50


ii

17.4

Controle da Luminosidade de LED ................................................................................................ 52

17.5

Sensor de temperatura ........................................................................................................................ 53

17.6

Sensor de distncia ultrassnico .................................................................................................... 54

17.7

Controle de servo motor ..................................................................................................................... 54

18 Apndice................................................................................................................................................................ 57
18.1

Orwell Dev-C++........................................................................................................................................ 57

18.1.1

Procedimento para instalao do Orwell Dev-C++ ..................................................... 57

ndice Remissivo ......................................................................................................................................................... 60

iii

ndice de Listagens
Listagem 5.1. Primeiro programa em C: Ol Mundo!. ............................................................................. 6
Listagem 8.1................................................................................................................................................................... 15
Listagem 9.1. Clculo da media aritmtica das notas de duas provas............................................. 17
Listagem 9.2. Clculo da rea de um tringulo pela frmula de Heron. ......................................... 18
Listagem 9.3. Clculo do resistor equivalente para dois resistores em srie e em paralelo.
.............................................................................................................................................................................................. 19
Listagem 9.4. Caixa eletrnico. ......................................................................................................................... 20
Listagem 9.5. Troca de valores entre duas variveis. .............................................................................. 20
Listagem 9.6. Ordenao crescente de trs nmeros. ............................................................................. 21
Listagem 10.1. Verifica se uma pessoa maior de idade. ...................................................................... 22
Listagem 10.2. Programa que verifica se um aluno foi aprovado...................................................... 23
Listagem 10.3. Programa que verifica se um aluno foi aprovado ou reprovado (apenas
utilizando o comando if). ........................................................................................................................................ 24
Listagem 10.4. Programa que verifica se um nmero par ou mpar. ........................................... 25
Listagem 10.5. Programa que verifica se um aluno foi aprovado ou reprovado. ...................... 25
Listagem 10.6. Programa que exibe o maior entre dois nmeros. .................................................... 26
Listagem 10.7. Programa que exibe o maior e o menor entre dois nmeros. ............................. 26
Listagem 10.8. Programa que verifica se um ano bissexto ou no. ............................................... 27
Listagem 10.9. Programa que classifica um tringulo quanto aos lados. ...................................... 29
Listagem 10.10. Equao da reta que passa por dois pontos. ............................................................. 30
Listagem 10.11. Imprime o ms do ano por extenso. .............................................................................. 31
Listagem 11.1. Lao infinito que pode ser interrompido ao se pressionar uma tecla. ........... 33

iv

Listagem 11.2. Obteno das razes de uma equao do segundo grau pela frmula de
Bhaskara. ......................................................................................................................................................................... 33
Listagem 11.3. Programa que soma nmeros fornecidos pelo usurio em tempo de
execuo. ......................................................................................................................................................................... 34
Listagem 11.4. Programa que verifica se um nmero primo ou no. .......................................... 35
Listagem 11.5. Soma de nmeros inteiros consecutivos. ...................................................................... 36
Listagem 12.1. Programa que verifica se um nmero elemento de um vetor. ........................ 40
Listagem 17.1. Leitura de potencimetro. ..................................................................................................... 52
Listagem 17.2. Controle da luminosidade de LED com potencimetro. ........................................ 53

1 Introduo
A presente apostila foi concebida a partir de notas de aulas da disciplina
Algoritmos e Linguagem de Programao, ministrada no Unisal Campus Campinas / So
Jos. O objetivo principal desse material consiste em fornecer ao aluno de um curso
introdutrio de programao em linguagem C um texto conciso que aborde os trs
principais aspectos necessrios para a programao de computadores: (i) Algoritmos e
lgica de programao, (ii) Linguagem de programao e (iii) Tcnicas de programao.

Copyright Eduardo Ono

2 Lgica de Programao
Definio. Lgica a parte da filosofia que trata das formas do pensamento em
geral (deduo, induo, hiptese, inferncia, etc.) e das operaes intelectuais que visam
determinao do que verdadeiro ou no.
Definio. Uma proposio uma sentena declarativa que admite apenas um dos
dois valores lgicos: verdadeiro (true) ou falso (false).
Definio. Uma proposio composta uma proposio construda a partir de
outras proposies existentes.
Exemplo. Seja p uma proposio dada por:
p: Joozinho tropeou e caiu.
Essa proposio, embora vlida, s entendida por um computador quando escrita
da forma:
p: Joozinho tropeou e Joozinho caiu.

2.1 Teoremas de De Morgan


A negao da proposio p p (no p):
p: Joozinho no tropeou ou Joozinho no caiu.
Observe que na negao houve a troca do conectivo lgico E para OU.
Em linguagem simblica Matemtica temos:
{

Copyright Eduardo Ono.

( )
( )

Tabela 1. Tabela-verdade para os Teoremas de De Morgan.

( )

( )

Exemplo. Seja x um nmero real tal que 1 2. Essa expresso deve ser escrita
como
1 e 2.
Desse modo, a negao :
< 1 ou > 2.

Copyright Eduardo Ono.

3 Algoritmos
Definio. Uma instruo um conjunto de regras ou normas definidas para a
realizao ou emprego de algo. Em computao, instruo a informao que indica a um
computador uma ao elementar a ser executada.
Definio. Um algoritmo uma sequncia finita de instrues que quando
executada dever atingir o seu objetivo, ou seja, a resoluo de um problema ou execuo
de uma tarefa.

Copyright Eduardo Ono.

4 Programao de Computador
Definio. Um programa de computador um conjunto de instrues lgicas e
algoritmos escritos numa linguagem de programao e que so interpretados e
executados por uma mquina.

4.1 Compilador
Definio. Um compilador um programa que converte (traduz) um cdigo escrito
em linguagem compreensvel para o ser humano para uma linguagem de mquina.
Um compilador geralmente no possui ferramentas para a edio de um programa.

4.2 IDE
Definio. Um ambiente de desenvolvimento integrado, mais conhecido como IDE
(do ingls Integrated Development Environment), um software que proporciona
ferramentas que facilitam a edio, compilao e gerenciamento de projetos de programas
de computador.
Nessa apostila foi utilizado o IDE Dev-C++ para a implementao dos programas,
tambm conhecido como Dev-Cpp (do ingls C plus-plus).

Copyright Eduardo Ono.

5 A Linguagem de Programao C
5.1 Introduo
A linguagem de programao C foi criada na dcada de 70 por Dennis Ritchie
(9/Set/1941 12/Out/2011). Tornou-se em pouco tempo uma das linguagens mais
utilizadas na programao de computadores, bem como uma referncia para muitas das
linguagens de programao atuais.

5.1.1

Estrutura de um Programa em C

Exemplo. Primeiro programa em linguagem C: Ol Mundo!.


Listagem 5.1. Primeiro programa em C: Ol Mundo!.
#include <stdio.h>
int main()
{
printf("Ol Mundo!");
return 0;
}

Veremos adiante que acentos e outros smbolos devem ser tratados como
caracteres especiais.

5.2 Instrues e Blocos de Instrues


Definio. Em computao, uma instruo uma informao que indica a um
computador uma ao elementar a ser executada.
Na linguagem C, o ponto-e-vrgula o caractere que indica o fim de uma instruo.
As chaves { e } so utilizadas para agrupar um grupo de instrues em um
bloco, equivalente a uma nica instruo. Em um bloco de instrues, no h um ponto-evrgula aps a chave que termina o bloco.

Copyright Eduardo Ono.

5.3 Palavras Reservadas


As palavras reservadas fazem parte da linguagem e no podem ser redefinidas em
nomes de variveis, funes, etc.
Tabela 5.1. Palavras reservadas da linguagem C.

auto

do

break

for

short

union

goto

signed

unsigned

case

double

if

sizeof

void

char

else

int

static

volatile

const

enum

long

struct

while

continue

extern

register

switch

default

float

return

typedef

A linguagem C case sensitive, ou seja, diferencia letras maisculas e minsculas.


As palavras reservadas so apenas reconhecidas quando escritas em minsculo.
Exemplo:
int Int;

// aceito porm no recomendado

5.4 Comentrios
Definio. Um comentrio uma informao que no considerada pelo
compilador.
H dois tipos de comentrios na linguagem C: (i) bloco de comentrios e (ii)
comentrio de final de linha.
Bloco de comentrios: /* ... */
Comentrio de final de linha: // ...

Copyright Eduardo Ono.

6 Tipos de Dados e Variveis


6.1 Tipos de Dados
Na Matemtica existem os chamados conjuntos numricos que servem para
representar diferentes tipos de nmeros. Como so infinitos, esses conjuntos no podem
ser utilizados em programao. Na linguagem C existem conjuntos equivalentes aos
conjuntos numricos. Esses conjuntos so denominados tipos de dados.
Definio. Um tipo de dado um conjunto finito de elementos de mesmo conjunto
numrico.
A linguagem C prov cinco tipos bsico de dados: char, int, float, double e void.
Tipo

Tamanho (Bytes)

Intervalo

char

-128 127

unsigned char

0 255

int

-32768 32767

unsigned int

0 65536

float

7 dgitos significativos

double

15 dgitos significativos

Na linguagem C no existe o tipo booleano (boolean em ingls). Porm, a linguagem


considera o zero como falso e qualquer nmero diferente de zero como verdadeiro.
Quando utilizada uma varivel para armazenar um caractere da tabela ASCII
estendida (8-bit), deve-se utilizar o tipo unsigned char ou int, visto que o tipo char de
7-bit.

6.2 Variveis
Definio. Uma varivel uma entidade destinada a armazenar

Copyright Eduardo Ono.

uma informao na memria do computador. Em termos prticos, um espao reservado


na memria cujo tamanho determinado pelo tipo de dado da varivel e acessvel atravs
do nome da varivel.
O conceito de varivel foi criado para facilitar a construo de um programa,
permitindo acessar as informaes na memria do computador atravs de um nome, ao
invs do endereo de uma clula de memria. Assim, uma varivel deve possuir um nome
nico para diferenci-la das demais variveis.

6.2.1

Nomes de variveis

O nome de uma varivel deve ser composto por letras ({A, ..., Z, a, ..., z}) e algarismos
arbicos ({0, ..., 9}). O caractere sublinhado _ (underline em ingls) considerado uma
letra. O primeiro caractere deve ser uma letra. Porm, no recomendado iniciar o nome
de uma varivel com o caractere sublinhado, pois muitas rotinas de bibliotecas iniciam
nomes de variveis dessa forma.
A linguagem C Case Sensitive, ou seja, diferencia maisculas de minsculas.
Nomes de variveis tambm obedecem a esse comportamento. Convm salientar que nem
todas as linguagens de programao, por exemplo, Pascal, so Case Sensitive.
Pelo menos os 31 primeiros caracteres de um nome so significativos.

6.2.2

Declarao de variveis

Definio. Declarar uma varivel informar o tipo e o nome da varivel.


Em um programa, todas as variveis devem ser declaradas antes de serem
utilizadas.

6.2.3

Definio (ou inicializao) de variveis

Definio. Definir (ou inicializar) uma varivel atribuir um valor (dado)


varivel.
A atribuio de um valor a uma varivel feita atravs do operador =.

6.2.4

Declarao e definio de variveis

A linguagem C permite a declarao e definio de uma varivel em uma nica


instruo.

Copyright Eduardo Ono.

Exemplo:
int idade = 18;

Mais de uma varivel de um mesmo tipo podem ser inicializadas em uma nica
instruo, separadas por vrgula.
int idade = 18;
float altura = 1.79, peso = 84.1;

// altura em m e peso em kg

6.3 Armadilhas da Linguagem C


Vimos que o tipo char possui uma faixa de valores que vai de 128 a 127.
Exemplo. Atribuio de valores para variveis do tipo char.
#include <stdio.h>
int main()
{
char valor;
printf("%d", valor);
}

Nesse programa, a varivel valor foi declarada, porm, no foi definida


(inicializada). Vejamos quais as sadas para diferentes atribuies a varivel valor:

Valor (tipo char)

Sada da instruo printf("%d", valor);

-128

-128

127

127

-129

127

128

-129

255

-1

6.4 Exerccios
1. Qual a diferena entre declarar uma varivel e definir (ou inicializar) uma
varivel?

Copyright Eduardo Ono.

10

Copyright Eduardo Ono.

11

7 Operadores
7.1 Operador de Atribuio
O operador de atribuio = utilizado para atribuir um valor a uma varivel.

7.2 Operadores Aritmticos

Operador

Operao

Expresso

Descrio

Adio (Soma)

x+y

Soma x com y.

Subtrao

xy

Subtrai y de x.

Multiplicao

x*y

Multiplica x por y.

Diviso

x/y

Divide x por y.

Mdulo

x%y

Resto da diviso inteira de x por y.

++

Incremento

x++, ++x

--

Decremento

y--, --y

Inverso de
sinal

-x

Soma 1 a x.
Subtrai 1 de x.
Inverte o sinal de x.

O operador % (mdulo) equivalente a operao:


=

Dividendo

Divisor

Resto

Quociente

Resto = Dividendo % Divisor

Quociente = Dividendo / Divisor

Os operadores de incremento e decremento s podem ser aplicados a variveis.

Copyright Eduardo Ono.

12

7.3 Operadores Lgicos (Booleanos)

Operador

Operao

Expresso Descrio

&&

E (AND)

x && y

xEy

||

OU (OR)

x || y

x OU y

Negao (NOT)

!x

No x.

A linguagem C no possui um tipo booleano (true ou false). Porm, considera o


zero como false e qualquer valor diferente de zero como true.
Exemplos:
1 && 1
1 && 0
0 && 0

// resulta em 1
// resulta em 0
// resulta em 0

1 || 1
1 || 0
0 || 0

// resulta em 1
// resulta em 1
// resulta em 0

7.4 Operadores Relacionais

Operador

Operao

Expresso

Descrio

>

Maior que

x>y

Verifica se x maior que y.

<

Menor que

x<y

Verifica se x menor que y.

>=

Maior ou igual

x >= y

Verifica se x maior ou igual a y.

<=

Menor ou igual

x <= y

Verifica se x menor ou igual a y.

==

Igual

x == y

Verifica se x igual a y.

!=

Diferente

x != y

Verifica se x diferente de y.

Exemplo. Os operadores relacionais realizam comparaes:


x
x
x
x

=
=
=
=

1 <
2 <
A
A

2; // x recebe 1
1; // x recebe 0
< B; // x recebe 1, conforme a tabela ASCII
< a; // x recebe 1, conforme a tabela ASCII

Copyright Eduardo Ono.

13

7.5 Operadores Lgicos Bit-a-Bit


As operaes lgicas bit-a-bit s podem ser realizadas nos tipos char, int e
long int.

Operador

Operao

Expresso

&

E bit-a-bit

x>y

Verifica se x maior que y.

OU inclusivo bit-a-bit

x<y

Verifica se x menor que y.

OU exclusivo bit-a-bit

x >= y

Verifica se x maior ou igual a y.

<<

Deslocamento a esquerda

x <= y

Verifica se x menor ou igual a y.

>>

Deslocamento a direita

x == y

Verifica se x igual a y.

Complemento de um (unrio)

x != y

Verifica se x diferente de y.

7.6 Precedncia de Operadores


2 + 3 4 = 14.
Importante! Na dvida, utilize parnteses.

Copyright Eduardo Ono.

14

Descrio

8 Funes da Linguagem C
Definio. Em programao, uma funo uma sub-rotina, ou seja, um bloco de
instrues que pode ser utilizado diversas vezes na execuo de um programa.
Definio. Um argumento de uma funo um parmetro de entrada da funo.
Uma funo pode conter vrios argumentos.
Exemplo. No programa a seguir realizado o clculo da mdia m de dois valores
atravs da funo media, que recebe como argumentos duas variveis do tipo ponto
flutuante.
float media(float a, float b)
Listagem 8.1
{
return (a + b)/2;
}

Outra forma:
float media(float a, float b)
{
float m; // No podemos utilizar media pois o nome da funo.
m = (a + b)/2;
return m;
}

As funes no so nativas a linguagem C. Porm, a maioria dos compiladores j


trazem bibliotecas contendo as funes mais comuns.

8.1 Funes de entrada e sada


As funes de entrada e sada requerem a incluso da biblioteca stdio.h.

8.1.1

Funes de Entrada

A principal funo de entrada a funo scanf. O primeiro argumento uma


sequncia de caracteres que deve ser delimitada por aspas. Essa sequncia geralmente
contm uma mscara que corresponde ao tipo do valor a ser armazenado. Para que a
funo scanf possa alterar o valor da varivel passada como argumento da funo

Copyright Eduardo Ono.

15

(passagem por referncia), a varivel deve ser precedida pelo operador &, denominado
operador de endereo .

8.1.2

Funes de Sada

A principal funo de sada a funo printf. O primeiro argumento da funo


printf uma sequncia de caracteres que deve ser delimitada por aspas.
Essa sequncia de caracteres so normalmente mensagens contendo informaes
resultantes do programa. Valores de variveis podem ser inseridos dentro de mensagens
atravs de caracteres de controle especiais denominadas mscaras. Esses caracteres
especiais so iniciados pelo caractere %. Existe uma mscara correspondente para cada
tipo de dado. Ao ser executada, a mscara substituda pelo valor correspondente a uma
sequncia de argumentos fornecidos aps o argumento inicial.
Tabela 8.1. Exemplos do uso de mscaras na funo printf.

Instruo de sada

Sada

printf("Ol mundo!");

Ol mundo!

printf("Ol%c mundo!", 160);

Ol mundo!

A funo getch comumente utilizada para promover uma pausa na tela de sada
(console) ao trmino de um programa. Como a funo getch no requer nenhum
argumento, a instruo escrita simplesmente como:
getch();

8.2 Funes Trigonomtricas


Em matemtica, as funes trigonomtricas so funes angulares, importantes no
estudo dos tringulos e na modelao de fenmenos peridicos. Podem ser definidas como
razes entre dois lados de um tringulo retngulo em funo de um ngulo, ou, de forma
mais geral, como razes de coordenadas de pontos no crculo unitrio. Na anlise
matemtica, estas funes recebem definies ainda mais gerais, na forma de sries
infinitas ou como solues para certas equaes diferenciais. Neste ltimo caso, as funes
trigonomtricas esto definidas no s para ngulos reais como tambm para ngulos
complexos.
O uso de funes trigonomtricas requer a incluso da biblioteca math.h.

Copyright Eduardo Ono.

16

9 Estruturas Sequenciais
Na linguagem C as instrues de um programa seguem uma sequncia de execuo.
Exemplo. Mdia das notas de duas provas P1 e P2.
#include <stdio.h>
int main()
{
float p1, p2;
// declarao das variveis
p1 = 8.0;
// definio (ou inicializao) da varivel
p2 = 7.0;
// definio (ou inicializao) da varivel
printf("Media = %f", (p1 + p2)/2);
return 0;
}

Listagem 9.1. Clculo da media aritmtica das notas de duas provas.


#include <stdio.h>
int main()
{
float p1, p2, media;
p1 = 8.0;
p2 = 7.0;
media = (p1 + p2)/2;
printf("Media = %f", media);
return 0;
}

Exemplo. A frmula de Heron (ou Hero) utilizada para o clculo da rea de um


tringulo qualquer em funo das medidas de seus lados a, b e c do semi-permetro s:
= ( )( )( )
Como o valor da rea A depende do valor do semi-permetrio s, necessrio
determinar previamente o valor de s, dado por:
=

Copyright Eduardo Ono.

++

17

Listagem 9.2. Clculo da rea de um tringulo pela frmula de Heron.


#include <stdio.h>
#include <math.h>

// biblioteca para a funo sqrt

int main()
{
float a, b, c, s, area;
printf("Digite as medidas dos lados de um triangulo: ");
scanf("%f %f %f", &a, &b, &c);
s = (a + b + c)/2;
// clculo do semi-permetro
area = sqrt(s*(s a)*(s b)*(s c));
// clculo da rea
printf("Area = %f", area);
return 0;
}

Nesse exemplo fica bem estabelecido que a sequncia correta das instrues
fundamental para a obteno do resultado desejado.

Exemplo. Na associao de resistores em srie e em paralelo o valor do resistor


equivalente dado por:
= 1 + 2 + +
1
1
1
1
=
+
++
1 2

Copyright Eduardo Ono.

18

Listagem 9.3. Clculo do resistor equivalente para dois resistores em srie e em paralelo.
#include <stdio.h>
int main()
{
float r1, r2, req, tmp;
printf("Digite o valor do resistor
scanf("%f", &r1);
printf("Digite o valor do resistor
scanf("%f", &r2);
req = r1 + r2;
printf("Resistencia equivalente em
tmp = 1.0/r1 + 1.0/r2;
req = 1/tmp;
printf("Resistencia equivalente em
return 0;

R1: ");
R2: ");

serie: %f\n", req);

paralelo: %f\n", req);

Exemplo. Caixa eletrnico. Um caixa eletrnico opera com notas de 50, 20, 10, 5,
2 e 1 Real (suponha que ainda existam notas de R$ 1,00). Determine a quantidade mnima
de notas mediante um valor de saque fornecido por um cliente.

Copyright Eduardo Ono.

19

Listagem 9.4. Caixa eletrnico.


#include <stdio.h>
int main()
{
int valor, notas50, notas20, notas10, notas5, notas2, notas1;
printf("Digite o valor do saque: ");
scanf("%d", &valor);
notas50 = valor/50;
valor %= 50;
// valor = valor % 50;
notas20 = valor/20;
valor %= 20;
notas10 = valor/10;
valor %= 10;
notas5 = valor/5;
valor %= 5;
notas2 = valor/2;
notas1 = valor % 2;
printf("Quantidade de notas de R$ 50,00 = %d\n", notas50);
printf("Quantidade de notas de R$ 20,00 = %d\n", notas20);
printf("Quantidade de notas de R$ 10,00 = %d\n", notas10);
printf("Quantidade de notas de R$ 5,00 = %d\n", notas5);
printf("Quantidade de notas de R$ 2,00 = %d\n", notas2);
printf("Quantidade de notas de R$ 1,00 = %d\n", notas1);
return 0;
}

Exemplo. Troca de valores entre duas variveis.


Listagem 9.5. Troca de valores entre duas variveis.
#include <stdio.h>
int main()
{
float x, y, aux;
printf("Digite dois numeros quaisquer: ");
scanf("%f %f", &x, &y);
aux = x;
x = y;
y = aux;
printf("%f %f", x, y);
return 0;
}

Copyright Eduardo Ono.

20

Exemplo. Ordenao crescente de trs nmeros.


Listagem 9.6. Ordenao crescente de trs nmeros.
#include <stdio.h>
int main()
{
printf("Entre com tres numeros: ");
scanf("%f %f %f", &a, &b, &c);
if (a>b) { aux = a; a = b; b = aux; }
if (b>c) { aux = b; b = c; c = aux; }
if (a>b) { aux = a; a = b; b = aux; }
printf("%f %f %f", a, b, c);
return 0;
}

9.1 Exerccios
1. Escreva um programa que pea ao usurio as medidas dos catetos de um tringulo
retngulo e calcula a medida da hipotenusa desse tringulo.
2. Um caixa eletrnico opera com notas de 100, 50, 20, 10, 5 e 2 Reais. Escreva um
programa que calcula a quantidade mnima de cada nota mediante um valor de
saque fornecido por um cliente.

Copyright Eduardo Ono.

21

10 Estruturas Condicionais
10.1 Comando if
A expresso lgica contida na condio entre parnteses ser avaliada e a
instruo seguinte, ou bloco de instrues seguintes, sero executados.
Exemplo. Verificao se uma pessoa maior de idade.
Listagem 10.1. Verifica se uma pessoa maior de idade.
#include <stdio.h>
int main()
{
int idade;
printf("Digite a idade: ");
scanf("%d", &idade);
if (idade >= 18) printf("Maior de idade.");
return 0;
}

A expresso condicional pode ser composta, uma vez que uma proposio
composta tambm uma proposio.
Exemplo. Verificao da aprovao ou reprovao de um aluno.

Copyright Eduardo Ono.

22

Listagem 10.2. Programa que verifica se um aluno foi aprovado.


#include <stdio.h>
int main()
{
float mediaFinal, frequencia;
printf("Entre com a media final: ");
scanf("%f", &mediaFinal);
printf("Entre com a freqencia: ");
scanf("%f", frequencia);
if (mediaFinal >= 5.0 && frequencia >= 0.75) printf("APROVADO!");
return 0;
}

Um programa para verificar se um aluno foi reprovado iria diferir apenas pela
instruo:
if (mediaFinal < 5.0 || frequencia < 0.75) printf("REPROVADO!");

Observe que na negao da expresso condicional o E lgico foi alterado para o


OU lgico, conforme a Lei de De Morgan:
( ) =
As vezes torna-se trabalhoso encontrar a negao de uma expresso condicional.
possvel negar uma expresso diretamente, atravs do uso do operador de negao !:
if (!(mediaFinal >= 5.0 && frequencia >= 0.75)) printf("REPROVADO! ");

Copyright Eduardo Ono.

23

Listagem 10.3. Programa que verifica se um aluno foi aprovado ou reprovado (apenas
utilizando o comando if).
#include <stdio.h>
int main()
{
float mediaFinal, frequencia;
printf("Entre com a media final: ");
scanf("%f", mediaFinal);
printf("Entre com a frequencia: ");
scanf("%f", frequencia);
if (mediaFinal >= 5.0 && frequencia >= 0.75) printf("APROVADO");
if (!(mediaFinal >= 5.0 && frequncia >= 0.75)) printf("REPROVADO!");
return 0;
}

#include <stdio.h>
int main()
{
printf("Entre com tres numeros: ");
scanf("%f %f %f", &a, &b, &c);
if (a>b) { aux = a; a = b; b = aux; }
if (b>c) { aux = b; b = c; c = aux; }
if (a>b) { aux = a; a = b; b = aux; }
printf("%f %f %f", a, b, c);
return 0;
}

10.2 Comando if...else

Copyright Eduardo Ono.

24

Listagem 10.4. Programa que verifica se um nmero par ou mpar.


#include <stdio.h>
int main()
{
int num;
printf("Digite um numero inteiro: ");
scanf("%d", &num);
if (num%2 == 0) printf("%d eh par.", num);
else printf("%d eh impar.", num);
}

Na Listagem 10.3, a condio de reprovado complementar de aprovado, ou seja,


Listagem 10.5. Programa que verifica se um aluno foi aprovado ou reprovado.
#include <stdio.h>
int main()
{
float mediaFinal, frequencia;
printf("Entre com a media final: ");
scanf("%f", mediaFinal);
printf("Entre com a freqencia: ");
scanf("%f", frequencia);
if (mediaFinal >= 5.0 && frequencia >= 0.75) printf("APROVADO");
else printf("REPROVADO!");
return 0;
}

Exemplo. Dados dois nmeros quaisquer, exibir o maior deles.

Copyright Eduardo Ono.

25

Listagem 10.6. Programa que exibe o maior entre dois nmeros.


#include <stdio.h>
int main()
{
float a, b;
printf("Entre com dois numeros quaisquer: ");
scanf("%f%f", &a, &b);
if (a==b) printf("Os numeros sao iguais.");
else if (a>b) printf("Maior numero = %f\n", a);
else printf("Maior numero = %f\n", b);
}

Exemplo. Dados dois nmeros quaisquer, imprimir o maior e o menor.


Listagem 10.7. Programa que exibe o maior e o menor entre dois nmeros.
#include <stdio.h>
int main()
{
float a, b;
printf("Entre com dois numeros quaisquer: ");
scanf("%f%f", &a, &b);
if (a==b) printf("Os numeros sao iguais.");
else if (a>b)
{
printf("Maior numero = %f\n", a);
printf("Menor numero = %f\n", b);
}
else
{
printf("Maior numero = %f\n", b);
printf("Menor numero = %f\n", a);
}
}

Exemplo. Um ano um ano bissexto se for divisvel por 4 mas no por 100, exceto
pelos divisveis por 400, que so bissextos.

Copyright Eduardo Ono.

26

Listagem 10.8. Programa que verifica se um ano bissexto ou no.


#include <stdio.h>
int main()
{
int ano;
printf("Digite o ano: ");
scanf("%d", &ano);
if ((ano%4==0 && ano%100!=0) || ano%400==0)
printf("%d eh um ano bissexto.", ano);
else printf("%d nao eh um ano bissexto.", ano);
}

Exemplo. Razes de uma equao do segundo grau do tipo 2 + + = 0, com


0.
As razes so dadas por:
=

Copyright Eduardo Ono.

2 4
2

27

#include <stdio.h>
#include <math.h>
int main()
{
float a, b, c, delta, x1, x2;
printf("Digite o valor de a: ");
scanf("%f", &a);
printf("Digite o valor de b: ");
scanf("%f", &b);
printf("Digite o valor de c: ");
scanf("%f", &c);
if (a != 0)
{
delta = b*b - 4*a*c;
if (delta >= 0)
{
x1 = (-b + sqrt(delta))/(2*a);
x2 = (-b - sqrt(delta))/(2*a);
printf("x1 = %f e x2 = %f", x1, x2);
}
else printf("A equacao nao possui raizes reais.");
}
else printf("O valor de a nao pode ser igual a zero.");
return 0;
}

Exemplo. Classificao de tringulo quanto aos lados.

Copyright Eduardo Ono.

28

Listagem 10.9. Programa que classifica um tringulo quanto aos lados.


#include <stdio.h>
int main()
{
float a, b, c;

// lados de um triangulo

printf("Digite os valores de a, b e c: ");


scanf("%f %f %f", &a, &b, &c);
if (a<b+c && b<a+c && c<a+b)
// Verifica se o triangulo existe
{
if (a==b && b==c) printf("Equilatero");
else if (a==b || b==c || a==c) printf("Isosceles");
else printf("Escaleno");
}
else printf("O triangulo nao existe.");
return 0;
}

Exemplo. Equao da reta: Dados dois pontos 1 = (1 , 1 ) e 2 = (2 , 2 )


pertencentes ao plano 2 , escreva um programa que determina a equao da reta
= + que passa por P1 e P2.

Copyright Eduardo Ono.

29

Listagem 10.10. Equao da reta que passa por dois pontos.


#include <stdio.h>
int main()
{
float x1, y1, x2, y2, a, b;
printf("Digite as coordenadas x1 e y1: ");
scanf("%f %f", &x1, &y1);
printf("Digite as coordenadas x2 e y2: ");
scanf("%f %f", &x2, &y2);
if (x1 == x2 && y1 == y2) printf("Valores invalidos!");
else if (x1 == x2) printf("x = %f", x1);
else
{
a = (y2 - y1)/(x2 - x1);
b = y1 - a*x1;
printf("a = %f e b = %f", a, b);
}
return 0;
}

10.3 Comando switch


O comando switch uma estrutura de deciso mltipla.
Exemplo. Meses do ano.

Copyright Eduardo Ono.

30

Listagem 10.11. Imprime o ms do ano por extenso.


#include <stdio.h>
int main()
{
int mes;
printf("Entre com o numero de um mes: ");
scanf("%d", &mes);
switch (mes)
{
case 1: printf("Janeiro"); break;
case 2: printf("Fevereiro"); break;
case 3: printf("Marco"); break;
case 4: printf("Abril"); break;
case 5: printf("Maio"); break;
case 6: printf("Junho"); break;
case 7: printf("Julho"); break;
case 8: printf("Agosto"); break;
case 9: printf("Setembro"); break;
case 10: printf("Outubro"); break;
case 11: printf("Novembro"); break;
case 12: printf("Dezembro"); break;
default: printf("Numero do mes invalido!");
}
return 0;
}

Copyright Eduardo Ono.

31

11 Estruturas de Repetio (ou Iterao)


Na linguagem C existem trs comandos de repetio: for, while e do...while.

11.1 Comando while


O comando while (enquanto em portugus) utilizado em situaes onde o lao
(loop em ingls) pode terminar de modo inesperado.
Existem casos, programao de microcontroladores, por exemplo, onde o lao
infinito, ou seja, o programa permanece em um lao de repetio enquanto ligado,
normalmente processando informaes de entrada e sada.
Exemplo. Estrutura comum para um lao infinito.
#include <stdio.h>
int main()
{
while (1) printf("I love you!\n");
}

Nesse exemplo, a mensagem I love you! ser exibida infinitas vezes, uma vez
que a expresso condicional sempre verdadeira. Na linguagem C, qualquer nmero
diferente de zero considerado true (verdadeiro).
O comando while equivalente ao for, porm, sem a inicializao e sem o
incremento de uma varivel. Enquanto a condio entre parnteses for verdadeira, ou seja,
diferente de zero, as instrues sero executadas.

Copyright Eduardo Ono.

32

Listagem 11.1. Lao infinito que pode ser interrompido ao se pressionar uma tecla.
#include <stdio.h>
#include <conio.h>
int main()
{
while (!kbhit())
{
// instrues
}
}

Listagem 11.2. Obteno das razes de uma equao do segundo grau pela frmula de
Bhaskara.
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main()
{
float a=0, b, c, delta, x1, x2;
while (a == 0)

// Repete o bloco de instrues abaixo enquanto


// o valor de a for igual a zero.

{
printf("Digite o valor de a: ");
scanf("%f", &a);
}
printf("Digite o valor de b: ");
scanf("%f", &b);
printf("Digite o valor de c: ");
scanf("%f", &c);
delta = b*b 4*a*c;
if (delta >= 0)
{
x1 = (-b + sqrt(delta)) / (2*a);
x2 = (-b sqrt(delta)) / (2*a);
printf("x1 = %f e x2 = %f", x1, x2);
}
else printf("A equacao nao possui raizes reais!");
return 0;
}

Copyright Eduardo Ono.

33

Listagem 11.3. Programa que soma nmeros fornecidos pelo usurio em tempo de execuo.
#include <stdio.h>
int main()
{
float num=0, soma=0, cont=0, media;
while (num != -1) {
printf("Entre com um numero: ");
scanf("%f", &n);
if (n != -1)
{
soma = soma + num;
cont++;
}
media = soma/cont;
printf("Soma = %f\n", soma);
printf("Media = %f\n", media);
return 0;
}

11.2 Comando for


O comando for possui trs campos separados por ponto-e-vrgula:
for (inicializao; expresso condicional; incremento)
{
// instrues;
}

A instruo (ou instrues) no campo inicializao executada apenas uma nica


vez. A expresso condicional avaliada e, caso seja verdadeira, as instrues do corpo do
for so executadas. A instruo no terceiro campo do for executada.

Exemplo.

Copyright Eduardo Ono.

34

#include <stdio.h>
int main()
{
int i;
for (i=0; i<1000; i++) printf("I love you.\n");
}

Essa estrutura pode ser entendida como segue:


i=0;
for (
; i<1000;
)
{
printf("I love you!");
i++;
// i = i+1;
}

Primeiro a varivel inicializada (i = 0); a expresso condicional (i < 1000)


avaliada e, se verdadeira, as instrues so executadas e a varivel incrementada (i++). O
lao repetido enquanto a expresso condio for verdadeira.

11.2.1 Nmeros primos


Definio. Um nmero inteiro positivo um nmero primo se for divisvel apenas
por 1 e por ele mesmo. O nmero 1 no considerado um nmero primo.
Exemplo. Verificar se um nmero digitado pelo usurio primo ou no.
Listagem 11.4. Programa que verifica se um nmero primo ou no.
#include <stdio.h>
int main()
{
int num, i, primo=1;
printf("Digite um numero inteiro positivo: ");
scanf("%d", &num);
for (i=2; i<num; i++)
if (num%i == 0) primo = 0;
if (primo) printf("O numero eh primo.");
else printf("O numero nao eh primo.");
return 0;
}

Copyright Eduardo Ono.

35

Nesse exemplo, h vrias condies que devem ser testadas para uma situao
binria, ou seja, um nmero inteiro primo ou no. A tcnica utilizada foi pressupor que o
nmero primo (primo=1) e verificar se essa suposio falha para algum nmero entre 1
e n.

11.2.2 Somatrio e Produtrio


Exemplo. Clculo da soma
100

= 1 + 2 + 3 + + 100 = 5050.
=1

Listagem 11.5. Soma de nmeros inteiros consecutivos.


#include <stdio.h>
int main()
{
int i;
float soma = 0;

// soma inicializada com o elemento neutro

for (i=1; i<=100; i++)


soma = soma + i;
// soma += i;
printf("Soma = %f", soma);
}

11.3 Comando do...while


O comando do-while equivalente ao while, porm, a condio verificada ao final
da instruo. Ao final da instruo deve-se colocar um ponto e vrgula.

11.4 Exerccios
1. Escreva um programa que imprime todos os divisores positivos de um nmero
inteiro fornecido pelo usurio.

Copyright Eduardo Ono.

36

2. Dada a funo quadrtica () = 2 + + , com , , e 0, escreva um


programa que determina os zeros da funo, ou seja, os valores de x tais que
() = 0, caso existam, e as coordenadas do vrtice da parbola determinada por f.
3. Resolva a questo anterior sem utilizar recursos de Clculo Diferencial e Integral.
4. Foi solicitado a uma empresa de embalagens o projeto de uma latinha cilndrica
fechada para acondicionar certo volume V0 de um lquido. Escreva um programa
para determinar o raio e a altura da latinha de modo a minimizar o material
utilizado em sua confeco. OBS.: No utilize recursos de Clculo Diferencial e
Integral na resoluo desse problema.
Equacionamento do problema:
Seja V0 o volume desejado da latinha. O volume de um cilindro
fechado dado pelo produto da rea da base (crculo de raio r) pela sua
altura h:
0 = 2 =

Considerando que a rea superficial A da latinha proporcional ao


material gasto em sua confeco, temos que a rea A dada pela soma das
reas de dois crculos de raio r (fundo e tampa) mais a rea lateral
(retngulo de base 2r e altura h), ou seja,
= 2 2 + 2 .
Substituindo a varivel h por V0/r2 temos que:
= 2 2 + 2

Copyright Eduardo Ono.

0
20
() = 2 2 +

37

12 Vetores e Matrizes
12.1 Vetores
Definio. Um vetor uma sequncia finita e indexada de dados de um mesmo
tipo.
Na linguagem C, o primeiro ndice de um vetor o zero, ou seja, o ndice (ou
posio) do primeiro elemento de um vetor 0 (zero). v[i] o i-simo elemento de um
vetor v, ou seja, o elemento localizado na posio i (Tabela 12.1).
Tabela 12.1. Estrutura de um vetor de n elementos.

ndice
Elemento

...

...

n-1

v[0]

v[1]

v[2]

v[3]

...

v[i]

...

v[n-1]

A manipulao dos valores de um vetor deve ser feita elemento a elemento.


#include <stdio.h>
int main()
{
int idade[4];
idade[0] = 25; idade[1] = 16; idade[2] = 18; idade[3] = 32;
printf("%d %d %d %d", idade[0], idade[1], idade[2], idade[3]);
return 0;
}

Quando um vetor inicializado em sua declarao no necessrio informar o


tamanho do vetor.

Copyright Eduardo Ono.

38

#include <stdio.h>
int main()
{
int idade[] = {25, 16, 18, 27};
printf("%d %d %d %d", idade[0], idade[1], idade[2], idade[3]);
return 0;
}

Dentre os comandos de repetio, o comando for o mais adequado para percorrer


um vetor, uma vez que o tamanho do vetor conhecido:
for (i=0; i<tamanhoDoVetor; i++)
{
// Instrues ...
}

#include <stdio.h>
int main()
{
int idade[] = {25, 16, 18, 69, 32, 27, 58, 37, 9, 44};
int i;
for (i=0; i<10; i++) printf("%d ", v[i]);
return 0;
}

#include <stdio.h>
int main()
{
int n=10, i;
float v[n];
// L 10 nmeros reais
for (i=0; i<n; i++)
{
printf("\nv[%d]: ", i);
scanf("%f", &v[i]);
}
// Imprime os 10 nmeros reais
for (i=0; i<n; i++) printf("%f ", v[i]);
return 0;
}

Copyright Eduardo Ono.

39

12.1.1 Algoritmos de Busca (ou Pesquisa)


A busca sequencial (ou pesquisa sequencial) o algoritmo mais direto para a
busca de um elemento particular em um vetor no classificado, isto , quando os
elementos no esto ordenados segundo algum critrio.
Listagem 12.1. Programa que verifica se um nmero elemento de um vetor.
#include <stdio.h>
int main()
{
int v[] = {5, 3, 1, 7, 4, 2, 6}, num, i;
printf("Entre com o numero procurado ");
scanf("%d", &num);
for (i=0; i<7; i++)
if (v[i]==num) printf("Encontrado na posicao %d\n", i);
return 0;
}

#include <stdio.h>
int main()
{
int v[] = {5, 3, 1, 7, 4, 2, 6}, num, i, elementos = 0;
printf("Digite o numero procurado: ");
scanf("%d", &num);
for (i=0; i<7; i++)
if (v[i]==num) elementos++;
if (elementos==0) printf("Nao encontrado!");
else printf("Encontrado(s): %d", elementos);
return 0;
}

Copyright Eduardo Ono.

40

#include <stdio.h>
int main()
{
int n=MAX;
// Substituir MAX pelo nmero mximo de elementos de v
int v[]={ }, num, i, posicao=-1;
printf("Entre com o numero procurado: ");
scanf("%d", &num);
for (i=0; i<n && posicao==-1; i++)
if (v[i]==num) posio = i;
// Armazena a posio do nmero encontrado
if (posicao==-1) printf("Numero no encontrado!");
else printf("Encontrado na posicao %d.", posicao);
return 0;
}

#include <stdio.h>
int main()
{
int n=7; int v[] = {1, 3, 5, 7, 9, 11, 13}; int num, inicio=0, fim=n-1,
meio; int posicao=-1;
printf("Entre o numero a ser procurado: ");
scanf("%d", &num);
while (inicio<=fim && posicao==-1)
{
meio = (inicio + fim)/2;
if (num == v[meio]) posicao=meio;
else if (num < v[meio]) fim = meio-1;
else inicio = meio+1;
}
if (posicao==-1) printf("Elemento nao encontrado!");
else printf("Encontrado na posicao %d.", posicao);
return 0;
}

12.1 Matrizes

Copyright Eduardo Ono.

41

12.2 Exerccios
1. Escreva um programa que pea a usurio entrar 10 nmeros inteiros e, aps a
entrada dos valores, o programa deve exibir os valores pares em uma linha e os
valores mpares em outra linha.
2. Um nibus urbano parte de um terminal e faz paradas em alguns pontos do seu
percurso antes do ponto final. Na tabela a seguir esto indicados para cada ponto a
distncia percorrida e o tempo estimado, a partir do terminal (ponto de partida):
Terminal

5 (Ponto final)

Distncia (km)

0,2

1,7

3,4

4,3

5,7

Tempo (seg)

29

149

437

618

754

Escreva um programa que calcula (e exibe):


a) A distncia total de todo o trajeto;
b) O tempo total que o nibus leva para percorrer todo o trajeto (em mm:ss);
c) A velocidade mdia do nibus para todo o trajeto (em km/h);
d) O trecho mais rpido, informando a velocidade mdia (em km/h);
e) O trecho mais lento, informando a velocidade mdia (em km/h).

Copyright Eduardo Ono.

42

13 Strings
Definio. Uma string uma sequncia finita e indexada de caracteres, ou seja, um
vetor cujos elementos so do tipo char.
A principal diferena entre uma string e um vetor de caracteres que uma string
termina sempre com o caractere nulo (\0). Esse caractere possibilita a existncia de
funes especficas para manipulao de strings, que utilizam esse caractere especial em
suas rotinas.

char nome[51];
printf("Entre com um nome: ");
scanf("%s", &nome);
printf("%s", nome);

#include <stdio.h>
int main()
{
char nome[65];
printf("Entre com um nome: ");
gets(nome);
puts(nome);
// printf("%s", nome);
return 0;
}

Copyright Eduardo Ono.

43

14 Funes Definidas pelo Usurio


Na Matemtica, uma funo uma lei que associa a todo elemento de um conjunto
domnio um nico elemento de um conjunto imagem.

Copyright Eduardo Ono.

44

15 Microcontroladores
Um microcontrolador (MCU) um computador integrado em um nico chip.

Copyright Eduardo Ono.

45

16 Lab_Uino
O Lab_Uino uma placa baseada no microcontrolador ATmega32U4 e
desenvolvida pela empresa Proxsys. O Lab_Uino compartilha muitas das caractersticas do
Arduino Leonardo, porm, voltada para as atividades de ensino.

16.1 Caractersticas do Lab_Uino

16.2 Entradas e Sadas


16.2.1 Entradas analgicas

O ADC (conversor analgico-digital) das portas ADC0 e ADC1 possui resoluo de


8-bit (0 ... 255) e o das portas ADC4 e ADC5 de 10-bit (0 ... 1023).

16.2.2 Sadas Digitais

16.2.3 Sadas PWM

Embora o AVR possua um conversor analgicodigital (ADC) para as entradas


analgicas, ele no possui um conversor digitalanalgico (DAC), ou seja, no possui
sadas analgicas. Em compensao, o AVR fornece sadas PWM em alguns de seus pinos
de sada digital.
A modulao por largura de pulso ou, em ingls, Pulse Width Modulation PWM,
uma tcnica utilizada em sistemas digitais para emulao de um sinal analgico.
Basicamente, o PWM consiste em manter constante a frequncia de uma onda
quadrada e variar o tempo em que o sinal permanece em nvel lgico alto.

Copyright Eduardo Ono.

46

As sadas 9, 10 e 1 do Lab_Uino podem ser utilizadas como sada PWM. Caso


necessrio, o Arduino Mega possui um total de 40 sadas digitais, das quais 15 podem ser
utilizadas como sadas PWM.

Copyright Eduardo Ono.

47

17 Tpicos de programao com o Lab_Uino


17.1 Introduo
Nos tpicos apresentados a seguir, ser utilizada a interface HID (do ingls Human
Interface Device), no Lab_Uino. O programa compilado ainda ser desenvolvido para a
plataforma PC/Windows, e no para o microcontrolador. Ou seja, nenhum programa ser
enviado ou gravado no microcontrolador. O Lab_Uino ser utilizado apenas como um
dispositivo de entrada e sada.
Trs arquivos so necessrios:

Lab_Uino.dll

AtHid.dll

Lab_Uino_inc.c

O arquivo Lab_Uino_inc.c no necessrio para a compilao dos programas,


porm, fornece funes que facilitam a execuo de funes da placa.

17.1.1 Ferramentas

Algumas das ferramentas necessrias:

Alicates (bico redondo, bico curvo)

Lupa

Jogo de chaves de preciso (fenda e philips)

Multmetro

17.2 Pisca LED


17.2.1 Fundamentos
O LED (Light Emitting Diode), ou diodo emissor de luz, um componente
eletrnico que emite luz quando h passagem de corrente eltrica.

Copyright Eduardo Ono.

48

Sendo um diodo, o LED possui polaridade, ou seja, s funciona com a corrente


fluindo do anodo (polo positivo) para o catodo (polo negativo). H duas formas para se
identificar o anodo e o catodo: (i) o terminal (perna) do anodo mais comprido; (ii) a
base do LED possui um pequeno corte reto ao lado do catodo.
Os LEDs disponveis comercialmente geralmente no apresentam informaes
tcnicas (datasheets) que permitam identificar sua tenso e corrente de operao. Em
geral, a tabela abaixo apresenta, de forma genrica, essas informaes:
Tabela 17.1. Faixas para tenso e corrente para LEDs genricos.

Cor
Infravermelho

Faixa de Tenso
(V)

Faixa de
corrente (mA)
= 3 mm

Faixa de
corrente (mA)
= 5 mm

Faixa de
corrente (mA)
= 10 mm

47

5 10

10 15

1,5 1,8

Amarelo

1,90 1,92

Verde

1,92 1,94

Vermelho

1,96 1,98

Azul

2,76 2,78

Branco

2,76 2,78

Rosa

2,84 2,90

Ultravioleta

3,10 3,16

Como visto acima, o LED opera com tenses inferiores a 5 V. A tenso excedente
pode ser eliminada utilizando-se um resistor.
Como exemplo, o clculo do resistor R adequado para um LED difuso amarelo de
= 5 mm para uma corrente mdia de 7,5 mA dado por:
=

5,0 1,91
=
= 412 .

7,5 103

O resistor comercial mais prximo seria o de 430 .


A potncia do resistor pode ser calculada por:
= = 0,0075 5 = 0,0375 W .
Comercialmente, as potncias disponveis para resistores so 1/8 W, 1/4 W,
1/2 W, 1 W, 3 W, 5 W e 10 W. Nesse exemplo, um de 1/8 W (0,125 W) seria suficiente.
De um modo geral, a utilizao de um resistor de 470 e 1/4 W adequado para a
maioria dos LEDs difusos.
No prximo exemplo, um LED externo foi adicionado para ilustrar a utilizao da
sada digital do Lab_Uino.

Copyright Eduardo Ono.

49

Material necessrio:

LED difuso amarelo, verde ou vermelho.

Resistor de 470

Protoboard

Fios jumper M/F

17.2.2 Controle da luminosidade do LED no Lab_Uino

17.3 Leitura de Potencimetro


Um potencimetro um resistor varivel, ou seja, um componente eletrnico que
permite variar sua resistncia girando-se um eixo que movimenta um contato mvel
interno. Possui escala linear ou logartmica. O potencimetro mais utilizado em conjunto
com microcontroladores do tipo rotativo de 10 k.

Copyright Eduardo Ono.

50

(a)

(b)

A XXX ilustra outro modelo de potencimetro rotativo cuja distncia entre os


terminais permite sua conexo diretamente no Lab_Uino.

Copyright Eduardo Ono.

51

Listagem 17.1. Leitura de potencimetro.


#include <stdio.h>
#include "Lab_Uino_inc.c"
enum ACDs { ADC0=0, ADC1=1, ADC4=4, ADC5=5 };

// portas analgicas

int main()
{
int valorPot;
load_kit();
printf("\n\nLeitura de potenciometro\n\n");
printf("Pressione qualquer tecla para sair...\n\n");
while (1)
{
valorPot = read_adc(ACD1);
printf("Valor = %4d\r", valorPot);
if (kbhit()) break;
}
printf("\n");
stop_kit();
return 0;
}

17.4 Controle da Luminosidade de LED


As portas ADC0 e ADC1 possuem conversores A/C (analgico-digital) com
resoluo de 8-bit (0 a 255) e as portas ADC4 e ADC5 com resoluo de 10-bit (0 a 1023).

32u4

STROBE

Copyright Eduardo Ono.

LED

CN2

CN1

LCD1

Leonardo

LD9

11

DP9

LD10

12

DP10

LD1

DP11

52

Listagem 17.2. Controle da luminosidade de LED com potencimetro.


#include <stdio.h>
#include "Lab_Uino_inc.c"
int main()
{
int porta_adc = 4;
int valor;

// 0, 1 (8-bit); 4, 5 (10-bit)

load_kit();
printf("\n\nPrograma: LED PWM\n\n");
printf("Pressione qualquer tecla para sair...\n\n");
while (!kbhit())
{
valor = read_adc(porta_adc);
if (porta_adc == 0 || porta_adc == 1) // [0..255]
valor = valor * 2;
if (porta_adc == 4 || porta_adc == 5) // [0..1023]
valor = valor / 2;
if (valor < 0) valor = 0;
if (valor > 511) valor = 511;
pwm_a(valor);
printf("Valor = %4d\r", valor);
} // while
pwm_a(0);
stop_kit();
return 0;
}

17.5 Sensor de temperatura

Copyright Eduardo Ono.

53

Figura 17.1. (a) Sensor LM35 com os terminais Vcc e GRD dobrado s; (b) sensor inserido na
porta ADC1 do Lab_Uino.

(a)

(b)

17.6 Sensor de distncia ultrassnico


Ultrassom um sinal acstico cujas frequncias de 20 kHz a 400 kHz esto acima
da faixa de frequncia audvel para ouvido humano (20 Hz 20 kHz).
O mdulo ultrassnico HC-SR04 comumente utilizado em projetos
microcontrolados. Esse sensor pode medir distncias entre 2 cm a 4,5 m, com preciso de
3 mm.
Da esquerda para a direita, os pinos de conexo do HC-SR04 so: Vcc (5,0 V), Trig,
Echo e GRD.
Velocidade do som = 340 m/s.

17.7 Controle de servo motor

Copyright Eduardo Ono.

54

Tabela 17.2. Caractersticas de servo motores para pouca carga.

TowerPro SG90
Tenso de operao (V)

TowerPro MG90S
4,8 7,2
2,2 (4,8 V)
2,5 (6,0 V)

Torque (kg/cm)
Velocidada de operao
(sem carga)

0,11 s / 60 graus (4,8 V)


0,10 s / 60 graus (6,0 V)

Temperatura de
operao

-30 a 60 C

Largura de banda
Dimenses (mm)

23 x 12,2 x 29

Peso (g)

16

Comprimento do cabo

25 cm

Fonte: link
O servo motor possui trs terminais. As cores dos cabos variam de modelo para
modelo, porm, o vermelho sempre o positivo e o preto (ou marrom) sempre o terra
(GRD). A cor do cabo do sinal usualmente alaranjada ou amarela.
Ateno! Todos os componentes devem ser ligados com o Lab_Uino desconectado
da alimentao.

Dependendo do modelo utilizado, o servo motor pode apresentar um


comportamento anmalo, devido alta drenagem de energia, principalmente no incio do
movimento. Se a drenagem for alta, a placa pode entrar em reset.
Nesses casos, um capacitor de pelo menos 470 F deve ser adicionado entre a
alimentao e o terra.
Material necessrio:

Placa Lab_Uino

01 servo motor SG-90 ou MG-90S

03 fios jumper M/F

Copyright Eduardo Ono.

55

01 capacitor de 470 F (caso necessrio) e protoboard.

Copyright Eduardo Ono.

56

18 Apndice
18.1 Orwell Dev-C++
O Orwell Dev-C++ uma fork do Dev-C++, desenvolvido pela empresa Blodsheed.
H duas verses disponveis. Uma que utiliza o GCC e outra o TDM-GCC para a arquitetura
x64.

18.1.1 Procedimento para instalao do Orwell Dev-C++

Fazer o download do Orwell Dev-C++ verso 5.5.3. O nome do arquivo instalador


Dev-Cpp 5.5.3 TDM-GCC x64 4.7.1 Setup.exe.

Ao executar o instalador, selecione o idioma Portugus:

Na janela Contrato de Licena, clique no boto Aceito.

Na janela Escolha de Componentes selecione a opo Full (completa):

Copyright Eduardo Ono.

57

Na Janela Escolha do Local da Instalao, mantenha a pasta default (padro).

Copyright Eduardo Ono.

58

Copyright Eduardo Ono.

59

ndice Remissivo
&

Lgica ............................................................. 2

& (operador de endereo) ............................ 16

MCU ........................ Consulte microcontrolador


microcontrolador .......................................... 45
modulao por largura de pulso . Consulte PWM

Algoritmo ....................................................... 4
Algoritmos
ano bissexto ............................................. 26
ambiente de desenvolvimento integrado
................................................. Consulte IDE
argumento de uma funo............................ 15

N
Nmero primo............................................... 35
O
Operador de endereo & ............................... 16
Operadores Aritmticos
% 12
mdulo(%) ................................................ 12

B
busca sequencial .......................................... 40
C
Case sensitive ................................................. 7
Comentrio .................................................... 7
compilador ..................................................... 5

P
Palavras reservadas ........................................ 7
programa de computador ............................... 5
Proposio ...................................................... 2
Proposio composta ...................................... 2
Pulse Width Modulation ............. Consulte PWM
PWM ............................................................ 46

D
diodo emissor de luz ..................... Consulte LED
F
funo .......................................................... 15
Funes
scanf ........................................................ 15
Funes de Entrada
printf........................................................ 16
Funes trigonomtricas............................... 16

S
string ............................................................ 43
T
Tipo de dado ................................................... 8
U

Ultrassom ..................................................... 54

Hero, frmula de ..................... Consulte Heron


Heron, frmula de ........................................ 17
HID ............................................................... 48
Human Interface Device.................Consulte HID

V
Variveis
Declarao.................................................. 9
Declarao e definio ................................ 9
Definio (ou inicializao) .......................... 9
Nome.......................................................... 9
Varivel .......................................................... 8
vetor ............................................................. 38

I
IDE ................................................................. 5
Instruo ........................................................ 4
L
LED............................................................... 48
Light Emitting Diode ..................... Consulte LED
Linguagem de programao C ........................ 6

Copyright Eduardo Ono.

W
while ............................................................. 32

60

Copyright Eduardo Ono

61