Oficina de Programa¸ c˜ ao utilizando a plataforma Arduino
Bianca Alessandra Visineski Alberton [email protected]
Paulo Nesello K¨unzel kruger [email protected]
Programa de Educa¸c˜ao Tutorial Computando Culturas em Equidade Departamento Acadˆemico de Inform´atica
UTFPR
06 de outubro de 2012
O que h´a de novo?
Fun¸c˜oes da Biblioteca Arduino
ramdomSeed(analogRead(0)); - Determina valores aleat´orios a partir de um valor inicial definido pela entrada anal´ogica.
random(valor maximo); - Gera um valor aleat´orio dentro dos valores deramdomSeed(), ate um valor m´aximo definido por parˆametro. random(inicio,fim); - Gera valores aleat´orios entre os valores enviados por parˆametro.
constrain(RGB2[x], 0, 255); - Garante que o valor dado seja n˜ao negativo e esteja dentro da faixa escolhida.
O que h´a de novo?
Fun¸c˜oes da Biblioteca Arduino
ramdomSeed(analogRead(0)); - Determina valores aleat´orios a partir de um valor inicial definido pela entrada anal´ogica.
random(valor maximo); - Gera um valor aleat´orio dentro dos valores deramdomSeed(), ate um valor m´aximo definido por parˆametro. random(inicio,fim); - Gera valores aleat´orios entre os valores enviados por parˆametro.
constrain(RGB2[x], 0, 255); - Garante que o valor dado seja n˜ao negativo e esteja dentro da faixa escolhida.
O que h´a de novo?
Fun¸c˜oes da Biblioteca Arduino
ramdomSeed(analogRead(0)); - Determina valores aleat´orios a partir de um valor inicial definido pela entrada anal´ogica.
random(valor maximo); - Gera um valor aleat´orio dentro dos valores deramdomSeed(), ate um valor m´aximo definido por parˆametro. random(inicio,fim); - Gera valores aleat´orios entre os valores enviados por parˆametro.
constrain(RGB2[x], 0, 255); - Garante que o valor dado seja n˜ao negativo e esteja dentro da faixa escolhida.
O que h´a de novo?
Fun¸c˜oes da Biblioteca Arduino
ramdomSeed(analogRead(0)); - Determina valores aleat´orios a partir de um valor inicial definido pela entrada anal´ogica.
random(valor maximo); - Gera um valor aleat´orio dentro dos valores deramdomSeed(), ate um valor m´aximo definido por parˆametro. random(inicio,fim); - Gera valores aleat´orios entre os valores enviados por parˆametro.
constrain(RGB2[x], 0, 255); - Garante que o valor dado seja n˜ao negativo e esteja dentro da faixa escolhida.
O que h´a de novo?
Fun¸c˜oes da Biblioteca Arduino
ramdomSeed(analogRead(0)); - Determina valores aleat´orios a partir de um valor inicial definido pela entrada anal´ogica.
random(valor maximo); - Gera um valor aleat´orio dentro dos valores deramdomSeed(), ate um valor m´aximo definido por parˆametro.
random(inicio,fim); - Gera valores aleat´orios entre os valores enviados por parˆametro.
constrain(RGB2[x], 0, 255); - Garante que o valor dado seja n˜ao negativo e esteja dentro da faixa escolhida.
O que h´a de novo?
Fun¸c˜oes da Biblioteca Arduino
ramdomSeed(analogRead(0)); - Determina valores aleat´orios a partir de um valor inicial definido pela entrada anal´ogica.
random(valor maximo); - Gera um valor aleat´orio dentro dos valores deramdomSeed(), ate um valor m´aximo definido por parˆametro.
random(inicio,fim); - Gera valores aleat´orios entre os valores enviados por parˆametro.
constrain(RGB2[x], 0, 255); - Garante que o valor dado seja n˜ao negativo e esteja dentro da faixa escolhida.
O que h´a de novo?
Fun¸c˜oes da Biblioteca Arduino
ramdomSeed(analogRead(0)); - Determina valores aleat´orios a partir de um valor inicial definido pela entrada anal´ogica.
random(valor maximo); - Gera um valor aleat´orio dentro dos valores deramdomSeed(), ate um valor m´aximo definido por parˆametro.
random(inicio,fim); - Gera valores aleat´orios entre os valores enviados por parˆametro.
constrain(RGB2[x], 0, 255); - Garante que o valor dado seja n˜ao negativo e esteja dentro da faixa escolhida.
Primeiramente, como usar as cores vermelho, verde e azul para conseguir outras cores?
Tabela : Cores b´asicas com combina¸c˜ao RGB.
RED GREEN BLUE Cor
255 0 0 Vermelho
0 255 0 Verde
0 0 255 Azul
255 255 0 Amarelo
0 255 255 Azul Piscina (Ciano)
255 0 255 Magenta
255 255 255 Branco
C´ odigo I
// P r o j e t o 6 - L i d a n d o com c o r e s
f l o a t R G B 1 [ 3 ] ;
f l o a t R G B 2 [ 3 ] ;
f l o a t INC [ 3 ] ;
int red , green , b l u e ;
int R e d P i n = 11;
int G r e e n P i n = 10;
int B l u e P i n = 9;
v o i d s e t u p () {
r a n d o m S e e d ( a n a l o g R e a d (0) ) ;
R G B 1 [0] = 0;
R G B 1 [1] = 0;
R G B 1 [2] = 0;
R G B 2 [0] = r a n d o m ( 2 5 6 ) ;
R G B 2 [1] = r a n d o m ( 2 5 6 ) ;
C´ odigo II
R G B 2 [2] = r a n d o m ( 2 5 6 ) ;
}
v o i d l o o p () {
r a n d o m S e e d ( a n a l o g R e a d (0) ) ;
for ( int x =0; x <3; x ++) {
INC [ x ] = ( R G B 1 [ x ] - R G B 2 [ x ]) / 2 5 6 ;
}
for ( int x =0; x < 2 5 6 ; x ++) {
red = int ( R G B 1 [ 0 ] ) ;
g r e e n = int ( R G B1 [ 1 ] ) ;
b l u e = int ( R G B 1 [ 2 ] ) ;
a n a l o g W r i t e ( RedPin , red ) ;
a n a l o g W r i t e ( G r e e n P i n , g r e e n ) ;
a n a l o g W r i t e ( BluePin , b l u e ) ;
d e l a y ( 1 0 0 ) ;
C´ odigo III
R G B 1 [0] -= INC [ 0 ] ;
R G B 1 [1] -= INC [ 1 ] ;
R G B 1 [2] -= INC [ 2 ] ;
}
for ( int x =0; x <3; x ++) {
R G B 2 [ x ] = r a n d o m ( 5 5 6 ) -300;
R G B 2 [ x ] = c o n s t r a i n ( R G B 2 [ x ] , 0 , 2 5 5 ) ;
d e l a y ( 1 0 0 0 ) ;
}
}
Projeto 7.1 - Lumin´ aria de humor com entrada serial
O controle agora ser´a feito pelo Serial monitor.
Figura : Tela inicial.
O que h´a de novo?
Vari´aveis
char buffer[18]; - Strings ou palavras Estruturas de programa¸c˜ao
while(condicao) - Loop ”parente”do for char* parameter; - Ponteiros
O que h´a de novo?
Vari´aveis
char buffer[18]; - Strings ou palavras
Estruturas de programa¸c˜ao
while(condicao) - Loop ”parente”do for char* parameter; - Ponteiros
O que h´a de novo?
Vari´aveis
char buffer[18]; - Strings ou palavras Estruturas de programa¸c˜ao
while(condicao) - Loop ”parente”do for
char* parameter; - Ponteiros
O que h´a de novo?
Vari´aveis
char buffer[18]; - Strings ou palavras Estruturas de programa¸c˜ao
while(condicao) - Loop ”parente”do for char* parameter; - Ponteiros
Fun¸c˜oes da Biblioteca Arduino
Serial.begin(9600); - Inicia uma comunica¸c˜ao serial com o computador por meio da porta USB.
Serial.flush(); - ”Limpa”tudo o que estiver na comunica¸c˜ao serial Serial.available(); - Verifica se quaisquer caracteres tenham sido enviados pela comunica¸c˜ao serial.
Serial.read(); - Lˆe os valores da entrada serial.
Serial.print(dados); - Envia valores pela porta serial, que s˜ao exibidos no monitor
Serial.println(dados); - Idem aoSerial.print(dados);, por´em pula linha quando chega no final do texto.
strtok (data, “ ,”); - Separa uma string de acordo com termos-chave (Nesse caso ´e a v´ırgula)
Fun¸c˜oes da Biblioteca Arduino
Serial.begin(9600); - Inicia uma comunica¸c˜ao serial com o computador por meio da porta USB.
Serial.flush(); - ”Limpa”tudo o que estiver na comunica¸c˜ao serial Serial.available(); - Verifica se quaisquer caracteres tenham sido enviados pela comunica¸c˜ao serial.
Serial.read(); - Lˆe os valores da entrada serial.
Serial.print(dados); - Envia valores pela porta serial, que s˜ao exibidos no monitor
Serial.println(dados); - Idem aoSerial.print(dados);, por´em pula linha quando chega no final do texto.
strtok (data, “ ,”); - Separa uma string de acordo com termos-chave (Nesse caso ´e a v´ırgula)
Fun¸c˜oes da Biblioteca Arduino
Serial.begin(9600); - Inicia uma comunica¸c˜ao serial com o computador por meio da porta USB.
Serial.flush(); - ”Limpa”tudo o que estiver na comunica¸c˜ao serial
Serial.available(); - Verifica se quaisquer caracteres tenham sido enviados pela comunica¸c˜ao serial.
Serial.read(); - Lˆe os valores da entrada serial.
Serial.print(dados); - Envia valores pela porta serial, que s˜ao exibidos no monitor
Serial.println(dados); - Idem aoSerial.print(dados);, por´em pula linha quando chega no final do texto.
strtok (data, “ ,”); - Separa uma string de acordo com termos-chave (Nesse caso ´e a v´ırgula)
Fun¸c˜oes da Biblioteca Arduino
Serial.begin(9600); - Inicia uma comunica¸c˜ao serial com o computador por meio da porta USB.
Serial.flush(); - ”Limpa”tudo o que estiver na comunica¸c˜ao serial Serial.available(); - Verifica se quaisquer caracteres tenham sido enviados pela comunica¸c˜ao serial.
Serial.read(); - Lˆe os valores da entrada serial.
Serial.print(dados); - Envia valores pela porta serial, que s˜ao exibidos no monitor
Serial.println(dados); - Idem aoSerial.print(dados);, por´em pula linha quando chega no final do texto.
strtok (data, “ ,”); - Separa uma string de acordo com termos-chave (Nesse caso ´e a v´ırgula)
Fun¸c˜oes da Biblioteca Arduino
Serial.begin(9600); - Inicia uma comunica¸c˜ao serial com o computador por meio da porta USB.
Serial.flush(); - ”Limpa”tudo o que estiver na comunica¸c˜ao serial Serial.available(); - Verifica se quaisquer caracteres tenham sido enviados pela comunica¸c˜ao serial.
Serial.read(); - Lˆe os valores da entrada serial.
Serial.print(dados); - Envia valores pela porta serial, que s˜ao exibidos no monitor
Serial.println(dados); - Idem aoSerial.print(dados);, por´em pula linha quando chega no final do texto.
strtok (data, “ ,”); - Separa uma string de acordo com termos-chave (Nesse caso ´e a v´ırgula)
Fun¸c˜oes da Biblioteca Arduino
Serial.begin(9600); - Inicia uma comunica¸c˜ao serial com o computador por meio da porta USB.
Serial.flush(); - ”Limpa”tudo o que estiver na comunica¸c˜ao serial Serial.available(); - Verifica se quaisquer caracteres tenham sido enviados pela comunica¸c˜ao serial.
Serial.read(); - Lˆe os valores da entrada serial.
Serial.print(dados); - Envia valores pela porta serial, que s˜ao exibidos no monitor
Serial.println(dados); - Idem aoSerial.print(dados);, por´em pula linha quando chega no final do texto.
strtok (data, “ ,”); - Separa uma string de acordo com termos-chave (Nesse caso ´e a v´ırgula)
Fun¸c˜oes da Biblioteca Arduino
Serial.begin(9600); - Inicia uma comunica¸c˜ao serial com o computador por meio da porta USB.
Serial.flush(); - ”Limpa”tudo o que estiver na comunica¸c˜ao serial Serial.available(); - Verifica se quaisquer caracteres tenham sido enviados pela comunica¸c˜ao serial.
Serial.read(); - Lˆe os valores da entrada serial.
Serial.print(dados); - Envia valores pela porta serial, que s˜ao exibidos no monitor
Serial.println(dados); - Idem aoSerial.print(dados);, por´em pula linha quando chega no final do texto.
strtok (data, “ ,”); - Separa uma string de acordo com termos-chave (Nesse caso ´e a v´ırgula)
Fun¸c˜oes da Biblioteca Arduino
Serial.begin(9600); - Inicia uma comunica¸c˜ao serial com o computador por meio da porta USB.
Serial.flush(); - ”Limpa”tudo o que estiver na comunica¸c˜ao serial Serial.available(); - Verifica se quaisquer caracteres tenham sido enviados pela comunica¸c˜ao serial.
Serial.read(); - Lˆe os valores da entrada serial.
Serial.print(dados); - Envia valores pela porta serial, que s˜ao exibidos no monitor
Serial.println(dados); - Idem aoSerial.print(dados);, por´em pula linha quando chega no final do texto.
strtok (data, “ ,”); - Separa uma string de acordo com termos-chave (Nesse caso ´e a v´ırgula)
C´ odigo I
// L u m i n a r i a RGB c o n t r o l a d a por e n t r a d a s e r i a l
c h a r b u f f e r [ 1 8 ] ;
int red , green , b l u e ;
int R e d P i n = 11;
int G r e e n P i n = 10;
int B l u e P i n = 9;
v o i d s e t u p () {
S e r i a l . b e g i n ( 9 6 0 0 ) ;
S e r i a l . f l u s h () ;
p i n M o d e ( RedPin , O U T P U T ) ;
p i n M o d e ( G r e e n P i n , O U T P U T ) ;
p i n M o d e ( BluePin , O U T P U T ) ;
}
v o i d l o o p () {
if ( S e r i a l . a v a i l a b l e () > 0) {
C´ odigo II
int i n d e x =0;
d e l a y ( 1 0 0 ) ;
int n u m C h a r = S e r i a l . a v a i l a b l e () ;
if ( numChar > 1 5 ) {
n u m C h a r = 1 5 ;
}
w h i l e ( numChar - -) {
b u f f e r [ i n d e x ++] = S e r i a l . r e a d () ;
}
s p l i t S t r i n g ( b u f f e r ) ;
}
}
v o i d s p l i t S t r i n g ( c h a r * d a t a ) {
S e r i a l . p r i n t ( ‘ ‘ D a t a e n t e r e d : ’ ’ ) ;
S e r i a l . p r i n t l n ( d a t a ) ;
c h a r * p a r a m e t e r ;
p a r a m e t e r = s t r t o k ( data , ‘ ‘ , ’ ’ ) ;
C´ odigo III
w h i l e ( p a r a m e t e r != N U L L ) {
s e t L E D ( p a r a m e t e r ) ;
p a r a m e t e r = s t r t o k ( NULL , ‘ ‘ , ’ ’ ) ;
}
for ( int x =0; x < 1 6 ; x ++) { // l i m p a o b u f f e r e o t e x t o do a r r a y b u f f e r
b u f f e r [ x ]= ’ \0 ’ ;
}
S e r i a l . f l u s h () ;
}
v o i d s e t L E D ( c h a r * d a t a ) {
if (( d a t a [0] == ’ r ’ ) || ( d a t a [0] == ’ R ’ ) ) {
int Ans = s t r t o l ( d a t a +1 , NULL , 10) ;
Ans = c o n s t r a i n ( Ans ,0 ,255) ;
a n a l o g W r i t e ( RedPin , Ans ) ;
S e r i a l . p r i n t ( ‘ ‘ Red is set to : ’ ’ ) ;
C´ odigo IV
S e r i a l . p r i n t l n ( Ans ) ;
}
if (( d a t a [0] == ’ g ’ ) || ( d a t a [0] == ’ G ’ ) ) {
int Ans = s t r t o l ( d a t a +1 , NULL , 10) ;
Ans = c o n s t r a i n ( Ans ,0 ,255) ;
a n a l o g W r i t e ( G r e e n P i n , Ans ) ;
S e r i a l . p r i n t ( ‘ ‘ G r e e n is set to : ’ ’ ) ;
S e r i a l . p r i n t l n ( Ans ) ;
}
if (( d a t a [0] == ’ b ’ ) || ( d a t a [0] == ’ B ’ ) ) {
int Ans = s t r t o l ( d a t a +1 , NULL , 10) ;
Ans = c o n s t r a i n ( Ans ,0 ,255) ;
a n a l o g W r i t e ( BluePin , Ans ) ;
S e r i a l . p r i n t ( ‘ ‘ B l u e is set to : ’ ’ ) ;
S e r i a l . p r i n t l n ( Ans ) ;
}
}
Exerc´ıcio
Para um circuito com 2 LED’s vermelhos e e 2 LED’s verdes, fa¸ca um programa que quando o usu´ario digitar ”VERDE”no Serial Monitor os LED’s verdes ascendam e quando o usu´ario digitar ”VERMELHO”os dois LED’s ascendam.
OBS: os LED’s vermelhos e verdes nunca podem estar acesos ao mesmo tempo.