/* CONNECTION from ESP32 to a composite video TV A) voltageDivider = false; B) voltageDivider = true 55 shades 179 shades ESP32 TV ESP32 TV -----+ -----+ ____ 100 ohm G|- G|---|____|+ pin25|--------- Comp pin25|---|____|+--------- Comp pin26|- pin26|- 220 ohm | | | | -----+ -----+ Connect pin 25 or 26 C) R–2R resistor ladder; D) unequal rungs ladder 55 shades up to 254 shades? ESP32 TV ESP32 TV -----+ -----+ ____ G|-+_____ G|---|____| pinA0|-| R2R |- Comp pinA0|---|____|+--------- Comp pinA1|-| | pinA1|---|____| pinA2|-| | ...| ...|-|_____| | -----+ -----+ Connect pins of your choice (A0...A8=any pins). Custom ladders can be used by tweaking colorMinValue and colorMaxValue */ #define COMPOSITE_VIDEO_PIN 25 // hardcoded, this pin has a HW DAC #include #include #include //#include //#include //#include //#include #define FONT CodePage437_8x8 //pin configuration for DAC const int outputPin = COMPOSITE_VIDEO_PIN; // A) B) CompositeGrayDAC videodisplay; // C) D) //CompositeGrayLadder videodisplay; class Display { public: // view(able) size int vw = 350; int vh = 235; // offsets (to fix overscan, depends on your display) int ow = 10; int oh = 26; // display size int w = 365; // vw + 2*ow int h = 275; // vh + 2*oh int font_w = FONT.charWidth; int font_h = FONT.charHeight + 1; int cols = vw / font_w; int rows = vh / font_h; void setup() { // Composite video init, see options in the header ^^^ // A) //videodisplay.init(CompMode::MODEPAL288P, 25, false); // B) videodisplay.init(CompMode::MODEPAL288P, 25, true); videodisplay.clear(); videodisplay.xres = w; videodisplay.yres = h; videodisplay.setFont(FONT); /*/ view area test videodisplay.rect(ow, oh, vw, vh, 50); /**/ } void scroll(int d) { videodisplay.scroll(d, 0); } void fill_rect(int x, int y, int w, int h, int color) { videodisplay.fillRect(x, y, w, h, color); } void pixel(int x, int y, int color) { videodisplay.dotFast(x, y, color); } void print_character(int col, int row, int fg_color, int bg_color, char character) { int x = ow + col*font_w; int y = oh + row*font_h; videodisplay.setCursor(x, y); videodisplay.setTextColor(fg_color, bg_color); videodisplay.print(character); } int get_display_width() { return w; } int get_display_height() { return h; } int get_view_width() { return vw; } int get_view_height() { return vh; } int get_view_width_offset() { return ow; } int get_view_height_offset() { return oh; } };