document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #include <TVout.h>
  2. #include <fontALL.h>
  3. #include "schematic.h"
  4. #include "TVOlogo.h"
  5.  
  6. TVout TV;
  7.  
  8. int zOff = 150;
  9. int xOff = 0;
  10. int yOff = 0;
  11. int cSize = 50;
  12. int view_plane = 64;
  13. float angle = PI/60;
  14.  
  15. float cube3d[8][3] = {
  16. {xOff - cSize,yOff + cSize,zOff - cSize},
  17. {xOff + cSize,yOff + cSize,zOff - cSize},
  18. {xOff - cSize,yOff - cSize,zOff - cSize},
  19. {xOff + cSize,yOff - cSize,zOff - cSize},
  20. {xOff - cSize,yOff + cSize,zOff + cSize},
  21. {xOff + cSize,yOff + cSize,zOff + cSize},
  22. {xOff - cSize,yOff - cSize,zOff + cSize},
  23. {xOff + cSize,yOff - cSize,zOff + cSize}
  24. };
  25. unsigned char cube2d[8][2];
  26.  
  27.  
  28. void setup() {
  29. TV.begin(PAL,120,96);
  30. TV.select_font(font6x8);
  31. intro();
  32. TV.println("I am the TVout\\nlibrary running on a freeduino\\n");
  33. TV.delay(2500);
  34. TV.println("I generate a PAL\\nor NTSC composite video using\\ninterrupts\\n");
  35. TV.delay(2500);
  36. TV.println("My schematic:");
  37. TV.delay(1500);
  38. TV.bitmap(0,0,schematic);
  39. TV.delay(10000);
  40. TV.clear_screen();
  41. TV.println("Lets see what\\nwhat I can do");
  42. TV.delay(2000);
  43.  
  44. //fonts
  45. TV.clear_screen();
  46. TV.println(0,0,"Multiple fonts:");
  47. TV.select_font(font4x6);
  48. TV.println("4x6 font FONT");
  49. TV.select_font(font6x8);
  50. TV.println("6x8 font FONT");
  51. TV.select_font(font8x8);
  52. TV.println("8x8 font FONT");
  53. TV.select_font(font6x8);
  54. TV.delay(2000);
  55.  
  56. TV.clear_screen();
  57. TV.print(9,44,"Draw Basic Shapes");
  58. TV.delay(2000);
  59.  
  60. //circles
  61. TV.clear_screen();
  62. TV.draw_circle(TV.hres()/2,TV.vres()/2,TV.vres()/3,WHITE);
  63. TV.delay(500);
  64. TV.draw_circle(TV.hres()/2,TV.vres()/2,TV.vres()/2,WHITE,INVERT);
  65. TV.delay(2000);
  66.  
  67. //rectangles and lines
  68. TV.clear_screen();
  69. TV.draw_rect(20,20,80,56,WHITE);
  70. TV.delay(500);
  71. TV.draw_rect(10,10,100,76,WHITE,INVERT);
  72. TV.delay(500);
  73. TV.draw_line(60,20,60,76,INVERT);
  74. TV.draw_line(20,48,100,48,INVERT);
  75. TV.delay(500);
  76. TV.draw_line(10,10,110,86,INVERT);
  77. TV.draw_line(10,86,110,10,INVERT);
  78. TV.delay(2000);
  79.  
  80. //random cube forever.
  81. TV.clear_screen();
  82. TV.print(16,40,"Random Cube");
  83. TV.print(28,48,"Rotation");
  84. TV.delay(2000);
  85.  
  86. randomSeed(analogRead(0));
  87. }
  88.  
  89. void loop() {
  90. int rsteps = random(10,60);
  91. switch(random(6)) {
  92. case 0:
  93. for (int i = 0; i < rsteps; i++) {
  94. zrotate(angle);
  95. printcube();
  96. }
  97. break;
  98. case 1:
  99. for (int i = 0; i < rsteps; i++) {
  100. zrotate(2*PI - angle);
  101. printcube();
  102. }
  103. break;
  104. case 2:
  105. for (int i = 0; i < rsteps; i++) {
  106. xrotate(angle);
  107. printcube();
  108. }
  109. break;
  110. case 3:
  111. for (int i = 0; i < rsteps; i++) {
  112. xrotate(2*PI - angle);
  113. printcube();
  114. }
  115. break;
  116. case 4:
  117. for (int i = 0; i < rsteps; i++) {
  118. yrotate(angle);
  119. printcube();
  120. }
  121. break;
  122. case 5:
  123. for (int i = 0; i < rsteps; i++) {
  124. yrotate(2*PI - angle);
  125. printcube();
  126. }
  127. break;
  128. }
  129. }
  130.  
  131. void intro() {
  132. unsigned char w,l,wb;
  133. int index;
  134. w = pgm_read_byte(TVOlogo);
  135. l = pgm_read_byte(TVOlogo+1);
  136. if (w&7)
  137. wb = w/8 + 1;
  138. else
  139. wb = w/8;
  140. index = wb*(l-1) + 2;
  141. for ( unsigned char i = 1; i < l; i++ ) {
  142. TV.bitmap((TV.hres() - w)/2,0,TVOlogo,index,w,i);
  143. index-= wb;
  144. TV.delay(50);
  145. }
  146. for (unsigned char i = 0; i < (TV.vres() - l)/2; i++) {
  147. TV.bitmap((TV.hres() - w)/2,i,TVOlogo);
  148. TV.delay(50);
  149. }
  150. TV.delay(3000);
  151. TV.clear_screen();
  152. }
  153.  
  154. void printcube() {
  155. //calculate 2d points
  156. for(byte i = 0; i < 8; i++) {
  157. cube2d[i][0] = (unsigned char)((cube3d[i][0] * view_plane / cube3d[i][2]) + (TV.hres()/2));
  158. cube2d[i][1] = (unsigned char)((cube3d[i][1] * view_plane / cube3d[i][2]) + (TV.vres()/2));
  159. }
  160. TV.delay_frame(1);
  161. TV.clear_screen();
  162. draw_cube();
  163. }
  164.  
  165. void zrotate(float q) {
  166. float tx,ty,temp;
  167. for(byte i = 0; i < 8; i++) {
  168. tx = cube3d[i][0] - xOff;
  169. ty = cube3d[i][1] - yOff;
  170. temp = tx * cos(q) - ty * sin(q);
  171. ty = tx * sin(q) + ty * cos(q);
  172. tx = temp;
  173. cube3d[i][0] = tx + xOff;
  174. cube3d[i][1] = ty + yOff;
  175. }
  176. }
  177.  
  178. void yrotate(float q) {
  179. float tx,tz,temp;
  180. for(byte i = 0; i < 8; i++) {
  181. tx = cube3d[i][0] - xOff;
  182. tz = cube3d[i][2] - zOff;
  183. temp = tz * cos(q) - tx * sin(q);
  184. tx = tz * sin(q) + tx * cos(q);
  185. tz = temp;
  186. cube3d[i][0] = tx + xOff;
  187. cube3d[i][2] = tz + zOff;
  188. }
  189. }
  190.  
  191. void xrotate(float q) {
  192. float ty,tz,temp;
  193. for(byte i = 0; i < 8; i++) {
  194. ty = cube3d[i][1] - yOff;
  195. tz = cube3d[i][2] - zOff;
  196. temp = ty * cos(q) - tz * sin(q);
  197. tz = ty * sin(q) + tz * cos(q);
  198. ty = temp;
  199. cube3d[i][1] = ty + yOff;
  200. cube3d[i][2] = tz + zOff;
  201. }
  202. }
  203.  
  204. void draw_cube() {
  205. TV.draw_line(cube2d[0][0],cube2d[0][1],cube2d[1][0],cube2d[1][1],WHITE);
  206. TV.draw_line(cube2d[0][0],cube2d[0][1],cube2d[2][0],cube2d[2][1],WHITE);
  207. TV.draw_line(cube2d[0][0],cube2d[0][1],cube2d[4][0],cube2d[4][1],WHITE);
  208. TV.draw_line(cube2d[1][0],cube2d[1][1],cube2d[5][0],cube2d[5][1],WHITE);
  209. TV.draw_line(cube2d[1][0],cube2d[1][1],cube2d[3][0],cube2d[3][1],WHITE);
  210. TV.draw_line(cube2d[2][0],cube2d[2][1],cube2d[6][0],cube2d[6][1],WHITE);
  211. TV.draw_line(cube2d[2][0],cube2d[2][1],cube2d[3][0],cube2d[3][1],WHITE);
  212. TV.draw_line(cube2d[4][0],cube2d[4][1],cube2d[6][0],cube2d[6][1],WHITE);
  213. TV.draw_line(cube2d[4][0],cube2d[4][1],cube2d[5][0],cube2d[5][1],WHITE);
  214. TV.draw_line(cube2d[7][0],cube2d[7][1],cube2d[6][0],cube2d[6][1],WHITE);
  215. TV.draw_line(cube2d[7][0],cube2d[7][1],cube2d[3][0],cube2d[3][1],WHITE);
  216. TV.draw_line(cube2d[7][0],cube2d[7][1],cube2d[5][0],cube2d[5][1],WHITE);
  217. }
');