Arduino TVout

Hackster.ioLearning Hardware Community. Projects× Log inSign up ProjectsProjectsChannelsChannelsNewsContestsEventsVideos ×

Embed the widget on your own site

Add the following snippet to your HTML:

Arduino TVout

How to print an image on an TV

Read up about this project on Hackster.io

Arduino TVout

DrOpShOtZ3 4,406
  • Overview
  • Things
  • Story
  • Schematics
  • Code
  • Credits
  • Comments(1)
DrOpShOtZDrOpShOtZPublished Arduino TVout

How to print an image on an TV

BeginnerProtip4,406Arduino TVout

Things used in this project

Hardware components

Jumper wires (generic)
Jumper wires (generic)
×4
  • Buy from Newark
  • Buy from SparkFun
Arduino Nano R3
Arduino Nano R3
×1
  • Buy from Newark
  • Buy from CPC
Breadboard (generic)
Breadboard (generic)
×1
  • Buy from Newark
  • Buy from SparkFun
Resistor 1k ohm
Resistor 1k ohm
×1
Through Hole Resistor, 470 ohm
Through Hole Resistor, 470 ohm
×1
Audio / Video Cable Assembly, 2 RCA Plugs to 2 RCA Plugs
Audio / Video Cable Assembly, 2 RCA Plugs to 2 RCA Plugs
×1

Software apps and online services

Arduino IDE
Arduino IDE

Story

Download the library and the code https://drive.google.com/file/d/1yIePyEFQjKPJDyKFeGYTivttunBMunN9/view

download TVout library Sketch>Manage Libraries...>Search>TVout>install

Read more

Schematics

Arduino TVout

The circuit diagram

Code

  • Arduino TVout

Arduino TVout

Arduino#include "TVout.h" #include <fontALL.h> #include "schematic.h" #include "TVOlogo.h" TVout TV; int zOff = 150; int xOff = 0; int yOff = 0; int cSize = 50; int view_plane = 64; float angle = PI/60; float cube3d[8][3] = { {xOff - cSize,yOff + cSize,zOff - cSize}, {xOff + cSize,yOff + cSize,zOff - cSize}, {xOff - cSize,yOff - cSize,zOff - cSize}, {xOff + cSize,yOff - cSize,zOff - cSize}, {xOff - cSize,yOff + cSize,zOff + cSize}, {xOff + cSize,yOff + cSize,zOff + cSize}, {xOff - cSize,yOff - cSize,zOff + cSize}, {xOff + cSize,yOff - cSize,zOff + cSize} }; unsigned char cube2d[8][2]; void setup() { TV.begin(NTSC,120,96); TV.select_font(font6x8); intro(); TV.println("I am the TVout\nlibrary running on a freeduino\n"); TV.delay(2500); TV.println("I generate a PAL\nor NTSC composite video using\ninterrupts\n"); TV.delay(2500); TV.println("My schematic:"); TV.delay(1500); TV.bitmap(0,0,schematic); TV.delay(10000); TV.clear_screen(); TV.println("Lets see what\nwhat I can do"); TV.delay(2000); //fonts TV.clear_screen(); TV.println(0,0,"Multiple fonts:"); TV.select_font(font4x6); TV.println("4x6 font FONT"); TV.select_font(font6x8); TV.println("6x8 font FONT"); TV.select_font(font8x8); TV.println("8x8 font FONT"); TV.select_font(font6x8); TV.delay(2000); TV.clear_screen(); TV.print(9,44,"Draw Basic Shapes"); TV.delay(2000); //circles TV.clear_screen(); TV.draw_circle(TV.hres()/2,TV.vres()/2,TV.vres()/3,WHITE); TV.delay(500); TV.draw_circle(TV.hres()/2,TV.vres()/2,TV.vres()/2,WHITE,INVERT); TV.delay(2000); //rectangles and lines TV.clear_screen(); TV.draw_rect(20,20,80,56,WHITE); TV.delay(500); TV.draw_rect(10,10,100,76,WHITE,INVERT); TV.delay(500); TV.draw_line(60,20,60,76,INVERT); TV.draw_line(20,48,100,48,INVERT); TV.delay(500); TV.draw_line(10,10,110,86,INVERT); TV.draw_line(10,86,110,10,INVERT); TV.delay(2000); //random cube forever. TV.clear_screen(); TV.print(16,40,"Random Cube"); TV.print(28,48,"Rotation"); TV.delay(2000); randomSeed(analogRead(0)); } void loop() { int rsteps = random(10,60); switch(random(6)) { case 0: for (int i = 0; i < rsteps; i++) { zrotate(angle); printcube(); } break; case 1: for (int i = 0; i < rsteps; i++) { zrotate(2*PI - angle); printcube(); } break; case 2: for (int i = 0; i < rsteps; i++) { xrotate(angle); printcube(); } break; case 3: for (int i = 0; i < rsteps; i++) { xrotate(2*PI - angle); printcube(); } break; case 4: for (int i = 0; i < rsteps; i++) { yrotate(angle); printcube(); } break; case 5: for (int i = 0; i < rsteps; i++) { yrotate(2*PI - angle); printcube(); } break; } } void intro() { unsigned char w,l,wb; int index; w = pgm_read_byte(TVOlogo); l = pgm_read_byte(TVOlogo+1); if (w&7) wb = w/8 + 1; else wb = w/8; index = wb*(l-1) + 2; for ( unsigned char i = 1; i < l; i++ ) { TV.bitmap((TV.hres() - w)/2,0,TVOlogo,index,w,i); index-= wb; TV.delay(50); } for (unsigned char i = 0; i < (TV.vres() - l)/2; i++) { TV.bitmap((TV.hres() - w)/2,i,TVOlogo); TV.delay(50); } TV.delay(3000); TV.clear_screen(); } void printcube() { //calculate 2d points for(byte i = 0; i < 8; i++) { cube2d[i][0] = (unsigned char)((cube3d[i][0] * view_plane / cube3d[i][2]) + (TV.hres()/2)); cube2d[i][1] = (unsigned char)((cube3d[i][1] * view_plane / cube3d[i][2]) + (TV.vres()/2)); } TV.delay_frame(1); TV.clear_screen(); draw_cube(); } void zrotate(float q) { float tx,ty,temp; for(byte i = 0; i < 8; i++) { tx = cube3d[i][0] - xOff; ty = cube3d[i][1] - yOff; temp = tx * cos(q) - ty * sin(q); ty = tx * sin(q) + ty * cos(q); tx = temp; cube3d[i][0] = tx + xOff; cube3d[i][1] = ty + yOff; } } void yrotate(float q) { float tx,tz,temp; for(byte i = 0; i < 8; i++) { tx = cube3d[i][0] - xOff; tz = cube3d[i][2] - zOff; temp = tz * cos(q) - tx * sin(q); tx = tz * sin(q) + tx * cos(q); tz = temp; cube3d[i][0] = tx + xOff; cube3d[i][2] = tz + zOff; } } void xrotate(float q) { float ty,tz,temp; for(byte i = 0; i < 8; i++) { ty = cube3d[i][1] - yOff; tz = cube3d[i][2] - zOff; temp = ty * cos(q) - tz * sin(q); tz = ty * sin(q) + tz * cos(q); ty = temp; cube3d[i][1] = ty + yOff; cube3d[i][2] = tz + zOff; } } void draw_cube() { TV.draw_line(cube2d[0][0],cube2d[0][1],cube2d[1][0],cube2d[1][1],WHITE); TV.draw_line(cube2d[0][0],cube2d[0][1],cube2d[2][0],cube2d[2][1],WHITE); TV.draw_line(cube2d[0][0],cube2d[0][1],cube2d[4][0],cube2d[4][1],WHITE); TV.draw_line(cube2d[1][0],cube2d[1][1],cube2d[5][0],cube2d[5][1],WHITE); TV.draw_line(cube2d[1][0],cube2d[1][1],cube2d[3][0],cube2d[3][1],WHITE); TV.draw_line(cube2d[2][0],cube2d[2][1],cube2d[6][0],cube2d[6][1],WHITE); TV.draw_line(cube2d[2][0],cube2d[2][1],cube2d[3][0],cube2d[3][1],WHITE); TV.draw_line(cube2d[4][0],cube2d[4][1],cube2d[6][0],cube2d[6][1],WHITE); TV.draw_line(cube2d[4][0],cube2d[4][1],cube2d[5][0],cube2d[5][1],WHITE); TV.draw_line(cube2d[7][0],cube2d[7][1],cube2d[6][0],cube2d[6][1],WHITE); TV.draw_line(cube2d[7][0],cube2d[7][1],cube2d[3][0],cube2d[3][1],WHITE); TV.draw_line(cube2d[7][0],cube2d[7][1],cube2d[5][0],cube2d[5][1],WHITE); }

Credits

DrOpShOtZ

DrOpShOtZ

12 projects • 18 followersContact me from Discord. DrOpShOtZ#6290 Follow ContactContact

Comments

Tag » Arduino Tv Out Bitmap