segunda-feira, 16 de janeiro de 2017

Display 2.4" TFT LCD Touch Screen - Arduino Uno

Depois de um tempinho sem postar, aproveitei as férias para atualizar o blog, e hoje trago um tutorial para resolver os problemas de quem não conseguiu usar satisfatoriamente esse display, que apesar de odiado por muitos, tem funcionado muito bem aqui nos testes.

Antes de começar, vou citar alguns detalhes:

Baixe as bibliotecas:
https://github.com/marcelocella204/Display-2.4-TFT-LCD-Touch-Screen

Modelo utilizado:


Vale a pena comprar? Sim. Pelo menos por enquanto está bem estável o touch screen,  e apenas para exibir informações simples, como texto e barras, melhor ainda. Eu diria que pra utilizar num produto final, que seja vendido, não é interessante usar o touch, pois ele não fica "perfeito", mas para estudo e protótipos é nota 10.

Para uso do touch recomendo o toque com a ponta do dedos, mas pra calibrar recomento o uso da caneta stylus que acompanha o display.

Alguns tutoriais recomendam o uso de material isolante entre o conector USB do arduino UNO e o shield, pois pode haver curto, o meu não foi preciso, verifique com cuidado se é o seu caso.

Rotação da tela: existem 4 direções ( de 0 a 3), caso você mude a rotação, será necessário adaptar o código. No exemplo estou usando a posição 1.
No caso do touch, é possível fazer uma adaptação automática da rotação usando a função map, porém, para deixar o touch mais simples e preciso, não utilizei essa função, sendo assim será necessário adaptação do código.


 Vamos ao primeiro código de teste, apenas exibindo informações básicas:


// Code provided by Smoke And Wires
// http://www.smokeandwires.co.nz
// This code has been taken from the Adafruit TFT Library and modified
// by us for use with our TFT Shields / Modules
// For original code / licensing please refer to
// https://github.com/adafruit/TFTLCD-Library
//código adaptado e comentado por Marcelo Cella para o blog http://viciadosemarduino.blogspot.com.br/ com o apoio de
//http://sttamp.com/loja
#include <Adafruit_GFX.h> // Core graphics library
#include "SWTFT.h" // Hardware-specific library
// The control pins for the LCD can be assigned to any digital or
// analog pins...but we'll use the analog pins as this allows us to
// double up the pins with the touch screen (see the TFT paint example).
// #define LCD_CS A3 // Chip Select goes to Analog 3
// #define LCD_CD A2 // Command/Data goes to Analog 2
// #define LCD_WR A1 // LCD Write goes to Analog 1
// #define LCD_RD A0 // LCD Read goes to Analog 0
// #define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
// When using the BREAKOUT BOARD only, use these 8 data lines to the LCD:
// For the Arduino Uno, Duemilanove, Diecimila, etc.:
// D0 connects to digital pin 8 (Notice these are
// D1 connects to digital pin 9 NOT in order!)
// D2 connects to digital pin 2
// D3 connects to digital pin 3
// D4 connects to digital pin 4
// D5 connects to digital pin 5
// D6 connects to digital pin 6
// D7 connects to digital pin 7
// For the Arduino Mega, use digital pins 22 through 29
// (on the 2-row header at the end of the board).
// Assign human-readable names to some common 16-bit color values:
#define BLACK 0x0000 //use este site para gerar mais cores http://www.barth-dev.de/online/rgb565-color-picker/
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define PINK 0xE0F9
#define GREY 0x630C
SWTFT tft;
// If using the shield, all control and data lines are fixed, and
// a simpler declaration can optionally be used:
// SWTFT tft;
void setup(void) {
Serial.begin(9600); // inicial comunicação serial
Serial.println(F("TFT LCD test"));
tft.reset(); // reinicia o display
uint16_t identifier = tft.readID(); // identificador do chip do seu display
Serial.print(F("LCD driver chip: "));
Serial.println(identifier, HEX);
tft.begin(identifier);
Serial.println(F("Benchmark Time (microseconds)"));
Serial.print(F("Screen fill "));
delay(500);
Serial.println(F("Done!"));
delay(500);
tft.setRotation(1); // seleciona rotação 1 (porta usb voltada para a esquerda)
tft.fillScreen(BLUE); // preenche a tela inteira com uma cor
tft.drawRect(0, 0, 320, 240, YELLOW); // desnha uma borda na tela
tft.drawRect(1, 1, 318, 238, YELLOW); // desenha mais uma linha de borda
tft.drawRect(10, 135, 300, 15, YELLOW); //desenha a barra em branco/estrutura: Coluna inicial, linha inicial, comprimento, altura
tft.setCursor(30, 30); //define ponto inicial para o próximo texto/ estrutura: coluna e linha, 320x240 max
tft.setTextColor(WHITE); // define cor para o próximo texto
tft.setTextSize(3);// define o tamanho para o próximo texto
tft.println("Hello World!");
tft.setTextSize(2);
tft.setCursor(10, 190);
tft.print(F("LCD driver chip: "));
tft.println(identifier, HEX);
}
void loop(void) {
for (int x = 0; x < 300; x++) { // exemplo de exibição de números
tft.setCursor(30, 100); // primeiro exibimos o "texto", fundo azul com letras verdes
tft.setTextColor(GREEN);
tft.setTextSize(3);
tft.println(x);
delay (200);
tft.setCursor(30, 100); // depois exibimos novamente com "texto" e fundo azul
tft.setTextColor(BLUE); // ou seja, exibimos e apagamos para poder fazer o renew de forma simples
tft.setTextSize(3);
tft.println(x);
tft.drawRect(10, 135, x, 15, YELLOW); // preenche a barra de acordo com o valor de x
}
tft.fillRect(11, 136, 298, 13, BLUE); // apagamos a barra para o próximo loop do for
}
Resultado:



Teste de touch screen:

// Code provided by Smoke And Wires
// http://www.smokeandwires.co.nz
// This code has been taken from the Adafruit TFT Library and modified
// by us for use with our TFT Shields / Modules
// For original code / licensing please refer to
// https://github.com/adafruit/TFTLCD-Library
//código adaptado e comentado por Marcelo Cella para o blog http://viciadosemarduino.blogspot.com.br/ com o apoio de
//http://sttamp.com/loja
#include <Adafruit_GFX.h> // Core graphics library
#include "SWTFT.h" // Hardware-specific library
#include "TouchScreen.h"
#define YP A2 // must be an analog pin, use "An" notation!
#define XM A3 // must be an analog pin, use "An" notation!
#define YM 8 // can be a digital pin
#define XP 9 // can be a digital pin
// For better pressure precision, we need to know the resistance
// between X+ and X- Use any multimeter to read it
// For the one we're using, its 300 ohms across the X plate
// No meu caso, o resistor de 200 ohms funciona melhor
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 200);
// The control pins for the LCD can be assigned to any digital or
// analog pins...but we'll use the analog pins as this allows us to
// double up the pins with the touch screen (see the TFT paint example).
// #define LCD_CS A3 // Chip Select goes to Analog 3
// #define LCD_CD A2 // Command/Data goes to Analog 2
// #define LCD_WR A1 // LCD Write goes to Analog 1
// #define LCD_RD A0 // LCD Read goes to Analog 0
// #define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
// When using the BREAKOUT BOARD only, use these 8 data lines to the LCD:
// For the Arduino Uno, Duemilanove, Diecimila, etc.:
// D0 connects to digital pin 8 (Notice these are
// D1 connects to digital pin 9 NOT in order!)
// D2 connects to digital pin 2
// D3 connects to digital pin 3
// D4 connects to digital pin 4
// D5 connects to digital pin 5
// D6 connects to digital pin 6
// D7 connects to digital pin 7
// For the Arduino Mega, use digital pins 22 through 29
// (on the 2-row header at the end of the board).
// Assign human-readable names to some common 16-bit color values:
#define BLACK 0x0000 //use este site para gerar mais cores http://www.barth-dev.de/online/rgb565-color-picker/
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define PINK 0xE0F9
#define GREY 0x630C
SWTFT tft;
int button_1 = 1; // criamos 3 botoes na tela inicial
int button_2 = 1;
int button_3 = 1;
int ledteste = 13; // criamos uma saída para teste (led onboard do arduino)
void setup(void) {
pinMode (ledteste, OUTPUT);
Serial.begin(9600);
Serial.println(F("TFT LCD test")); // fazemos novamente a verificação do CI
tft.reset();
uint16_t identifier = tft.readID();
Serial.print(F("LCD driver chip: "));
Serial.println(identifier, HEX);
tft.begin(identifier);
Serial.println(F("Benchmark Time (microseconds)"));
Serial.print(F("Screen fill "));
delay(50);
Serial.println(F("Done!"));
delay(50);
tft.setRotation(1);
tft.fillScreen(GREY);
tft.drawRect(15, 15, 70, 70, WHITE);// Coluna inicial, linha inicial, comprimento, altura
tft.drawRect(115, 15, 70, 70, WHITE);// Coluna inicial, linha inicial, comprimento, altura
tft.drawRect(215, 15, 70, 70, WHITE);// Coluna inicial, linha inicial, comprimento, altura
tft.setTextColor(YELLOW);
tft.setTextSize(3);
tft.setCursor(42, 42);//COLUNA, LINHA
tft.println("1");
tft.setCursor(145, 42);//COLUNA, LINHA
tft.println("2");
tft.setCursor(240, 42);//COLUNA, LINHA
tft.println("3");
}
void loop(void) {
TSPoint p = ts.getPoint(); //função que verifica posição do toque
pinMode(XM, OUTPUT); // define x+, x-, y+ e y- (conextores do touch)
digitalWrite(XM, LOW);
pinMode(YP, OUTPUT);
digitalWrite(YP, HIGH);
pinMode(YM, OUTPUT);
digitalWrite(YM, LOW);
pinMode(XP, OUTPUT);
digitalWrite(XP, HIGH);
// analisa se houve pressão suficiente para ser considerado um toque
if (p.z > ts.pressureThreshhold) { // we have some minimum pressure we consider 'valid'// pressure of 0 means no pressing!
Serial.print("X = ");
Serial.print(p.x);
Serial.print("\tY = ");
Serial.print(p.y);
Serial.print("\tPressure = ");
Serial.println(p.z);
delay (50);
if (p.x >= 755 && p.x <= 940 && p.y <= 460) { // analisa se a area tocada corresponde ao boatão 1
button_1 ++; // botão 1 recebe mais um
button_1 = button_1 % 2; // testa se botão 1 é impar ou par
if (!button_1) {// se for diferente de 0
button_1_on(); // botão 1 = on
digitalWrite (ledteste, HIGH); // ascende led onboard
}
else {// se for = 0
button_1_off(); // boatão 1 desliga
digitalWrite (ledteste, LOW);
}
}
if (p.x >= 530 && p.x <= 700 && p.y <= 460) {// analisa se a area tocada corresponde ao boatão 2
button_2 ++;
button_2 = button_2 % 2;
if (!button_2) {
button_2_on();
//insira aqui as açoes para o botão 2
}
else {
button_2_off();
//insira aqui as açoes para o botão 2
}
}
if (p.x >= 285 && p.x <= 470 && p.y <= 460) { // analisa se a area tocada corresponde ao boatão 3
button_3 ++;
button_3 = button_3 % 2;
if (!button_3) {
button_3_on();
//insira aqui as açoes para o botão 3
}
else {
button_3_off();
//insira aqui as açoes para o botão 3
}
}
tft.fillRect(255, 175, 50, 50, GREY);// primeiro "apagamos" a região onde serão exibidos ultimos toques
tft.setTextColor(YELLOW);
tft.setTextSize(2);
tft.setCursor(10, 175);//COLUNA, LINHA
tft.println ("Last Touch Point x:");
tft.setCursor(255, 175);//COLUNA, LINHA
tft.println(p.x); // reexibindo posição do ultimo toque em x
tft.setCursor(10, 202);//COLUNA, LINHA
tft.println ("Last Touch Point y:");
tft.setCursor(255, 202);//COLUNA, LINHA
tft.println(p.y); // reexibindo posição do ultimo toque em y
}
}
void button_1_on () { //criamos uma função que "ascende" o botão 1
tft.fillRect(15, 15, 70, 70, GREEN);// desenha botão verde escrito on
tft.setTextColor(BLACK);
tft.setTextSize(3);
tft.setCursor(36, 42);
tft.println("ON");
return;
}
void button_1_off () {//criamos uma função que "apaga" o botão 1
tft.fillRect(15, 15, 70, 70, GREY);// apaga o verde
tft.drawRect(15, 15, 70, 70, WHITE);// desenha botão preto com bordas brancas (off)
tft.setTextColor(GREEN);
tft.setTextSize(3);
tft.setCursor(42, 42);
tft.println("1");
return;
}
void button_2_on () {
tft.fillRect(115, 15, 70, 70, GREEN);// Coluna inicial, linha inicial, comprimento, altura
tft.setTextColor(BLACK);
tft.setTextSize(3);
tft.setCursor(136, 42);
tft.println("ON");
return;
}
void button_2_off () {
tft.fillRect(115, 15, 70, 70, GREY);// Coluna inicial, linha inicial, comprimento, altura
tft.drawRect(115, 15, 70, 70, WHITE);// Coluna inicial, linha inicial, comprimento, altura
tft.setTextColor(YELLOW);
tft.setTextSize(3);
tft.setCursor(140, 42);
tft.println("2");
return;
}
void button_3_on () {
tft.fillRect(215, 15, 70, 70, GREEN);// Coluna inicial, linha inicial, comprimento, altura
tft.setTextColor(BLACK);
tft.setTextSize(3);
tft.setCursor(236, 42);
tft.println("ON");
return;
}
void button_3_off () {
tft.fillRect(215, 15, 70, 70, GREY);// Coluna inicial, linha inicial, comprimento, altura
tft.drawRect(215, 15, 70, 70, WHITE);// Coluna inicial, linha inicial, comprimento, altura
tft.setTextColor(YELLOW);
tft.setTextSize(3);
tft.setCursor(240, 42);
tft.println("3");
return;
}
resultado:

Teste de performance:

quarta-feira, 19 de agosto de 2015

RFID com Arduino

Olá viciados, hoje ensinarei vocês a usar o modulo RFID-RC522, e como usar mais do que um chaveiro ou cartão. Ouvi muita gente que esta iniciando pedindo ajuda de como cadastrar mais do que um chaveiro, neste tutorial eu cadastrei 4 chaveiros e um cartão.
qualquer duvida, só deixar nos comentários abaixo, espero poder ajudar vocês galerinha.

Lembrando que este modulo é um oferecimento do nosso amigo Gustavo, da loja Sttamp.com.

Então vamos la, primeiramente você vai precisar dos seguintes materiais:

1 x Arduíno;
1 x Modulo RFID-RC522;
Jumpers.

Se você já tem estes itens, vai precisar apenas montar nosso projeto.

Este é o modulo que usaremos, mas como não no fritzing não temos este modulo, usei outro apenas para demostrar, mas a ligação e a mesma.


LIGAÇÃO:
Feito a ligação, vamos então para o nosso código, mas antes você precisa baixar a biblioteca responsável por interpretar o nosso modulo RFID.

Baixe aqui

Após ter feito a ligação igual ao da foto, e baixado a biblioteca, coloque-a na pasta libraries do Arduíno, veja aqui como fazer isso.
Agora só falta o código para seu projeto começar a funcionar, vamos la então?

CÓDIGO:
/*
Por: Eduardo Ribeiro
Oferecimento: www.sttamp.com
Mais tutoriais em http://viciadosemarduino.blogspot.com.br/
grupo no whatsApp "Viciados em Arduino" des de 27/04/2014
WhatsAppp +55 (66) 9691-3568
*/
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // Cria a instância MFRC522.
char st[20];
void setup()
{
Serial.begin(9600); // Inicia a serial
SPI.begin(); // Inicia SPI bus
mfrc522.PCD_Init(); // Inicia MFRC522
Serial.println("Aproxime o seu cartao do leitor...");
Serial.println();
}
void loop()
{
// Procura por novos cartões
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
// Seleccione um dos cartões
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
//Mostra UID na serial
Serial.print("UID da tag :");
String conteudo= "";
byte letra;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
conteudo.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
conteudo.concat(String(mfrc522.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print("ESTADO: ");
conteudo.toUpperCase();
//=========================================================================================
//VERIFICAÇÃO DE RFID
//=========================================================================================
if (conteudo.substring(1) == "7C 33 27 32"){ //UID 1 - Chaveiro
Serial.println("CHAVEIRO 1 !");
Serial.println();
}
//=========================================================================================
//=========================================================================================
//VERIFICAÇÃO DE RFID
//=========================================================================================
if (conteudo.substring(1) == "A7 C0 91 EE"){ //UID 2 - Chaveiro
Serial.println("CHAVEIRO 2 !");
Serial.println();
}
//=========================================================================================
//=========================================================================================
//VERIFICAÇÃO DE RFID
//=========================================================================================
if (conteudo.substring(1) == "C4 05 B0 76"){ //UID 3 - Chaveiro
Serial.println("CHAVEIRO 3 !");
Serial.println();
}
//=========================================================================================
//=========================================================================================
//VERIFICAÇÃO DE RFID
//=========================================================================================
if (conteudo.substring(1) == "47 2A 58 EE"){ //UID 4 - Chaveiro
Serial.println("CHAVEIRO 4 !");
Serial.println();
}
//=========================================================================================
//=========================================================================================
//VERIFICAÇÃO DE RFID
//=========================================================================================
if (conteudo.substring(1) == "A7 CF 8E EE"){ //UID 5 - Chaveiro
Serial.println("CHAVEIRO 5 !");
Serial.println();
}
//=========================================================================================
}
view raw arduino hosted with ❤ by GitHub


Este tópico te ajudou de alguma forma? então deixe seu comentário e compartilhe como puder, ajude-nos a ajudar os outros.

domingo, 26 de julho de 2015

Adicionar bibliotecas externas no Arduíno

Olá galerinha, hoje vou ensinar os novatos a como importar uma biblioteca para a pasta libraries do Arduíno.
Então vamos la...
Primeiramente iremos pegar a biblioteca que você baixou, neste caso vou usar uma biblioteca chamada MFRC522, responsável por controlar um modulo RFID.

Após baixar a biblioteca, você irá copia-la para o seguinte diretório com o compilador do Arduíno fechado:

C:\Program Files (x86)\Arduino\libraries

Como eu uso sistema 64 bits este e meu diretório, acredito que para o 32 bits sera o seguinte:

C:\Program Files\Arduino\libraries

Se você não achar esse diretório no seu computador, não se preocupe, só copiar o endereço e copiar na barra de buscas do seu computador.

Após copiar a biblioteca para o diretório, e só abrir o programa do Arduíno e inserir a biblioteca como mostrarei a seguir:
Após ter aberto, vá em "Open";

Encontre a biblioteca que você copiou para dentro da pasta libraries;

Você vai encontrar vários códigos prontos dependendo da biblioteca importada, no caso desta temos estes exemplos;

Esta pronto, esta ai o código de exemplo da nossa biblioteca, pronta para ser compilada.

Este tópico te ajudou de alguma forma? então deixe seu comentário e compartilhe como puder, ajude-nos a ajudar os outros.


sexta-feira, 10 de julho de 2015

FOGO DE LEDS

Olá galerinha...
Hoje temos um novo tutorial, vou ensinar a vocês como fazer efeito de fogo com LEDs.
Bom, esse e um tutorial muito simples, e você vai precisar de poucos componentes.

Material necessário:
1- Arduíno Uno
1- Proto board
2-LEDs amarelo
1-LED vermelho
Jumpers

Modelo da Montagem

Conseguiu até aqui? então vamos para a montagem, vamos para o código.
Este tutorial tem o oferecimento da loja Sttamp.com

CÓDIGO:
/*
Por: Eduardo Ribeiro
Oferecimento: www.sttamp.com
Mais tutoriais em http://viciadosemarduino.blogspot.com.br/
grupo no whatsApp "Viciados em Arduino" des de 27/04/2014
WhatsAppp +55 (66) 9691-3568
*/
#define Led1 2 //AMARELO
#define Led2 4 //VERMELHO
#define Led3 3 //AMARELO
void setup(){
pinMode(Led1, OUTPUT);
pinMode(Led2, OUTPUT);
pinMode(Led2, OUTPUT);
}
void loop(){
analogWrite(Led1, random(130)+126);
analogWrite(Led2, random(130)+126);
analogWrite(Led3, random(130)+126);
delay(random(100));
}
view raw gistfile1.ino hosted with ❤ by GitHub



Este tópico te ajudou de alguma forma? então deixe seu comentário e compartilhe como puder, ajude-nos a ajudar os outros.

sábado, 4 de julho de 2015

Arduino TV OUT + LM35

Oi galera!

Esse é o primeiro tutorial de muitos que teremos neste mês de Julho, vamos aproveitar o mês de férias para colocar alguns projetos em dia.

Aproveito para agradecer ao pessoal da Sttamp que nos fornece o material para novos tutoriais.

Bem, hoje vamos aprender sobre um recurso presente no Arduino que poucos conhecem: a saída de vídeo (RCA) para TV.

o Arduíno tem um microcontrolador de apenas 16MHz, então não podemos esperar muito da saída de vídeo, mas já é suficiente para exibir textos e rodar alguns jogos, tudo em preto e branco.

Material necessário:

1 – Conector RCA (jack) soldável (macho ou fêmea)
1 – resistor de 470 ohm
1 – resistor de 1K ohm
X – Cabo de vídeo (você decide o tamanho, não sei se existe comprimento máximo)
1 – Protoboard
1 – Sensor de temperatura lm35

Preparando a saída de vídeo:

Os cabos RCA tem duas passagens de fios, um pelo núcleo e outro entre o núcleo e a casca do fio. Os plugs tem um pino para o fio do núcleo e outro para o fio de fora. Podemos ver como se deve soldar o fio no conector observando a imagem abaixo:




























Deve ficar assim depois que soldar e apertar as “presas”:



























Na outra ponta dos fios vamos colocar os resistores:
















No fio do núcleo vamos soldar os resistores, conforme esquema acima, sendo o resistor de 1K ohm o responsável pela sincronização, e o de 470 ohm por gerar o vídeo. O fio de fora é o GND, que vai ligado ao GND do Arduino.

Depois de soldados:


















Portas:

Nessa parte é muito se atentar ao modelo do seu arduino, pois as portas mudam do uno para o mega.














No Uno a porta para o sync (1K ohm) é a digital 9 e vídeo (470 ohm) digital 7.
No mega, sync na digital 11 vídeo na analógica 7.

OBS: Algumas pessoas relataram problema com o arduino leonardo, até o momento também não encontrei informação de ligação das portas.


Agora vamos a biblioteca, download aqui.



Código:

primeiramente vamos testar um código postado no site Dragão sem chama. O código deve gerar uns textos e umas imagens divertidas:
#include <TVout.h>
#include <fontALL.h>
#include "met.h"
#include "invader.h"
TVout TV;
void setup() {
TV.begin(PAL,120,96);
TV.select_font(font6x8);
TV.println(0,40,"Arduino e TV com a\nbiblioteca TVout\n");
TV.delay(2500);
TV.clear_screen();
TV.println(0,40,"Desenhando Imagens:");
TV.delay(1500);
TV.clear_screen();
TV.bitmap(18,0,met);
TV.delay(10000);
for(int i=0;i<90;i++){
TV.clear_screen();
TV.bitmap(i,0,invader);
TV.delay(100);
}
for(int i=90;i>0;i--){
TV.clear_screen();
TV.bitmap(i,0,invader);
TV.delay(100);
}
TV.clear_screen();
TV.print(9,44,"Dragao sem Chama");
TV.delay(2000);
}
void loop() {
}
view raw Tv out dsc hosted with ❤ by GitHub


Download dos arquivos .h na mesma pasta da biblioteca.

Agora vou postar uma versão modificada do código que apresenta a temperatura atual usando um lm35:

Forma de ligar o sensor:



Primeira "perna" vai no 3,3 ou 5V do arduino
Segunda vai na porta A0 do arduino
E a última no ground

/*
Arduino tv out + lm35
modificado por: Marcelo Cella
Postado em: http://viciadosemarduino.blogspot.com.br
*/
#include <TVout.h> //inclui as bibliotecas necessarias
#include <fontALL.h>
TVout TV;
int pin = 0; // Pino analogico para ligacao do LM35
int tempc = 0,tempf=0; // Variaveis que armazenam a temperatura em Celsius e Fahrenheit
int samples[8]; // Array para precisão na medição
int maxtemp = -100,mintemp = 100; // Variáveis que guardam a temperatura máxima e mínima
int i;
void setup() {
Serial.begin(9600); // Inicializa comunicação serial
TV.begin(PAL,120,96); //define tamanho da exibiçao
TV.select_font(font6x8); // define tamanho da fonte
TV.println(0,40,"Arduino e TV com a\nbiblioteca TVout\n"); // tela de boas vindas
TV.delay(2000);
TV.clear_screen();
TV.println(0,40,"Monitor de Temperatura:");
TV.delay(2000); // tela de boas vindas
}
void loop() {
for(i = 0;i<=7;i++){ // Loop que faz a leitura da temperatura 8 vezes
samples[i] = ( 5.0 * analogRead(pin) * 100.0) / 1024.0; //A cada leitura, incrementa o valor da variavel tempc
tempc = tempc + samples[i];
delay(100);
}
tempc = tempc/8.0; // Divide a variavel tempc por 8, para obter precisão na medição
tempf = (tempc * 9)/ 5 + 32; //Converte a temperatura em Fahrenheit e armazena na variável tempf
if(tempc > maxtemp) {maxtemp = tempc;} //Armazena a temperatura máxima na variável maxtemp
if(tempc < mintemp) {mintemp = tempc;}//Armazena a temperatura máxima na vari[avel mintemp
TV.clear_screen();
TV.print(0,30, "Temperatura" ); //os numeros são a localização inicial do texto (Linha x Coluna)
TV.print(70,30, tempc ); // exibe o valor de tempc
TV.print(85,30, "C" );
TV.delay(100);
// As linhas abaixo enviam para o monitor serial a temperatura em
// Celsius e Fahrenheit,
// e também as temperaturas máxima e mínima registradas
Serial.print(tempc,DEC);
Serial.print(" Cels., ");
Serial.print(tempf,DEC);
Serial.print(" Fahr. -> ");
Serial.print(" Min : ");
Serial.print(mintemp,DEC);
Serial.print(" Max: ");
Serial.println(maxtemp,DEC);
tempc = 0;
delay(100); // Aguarda 1 segundo e reinicia o processo
}
view raw tv out mc hosted with ❤ by GitHub





Resultado em uma tv de 42":



É isso, caso você queira rodar uns games ou adicionar áudio ao seu projeto, leia mais aqui:


fonte:

Eu