sexta-feira, 15 de julho de 2016

Uso da biblioteca TVout com Arduino


INTRODUÇÃO

          Sejam bem vindos ao blog Arduinovação, este é nosso primeiro post e vamos falar da biblioteca TVout, a qual tem o objetivo de gerar caracteres na tela de um televisor via arduino. Os créditos de desenvolvimento da biblioteca são para Myles Metzer.


DESCRIÇÃO

          Com a biblioteca TVout podemos escrever e desenhar na tela de um televisor e emitir sons usando para isso uma placa arduino e conectando-a através das entradas de áudio e vídeo do televisor por um cabo RCA.


A seguinte tabela mostra os pinos que serão usados de acordo com o arduino escolhido.
 ARDUINO
SINCRONISMO 
VIDEO 
AUDIO 
 UNO
 9
11 
 MEGA
11 
29 
10 

A imagem abaixo ilustra o diagrama de ligação entre o arduino e o televisor.


Segue abaixo os diagramas para arduinos Uno e Mega respectivamente.





Funções disponíveis na biblioteca:

  • begin(mode) Inicia com resolução de tela padrão com 128 colunas e 96 linhas.
  • begin(mode, x, y) O programador especifica a resolução.
  • end() Limpa os dados de vídeo e desativa as interrupções.
  • force_vscale(sfactor) Força o número de vezes que a linha será exibida.
  • force_outstart(time) Força a saída de uma linha ativa.
  • force_linestart(line) Força a saída de uma linha.
  • set_vbi_hook(func) Define a função chamada uma vez por período de supressão vertical.
  • set_hbi_hook(func) Define a função chamada uma vez por período de supressão horizontal.
  • hres() Retorna a resolução horizontal.
  • vres() Retorna a resolução vertical.
  • char_line() Retorna o número de caracteres que se encaixam em uma linha de texto.
  • set_pixel(x, y, color) Define um pixel.
  • get_pixel(x, y) Obtém um pixel.
  • fill(color) Preenche a tela com uma cor, preto ou branco.
  • clear_screen() Limpa a tela.
  • invert() Inverte os dados na tela.
  • shift(distance, direction) Desloca a tela uma determinada distância em qualquer direção.
  • draw_line(x0, y0, x1, y1, color) Desenha uma linha de x0, y0 até x1, y1 informando sua cor.
  • draw_row(row, x0, x1, color) Desenha uma linha de x0 até x1 informando sua cor.
  • draw_column(column, y0, y1, color) Desenha uma coluna de y0 até y1 informando sua cor.
  • draw_rect(x, y, w, h, color, fillcolor) Desenha um retângulo em x0, y0 até w, h informando sua cor.
  • draw_rect(x, y, w, h, color) Desenha um retângulo em x0, y0 até w, h.
  • draw_circle(x, y, radius, color, fillcolor) Desenha um círculo com o raio, cor e preenchimento.
  • draw_circle(x, y, radius, color) Desenha um círculo com raio e cor.
  • bitmap(x, y, bmp, i, width, height) Desenha um bitmap na coordenada x, y.
  • print_char(x, y, c) Imprime um caractere na coordenada x, y.
  • set_cursor(x, y) Define a posição que o próximo caractere será impresso.
  • select_font(font) Define o tamanho da fonte a ser impressa.
  • print(x, y, text) Imprime uma letra, palavra ou texto sem quebra de linha na coordenada x, y.
  • println(x, y, text) Imprime uma letra, palavra ou texto com quebra de linha na coordenada x, y.
  • printPGM() Imprime a partir da memória de programa.
  • tone(frequency) Reproduz um som na frequência informada.
  • tone(frequency, duration) Reproduz um som na frequência e duração (ms) informadas.
  • noTone() Para todos os sons.


Vejamos alguns exemplos, este código escreve na tela do televisor:
#include <TVout.h>
#include <fontALL.h>

TVout TV;

void setup() {
    TV.begin(_PAL, 118, 96);
}

void loop() {
    TV.clear_screen();

    TV.select_font(font8x8);
    TV.println(10, 10, "ARDUINOVACAO");
    TV.draw_line(10, 20, 105, 20, WHITE);

    TV.select_font(font4x6);
    TV.println(10, 40, "Fonte 4x6");

    TV.select_font(font6x8);
    TV.println(10, 60, "Fonte 6x8");

    TV.select_font(font8x8);
    TV.println(10, 80, "Fonte 8x8");

    delay(25);
}




Podemos também criar desenhos, animações, sons, etc com TVout:
#include <TVout.h>
#include <fontALL.h>

TVout TV;

// Define largura (qtd colunas) e altura (qtd linhas) da tela
byte largura = 120;
byte altura = 96;

void setup() {
    // Inicializa no sistema PAL de tv
    TV.begin(_PAL, largura, altura);

    // Define o tamanho da fonte
    TV.select_font(font6x8);
}

void loop() {
    // Limpa a tela
    TV.clear_screen();

    // Desenha o retângulo da bandeira
    TV.draw_rect(0, 0, largura - 1, altura - 1, WHITE);
    
    // Desenha o losango da bandeira
    TV.draw_line(0, altura / 2, largura / 2, 0, WHITE);
    TV.draw_line(0, altura / 2, largura / 2, altura, WHITE);
    TV.draw_line(largura / 2, 0, largura, altura / 2, WHITE);
    TV.draw_line(largura / 2, altura, largura, altura / 2, WHITE);

    // Desenha o círculo da bandeira
    TV.draw_circle(largura / 2, altura / 2, 25, WHITE);
    
    // Imprime BRASIL no centro do círculo da bandeira
    TV.print(43, 45, "BRASIL");

    // Atraso para evitar intermitência da tela
    delay(25);
}



LINKS ÚTEIS

http://playground.arduino.cc/Main/TVout



CÓDIGO FONTE

Escrevendo texto com TVout  http://www.dropbox.com/s/u9jx9tq44phxsw2/Arduinovacao%20Texto%20TVout%20Post1.ino?dl=0

Criando gráficos com TVout  https://www.dropbox.com/s/0k7p6f8knwpzcyp/Arduinovacao%20TVout%20Bandeira%20Brasil%20Post1.ino?dl=0

Biblioteca TVout - Link 1  https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/arduino-tvout/TVoutBeta1.zip

Biblioteca TVout - Link 2  https://github.com/Avamander/arduino-tvout

14 comentários:

  1. Legal...eu preciso fazer um projeto com Arduíno... Acender e apagar uma lâmpada...
    Qual Arduíno uso..?
    A alguma coisa além do Arduíno e a programação... Valeu

    ResponderExcluir
  2. Haaaaaaa...esqueci ..
    É com comando de voz..kkkkkkkkkk...valeuuu

    ResponderExcluir
    Respostas
    1. Em breve teremos material sobre comando de voz com arduino!

      Excluir
  3. Tem algum material sobre uso de arduino como inversor de tensão? E porque as portas do uno e mega precisam ser diferentes? De qualquer forma ficou ótimo a explicação vlw

    ResponderExcluir
    Respostas
    1. No momento não tenho material sobre inversor de tensão com arduino, mas deixarei em minha lista de ideias para o blog, obrigado!

      Sobre as portas serem diferentes para UNO e MEGA, é porque o desenvolvedor da biblioteca TVout definiu isso internamente no código da mesma.

      Excluir
  4. Muito bom o conteudo. Vai me ajudar muito nos projetos da faculdade😄👍

    ResponderExcluir
  5. Muito bom o material do blog. Parabens 😄👍

    ResponderExcluir
  6. Parabéns pelo blog, muito úteis as informações. Os exemplos originais da biblioteca TVOut não tinham funcionado para mim, mas os exemplos aqui do blog funcionaram.

    ResponderExcluir
  7. Boa tarde colega, poderia me passar uma dica, preciso printar na tela do TV.out o valor de uma variavel, como por exemplo de um contador, a variavel K=501 , TV.print(20,45,K);

    ResponderExcluir
  8. Bom dia, pq a imagem fica preto e branco? Existe alguma lib pra arduíno com RCA que permita imagens coloridas?

    ResponderExcluir

Postagem mais recente Página inicial