# Feather RP2040 DVI Video Synth

## Overview

![](https://cdn-learn.adafruit.com/assets/assets/000/120/392/medium800thumb/hacks_vapor_overview_hero_2.jpg?1682110735)

In this project, you'll use a Feather RP2040 with DVI Output to build a fun and funky video synth. The Feather runs Arduino code written with the Adafruit Fork of the PicoDVI library. All you'll need is USB power and an HDMI monitor to start visually vibing with shapes, colors and static.

https://youtube.com/shorts/7YG7gvHZifs

A button lets you advance through the five different programmed animations.

![hacks_adv_anims_2.gif](https://cdn-learn.adafruit.com/assets/assets/000/120/393/medium640thumb/hacks_adv_anims_2.jpg?1682111196)

There are four potentiometers that control various parameters for each animation, including RGB color values and speed.

![hacks_edited_P1400395.jpg](https://cdn-learn.adafruit.com/assets/assets/000/120/389/medium640/hacks_edited_P1400395.jpg?1682110243)

A special [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)) (#!) button unleashes glitchy and unruly easter eggs for each animation, ranging from randomness to (simulated) black holes.

![hacks_wavy_shebang.gif](https://cdn-learn.adafruit.com/assets/assets/000/120/391/medium640thumb/hacks_wavy_shebang.jpg?1682110437)

## Parts
### Adafruit Feather RP2040 with DVI Output Port - Works with HDMI

[Adafruit Feather RP2040 with DVI Output Port - Works with HDMI](https://www.adafruit.com/product/5710)
Wouldn't it be cool if you could display images and graphics from a microcontroller directly to an HDMI monitor or television? We think so! So we designed this RP2040 Feather that has a digital video output (a.k.a DVI) that will work with any HDMI monitor or display. Note it doesn't do...

In Stock
[Buy Now](https://www.adafruit.com/product/5710)
[Related Guides to the Product](https://learn.adafruit.com/products/5710/guides)
![Video of DVI prototyping dev board sending graphic images to an HDMI monitor.](https://cdn-shop.adafruit.com/product-videos/640x480/5710-07.jpg)

### FeatherWing Proto - Prototyping Add-on For All Feather Boards

[FeatherWing Proto - Prototyping Add-on For All Feather Boards](https://www.adafruit.com/product/2884)
A Feather board without ambition is a Feather board without FeatherWings!

This is the **FeatherWing Proto** - a prototyping add-on for all Feather boards. Using our [Feather Stacking Headers](https://www.adafruit.com/products/2830) or <a...></a...>

In Stock
[Buy Now](https://www.adafruit.com/product/2884)
[Related Guides to the Product](https://learn.adafruit.com/products/2884/guides)
![Angled Shot of the FeatherWing Proto - Prototyping Add-on For All Feather Boards.](https://cdn-shop.adafruit.com/640x480/2884-13.jpg)

### FeatherWing Doubler - Prototyping Add-on For All Feather Boards

[FeatherWing Doubler - Prototyping Add-on For All Feather Boards](https://www.adafruit.com/product/2890)
This is the **FeatherWing Doubler** - a prototyping add-on and more for all Feather boards. This is similar to our [FeatherWing Proto](https://www.adafruit.com/products/2884) except there are two! The magic of the Doubler comes when stacking a Feather and another...

In Stock
[Buy Now](https://www.adafruit.com/product/2890)
[Related Guides to the Product](https://learn.adafruit.com/products/2890/guides)
![Double prototyping feather wing PCB with socket headers installed](https://cdn-shop.adafruit.com/640x480/2890-01.jpg)

### Panel Mount 10K Log Potentiometer (Breadboard Friendly)

[Panel Mount 10K Log Potentiometer (Breadboard Friendly)](https://www.adafruit.com/product/3391)
This potentiometer is a two-in-one, good in a breadboard or with a panel. It's a **log taper** 10K ohm potentiometer, with a grippy shaft. It's smooth and easy to turn, but not so loose that it will shift on its own. We like this one because the legs are 0.2" apart...

In Stock
[Buy Now](https://www.adafruit.com/product/3391)
[Related Guides to the Product](https://learn.adafruit.com/products/3391/guides)
![Breadboard Friendly Panel Mount 10K potentiometer log.](https://cdn-shop.adafruit.com/640x480/3391-01.jpg)

### 16mm Illuminated Pushbutton - Blue Momentary

[16mm Illuminated Pushbutton - Blue Momentary](https://www.adafruit.com/product/1477)
A switch is a switch, and an LED is an LED, but this LED illuminated button is a lovely combination of both! It's a medium sized button, large enough to press easily but not too big that it gets in the way of your project panel. It has a built in LED that can be controlled separately from...

In Stock
[Buy Now](https://www.adafruit.com/product/1477)
[Related Guides to the Product](https://learn.adafruit.com/products/1477/guides)
![Angled shot of a blue round 16mm illuminated pushbutton. ](https://cdn-shop.adafruit.com/640x480/1477-00.jpg)

### 16mm Illuminated Pushbutton - Yellow Momentary

[16mm Illuminated Pushbutton - Yellow Momentary](https://www.adafruit.com/product/1441)
A button is a button, and an LED is a LED, but this LED illuminated button is a lovely combination of both! It's a medium sized button, large enough to press easily but not too big that it gets in the way of your project panel. It has a built in LED that can be controlled separately from...

In Stock
[Buy Now](https://www.adafruit.com/product/1441)
[Related Guides to the Product](https://learn.adafruit.com/products/1441/guides)
![Angled shot of a yellow 16mm illuminated pushbutton. ](https://cdn-shop.adafruit.com/640x480/1441-00.jpg)

### Part: Potentiometer Knobs
quantity: 4
Clear
[Potentiometer Knobs](https://www.adafruit.com/product/5676)

### Part: Silicone Wire
quantity: 1
30 AWG wire - various colors
[Silicone Wire](https://www.adafruit.com/product/2051)

### Part: M2.5 Screws and Stand-offs
quantity: 1
Black Nylon Machine Screw and Stand-off Set – M2.5 Thread
[M2.5 Screws and Stand-offs](https://www.adafruit.com/product/3299)

### Part: USB C cable
quantity: 1
USB C to A cable - data and power
[USB C cable](https://www.adafruit.com/product/5044)

### Part: HDMI cable
quantity: 1
6' HDMI cable for DVI output
[HDMI cable](https://www.adafruit.com/product/2422)

### Part: 720p Monitor
quantity: 1
7" 1280x800 monitor
[720p Monitor](https://www.adafruit.com/product/1667)

# Feather RP2040 DVI Video Synth

## Circuit Diagram

![](https://cdn-learn.adafruit.com/assets/assets/000/120/335/medium800/hacks_vidSynthFritz_bb.jpg?1681999313)

The Feather RP2040 DVI and a FeatherWing Proto are both plugged into a FeatherWing Doubler.

**Right Button** (Next Animation Button)

- **Button input** to **FeatherWing Proto D5**
- **Button GND** to **FeatherWing Proto GND**
- **Button LED** to **FeatherWing Proto D6**
- **Button LED GND** to **FeatherWing Proto**  **GND**

**Left Button** (Shebang Button)

- **Button input** to **FeatherWing Proto D9**
- **Button GND** to **FeatherWing Proto GND**
- **Button LED** to **FeatherWing Proto D10**
- **Button LED GND** to **FeatherWing Proto GND**

**Potentiometer 0**

- **Pot left leg** to **FeatherWing Proto GND**
- **Pot wiper** to **FeatherWing Proto A0**
- **Pot right leg** to **FeatherWing Proto 3.3V**

**Potentiometer 1**

- **Pot left leg** to **FeatherWing Proto GND**
- **Pot wiper** to **FeatherWing Proto A1**
- **Pot right leg** to **FeatherWing Proto 3.3V**

**Potentiometer 2**

- **Pot left leg** to **FeatherWing Proto GND**
- **Pot wiper** to **FeatherWing Proto A2**
- **Pot right leg** to **FeatherWing Proto 3.3V**

**Potentiometer 3**

- **Pot left leg** to **FeatherWing Proto GND**
- **Pot wiper** to **FeatherWing Proto A3**
- **Pot right leg** to **FeatherWing Proto 3.3V**

# Feather RP2040 DVI Video Synth

## Installation

PicoDVI relies on the **_Earle Philhower III Arduino core_** for programming — an optional package that makes most RP2040 boards work in the Arduino environment. If you’ve previously followed any guides for our RP2040-based boards, you likely already have this installed…just check that you’re up to date with the latest ( **3.1.0 or newer** ).

If that sounds unfamiliar, [this guide walks through the process](https://learn.adafruit.com/rp2040-arduino-with-the-earlephilhower-core/overview).

![](https://cdn-learn.adafruit.com/assets/assets/000/119/447/medium800/hdmi_boards-manager.png?1678812706)

Once installed, the Arduino IDE **Tools→Board** menu will include a rollover for “Raspberry Pi RP2040 Boards,” and you can find and select whatever board type you’re using (e.g. Feather RP2040 DVI or Raspberry Pi Pico).

Next, the **PicoDVI library** can be installed from the **Arduino Library Manager**. From the Sketch menu…

**Sketch→Include Library→Manage Libraries…**

Enter “ **picodvi** ” in the search field and look for **PicoDVI - Adafruit Fork** in the results. Click “Install,” then “Close.”

Our version of PicoDVI depends on the **Adafruit\_GFX** library. The Library Manager _should_ install this automatically if not already present, but if using an older version of the Arduino IDE you might need to search for and install it manually.

![](https://cdn-learn.adafruit.com/assets/assets/000/119/415/medium800/hdmi_picodvi-install.png?1678732354)

This is our “fork” of the original PicoDVI project,&nbsp;meaning as much of the original code is preserved with minimal changes. What we’ve done is add an Arduino-compliant C++ wrapper to make this command-line library work with the friendlier Arduino IDE, and implemented simple raster framebuffers for drawing.&nbsp;All the original stuff is there if you want to dig in and learn, though the original examples as written won’t build in the Arduino IDE.

[Here’s our fork on GitHub](https://github.com/adafruit/PicoDVI), and [Luke Wren’s original project](https://github.com/Wren6991/PicoDVI).

# Feather RP2040 DVI Video Synth

## Code the Video Synth

After installing the Raspberry Pi Pico/RP2040 board support package and the Adafruit Fork of the PicoDVI library, as described in the [Installation page in this guide](https://learn.adafruit.com/feather-rp2040-dvi-video-synth/installation), you can prepare to upload the DVI video synth code below to the Feather RP2040 DVI.

Under **Tools** , select the **Adafruit Feather RP2040 DVI** as your target board. For **Boot Stage 2** , select **W25Q080 QSPI /4**. Then under **Port** , select the COM port for your Feather RP2040 DVI.

![](https://cdn-learn.adafruit.com/assets/assets/000/120/363/medium800/hacks_ardBoardSettings.png?1682093028)

Open the project code below in the Arduino IDE and upload it to your Feather RP2040 DVI.

## Project Code
https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/Feather_DVI_Arduino_Video_Synth/Feather_DVI_Arduino_Video_Synth/Feather_DVI_Arduino_Video_Synth.ino

The code has four parts: the constants/variables/pin declarations, the setup, the loop and helper/graphics functions. This will be a high level overview of how the code works. The functionality of the various animation modes will be described in the [Use pages](https://learn.adafruit.com/feather-rp2040-dvi-video-synth/use).

## Declarations

At the top of the code, if you want to change the pins that the potentiometers and buttons are assigned, you can edit these variables:

```cpp
// button and led pins
const int indexPin = 5;
const int ledPin = 6;
const int shebangPin = 9;
const int shebangLed = 10;

//pot pins
int pot0 = A0;
int pot1 = A3;
int pot2 = A2;
int pot3 = A1;
```

The rest of the declarations are variables and constants that are used in the loop and the graphics functions.

## The Setup

In the setup, the `display` is started. If there is insufficient RAM, the onboard LED will blink, letting you know there is a problem. The pin directions are defined for the buttons and button LEDs. `is_target` is set to true, to align with the first animation that will play in the loop.

```cpp
void setup() { 
  if (!display.begin()) { // Blink LED if insufficient RAM
    pinMode(LED_BUILTIN, OUTPUT);
    for (;;) digitalWrite(LED_BUILTIN, (millis() / 500) &amp; 1);
  }
  
  pinMode(indexPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);
  pinMode(shebangPin, INPUT_PULLUP);
  pinMode(shebangLed, OUTPUT);
  
  w = display.width();
  h = display.height();

  is_target = true;
}
```

## The Loop

In the loop, a series of `if`/`else if` statements check the value of `synth_index`. `synth_index` has a value between `0` and `4` and increases by `1` every time the button on `indexPin` is pressed, wrapping back around to `0` if the value is greater than `4`.

When `synth_index` changes in value, the booleans for the various animations are changed in value and `display.fillScreen(BLACK)` is called to clear the screen for the next animation. Each animation is a function and some animations have a starter function (ex: `begin_triangles()`) with code that would be placed in `setup()` if the script was only running a single animation.

```cpp
void loop() {
  index_reading = button_listener(indexPin, ledPin);

  if (synth_index == 0) {
    is_orbits = false;
    if (is_target == false) {
      display.fillScreen(BLACK);
      is_target = true;
    }
    else {
    animate_target();
    }
   }
  
  else if (synth_index == 1) {
    is_target = false;
    if (is_static == false) {
      display.fillScreen(BLACK);
      begin_triangles();
    }
    else {
    animate_static();
    }
  }
  ...
  else {
    is_wavylines = false;
    if (is_orbits == false){
      display.fillScreen(BLACK);
      draw_stars(5000);
      is_orbits = true;
    }
    else {
    animate_orbits();
    }
  }
}
```

## Helpers and Functions

There are 18 functions and helpers in the script. In summary, here is what each one does:

- `shebang_listener` - returns the result of `digitalRead` for the button on `shebangPin`. The intended functionality for that button is to initiate the special easter egg function for each animation.
- `button_listener` -&nbsp;returns the result of `digitalRead` for the button on `indexPin`. Additionally, it lights up the LED on `indexLed` and advances the value of `synth_index`.
- `begin_synthwave` - Starter helper for the `animate_synthwave` animation. It draws the initial shapes.
- `animate_synthwave` - Synthwave animation function. By default, it advances the `y` coordinate of the horizontal lines. If the shebang button is pressed, the `y` coordinates reverse and the `y` coordinate of the "sun" decreases, making it go up on the screen.
- `animate_orbits` - Planetary orbit animation function. Four "planets" rotate around the "sun" with "stars" in the background. The speed of each orbit is affected by the potentiometers. If the shebang button is pressed, the "sun" turns into a black hole, I mean, turns black with an increasing radius value while the `y` coordinate of the "planets" increases, making it look like they're falling.
- `begin_triangles` - Starter helper for the `animate_static` animation. It draws the initial triangles and is an adjustment of the [bouncing circles example](https://learn.adafruit.com/picodvi-arduino-library-video-out-for-rp2040-boards/8bit_single_buffer-and-8bit_double_buffer#step-3140463) in the PicoDVI library.
- `animate_static` - Static with bouncing triangles animation function. The RGB colors and the number of triangles are controlled by the potentiometers. If the shebang button is pressed, the static disappears and all of the triangles bounce around the screen.
- `animate_target` - Breathing circle with spinning lines animation function. The RGB colors and speed are controlled by the potentiometers. The circle's radius increases and decreases as the lines are drawn around the screen from the center of the circle. If the shebang button is pressed, then the circle's radius is randomized.
- `animate_wavylines` - Lines drawing diagonally back and forth with static animation function. The RGB colors and speed are controlled by the potentiometers. The lines originate in the top left corner of the screen and the color of the lines are inverted as they return. If the shebang button is pressed, the origin of the lines is randomized across the screen.
- `make_triangle` - A helper function creates triangles with a color defined by the potentiometers 1-3.
- `analog_map` - A helper function that takes the analog reading from a pin and then uses `map` to map the analog reading to a passed range. It returns the mapped value.
- `color_mixer` - A helper function that takes three integer values for RGB and returns a 16-bit RGB565 color.
- `draw_static` - Draws single pixels in a color and in black randomly around the screen.
- `draw_stars` - Draws single pixels in a color randomly around the screen. The same as `draw_static`, but without the black pixels.
- `clear_static` - Draws 15,000 pixels in black around the screen.
- `gradient_colors` - Creates a 16-bit RGB565 gradient between red and blue.
- `draw_gradient` - Draws the gradient with horizontal lines around a defined area of the screen.
- `millisDelay` - A helper function to create a non-blocking delay with `millis()` with the same syntax as `delay()`.

# Feather RP2040 DVI Video Synth

## Acrylic Enclosure

![](https://cdn-learn.adafruit.com/assets/assets/000/120/387/medium800/hacks_acrylicFusion.png?1682109303)

Two mounting plates can be cut from acrylic with a laser cutter, CNC or your preferred manual method. The files have cutouts for the components and holes for M2.5 screws for mounting the FeatherWing Doubler.&nbsp;

If you aren't a fan of acrylic, or other similar material, .STL files are also available to 3D print the mounting plates.

[vidSynthCADfiles.zip](https://cdn-learn.adafruit.com/assets/assets/000/120/388/original/vidSynthCADfiles.zip?1682109438)
# Feather RP2040 DVI Video Synth

## Wiring

![](https://cdn-learn.adafruit.com/assets/assets/000/120/336/medium800/hacks_edited_P1400324.jpg?1682003355)

## Wire the Potentiometers
Cut, splice and tin three pieces of wire.

![hacks_edited_P1400332.jpg](https://cdn-learn.adafruit.com/assets/assets/000/120/337/medium640/hacks_edited_P1400332.jpg?1682003380)

Solder a wire to each of the three legs of the potentiometer.

![hacks_edited_P1400335.jpg](https://cdn-learn.adafruit.com/assets/assets/000/120/338/medium640/hacks_edited_P1400335.jpg?1682003417)

Repeat this process for the remaining three potentiometers.

![hacks_edited_P1400337.jpg](https://cdn-learn.adafruit.com/assets/assets/000/120/339/medium640/hacks_edited_P1400337.jpg?1682003438)

## Potentiometers Meet Proto
Solder the potentiometer ground wires to the GND rail on the FeatherWing Proto.

![hacks_edited_P1400342.jpg](https://cdn-learn.adafruit.com/assets/assets/000/120/340/medium640/hacks_edited_P1400342.jpg?1682003450)

Solder the poteniomters positive wires to the 3.3V rail on the FeatherWing Proto.

![hacks_edited_P1400345.jpg](https://cdn-learn.adafruit.com/assets/assets/000/120/341/medium640/hacks_edited_P1400345.jpg?1682003491)

Solder potentiometer 0 wiper wire to pin A0 on the FeatherWing Proto.

![hacks_edited_P1400348.jpg](https://cdn-learn.adafruit.com/assets/assets/000/120/342/medium640/hacks_edited_P1400348.jpg?1682003518)

Solder potentiometers 1, 2 and 3 wipers to pins A1, A2 and A3 respectively on the FeatherWing Proto.

![hacks_edited_P1400352.jpg](https://cdn-learn.adafruit.com/assets/assets/000/120/343/medium640/hacks_edited_P1400352.jpg?1682003552)

## Buttons Meet Proto
Solder the ground pins on the buttons together. Then, solder wires to the LED anode and button output pins. The LED anode and LED ground are marked with **+** and **-** symbols.

![hacks_edited_P1400362.jpg](https://cdn-learn.adafruit.com/assets/assets/000/120/344/medium640/hacks_edited_P1400362.jpg?1682003609)

Insert both buttons with their wires soldered into the acrylic plate.

![hacks_edited_P1400366.jpg](https://cdn-learn.adafruit.com/assets/assets/000/120/345/medium640/hacks_edited_P1400366.jpg?1682003687)

Solder the buttons' wires to the FeatherWing Proto:

- **Button GND wires** to **FeatherWing Proto GND rail**
- **Button 1 output** to **FeatherWing Proto D5**
- **Button 1 LED** to **FeatherWing Proto D6**
- **Button 2 output** to **FeatherWing Proto D9**
- **Button 2 LED** to **FeatherWing Proto D10**

![hacks_edited_P1400368.jpg](https://cdn-learn.adafruit.com/assets/assets/000/120/346/medium640/hacks_edited_P1400368.jpg?1682003733)

# Feather RP2040 DVI Video Synth

## Assembly

![](https://cdn-learn.adafruit.com/assets/assets/000/120/354/medium800/hacks_edited_P1400399.jpg?1682008129)

## FeatherWing Doubler
Plug the Feather RP2040 DVI and the FeatherWing Proto into a FeatherWing Doubler.

![hacks_edited_P1400377.jpg](https://cdn-learn.adafruit.com/assets/assets/000/120/348/medium640/hacks_edited_P1400377.jpg?1682007496)

## Potentiometers Meet Acrylic
Insert the potentiometers into the four mounting holes. Secure them with the included nut.

![hacks_edited_P1400371.jpg](https://cdn-learn.adafruit.com/assets/assets/000/120/347/medium640/hacks_edited_P1400371.jpg?1682007456)

## Top Stand-Offs
Insert an M2.5 stand-off and M2.5 spacer into all four of the mounting holes on the FeatherWing Proto and the two mounting holes on the USB side of the Feather RP2040 DVI.

![hacks_edited_P1400380.jpg](https://cdn-learn.adafruit.com/assets/assets/000/120/349/medium640/hacks_edited_P1400380.jpg?1682007525)

Attach the top piece of acrylic to the stand-offs with M2.5 screws.

![hacks_edited_P1400382.jpg](https://cdn-learn.adafruit.com/assets/assets/000/120/350/medium640/hacks_edited_P1400382.jpg?1682007616)

## Bottom Stand-Offs
Add M2.5 stand-offs to the M2.5 spacers via the bottom of the FeatherWing Doubler.

![hacks_edited_P1400388.jpg](https://cdn-learn.adafruit.com/assets/assets/000/120/351/medium640/hacks_edited_P1400388.jpg?1682007650)

Attach the bottom piece of acrylic to the stand-offs with M2.5 screws.

![hacks_edited_P1400391.jpg](https://cdn-learn.adafruit.com/assets/assets/000/120/352/medium640/hacks_edited_P1400391.jpg?1682007692)

## Potentiometer Knobs
Add some potentiometer knobs to the four potentiometers.

![hacks_edited_P1400394.jpg](https://cdn-learn.adafruit.com/assets/assets/000/120/353/medium640/hacks_edited_P1400394.jpg?1682007905)

# Feather RP2040 DVI Video Synth

## Use

![](https://cdn-learn.adafruit.com/assets/assets/000/120/366/medium800thumb/hacks_useHero.jpg?1682103207)

Connect the Feather RP2040 USB port to a USB cable for power. Then, connect the DVI port to a monitor with an HDMI cable. The Feather will turn on and begin displaying the video synth animations, beginning with the target radar animation.

To change animations, press the button connected to pin 5 to advance.

![hacks_advSynth.gif](https://cdn-learn.adafruit.com/assets/assets/000/120/365/medium640thumb/hacks_advSynth.jpg?1682102042)

https://www.youtube.com/watch?v=L9JNSodBi60

There are five different animations available to play on the video synth. The following pages will go through the functionality for each animation.

# Feather RP2040 DVI Video Synth

## Radar Target

![](https://cdn-learn.adafruit.com/assets/assets/000/120/367/medium800thumb/hacks_radarHero.jpg?1682103619)

The radar target animation has a circle in the center that grows and shrinks in size as a series of lines are drawn from the center around the screen.

Use potentiometers 1, 2 and 3 to adjust the colors in the animation. The circle color will be the inverse of the lines color.

![hacks_radar_colors.gif](https://cdn-learn.adafruit.com/assets/assets/000/120/368/medium640thumb/hacks_radar_colors.jpg?1682103944)

Use potentiometer 0 to adjust the speed of the animation

![hacks_radar_speed_1.gif](https://cdn-learn.adafruit.com/assets/assets/000/120/370/medium640thumb/hacks_radar_speed_1.jpg?1682104347)

If you press the shebang button, the radius of the circle will be randomized.

![hacks_radar_shebang.gif](https://cdn-learn.adafruit.com/assets/assets/000/120/372/medium640thumb/hacks_radar_shebang.jpg?1682104679)

# Feather RP2040 DVI Video Synth

## Static Triangles

![](https://cdn-learn.adafruit.com/assets/assets/000/120/371/medium800thumb/hacks_radar_hero.jpg?1682104612)

Static triangles is a riff on the [bouncing circles example](https://learn.adafruit.com/picodvi-arduino-library-video-out-for-rp2040-boards/8bit_single_buffer-and-8bit_double_buffer#step-3140463) in the PicoDVI library. The background is filled with colored static as triangles bounce around the screen.

Use potentiometers 1, 2 and 3 to adjust the colors in the animation. The static color will be the inverse of the triangles color.

![hacks_static_color.gif](https://cdn-learn.adafruit.com/assets/assets/000/120/373/medium640thumb/hacks_static_color.jpg?1682105185)

Use potentiometer 0 to affect the number of triangles in the static.

![hacks_static_numTri.gif](https://cdn-learn.adafruit.com/assets/assets/000/120/376/medium640thumb/hacks_static_numTri.jpg?1682107771)

If you press the shebang button, the static disappears and the screen fills with all of the bouncing triangles.

![hacks_static_shebang.gif](https://cdn-learn.adafruit.com/assets/assets/000/120/377/medium640thumb/hacks_static_shebang.jpg?1682107851)

# Feather RP2040 DVI Video Synth

## Synthwave

![](https://cdn-learn.adafruit.com/assets/assets/000/120/374/medium800thumb/hacks_vapor_hero.jpg?1682105595)

The synthwave animation is more of a screensaver for vibing to the [synthwave aesthetic](https://en.wikipedia.org/wiki/Synthwave). However, it serves as a fun example for looping motion and a gradient background.

Potentiometer 0 affects the speed of the movement of the grid. The other potentiometers are not used in this example.

![hacks_vapor_speed.gif](https://cdn-learn.adafruit.com/assets/assets/000/120/378/medium640thumb/hacks_vapor_speed.jpg?1682108017)

If you press the shebang button, the grid will begin moving backgrounds as the sun rises into the sky.

![hacks_vapor_shebang.gif](https://cdn-learn.adafruit.com/assets/assets/000/120/379/medium640thumb/hacks_vapor_shebang.jpg?1682108068)

# Feather RP2040 DVI Video Synth

## Wavy Lines

![](https://cdn-learn.adafruit.com/assets/assets/000/120/380/medium800thumb/hacks_wavy_hero.jpg?1682108107)

The wavy lines animation generates lines from the to left corner back and forth across the screen with static slowly building behind the lines.

Potentiometer 1, 2 and 3 affect the color of the lines and static. The lines moving right to left will be the inverse color of the lines moving left to right.

![hacks_wavy_colors.gif](https://cdn-learn.adafruit.com/assets/assets/000/120/381/medium640thumb/hacks_wavy_colors.jpg?1682108160)

Potentiometer 0 affects the speed of the animation.

![hacks_wavy_speed.gif](https://cdn-learn.adafruit.com/assets/assets/000/120/382/medium640thumb/hacks_wavy_speed.jpg?1682108231)

The shebang button causes the lines to originate from random coordinates across the screen. Releasing it clears the screen.

![hacks_wavy_shebang.gif](https://cdn-learn.adafruit.com/assets/assets/000/120/383/medium640thumb/hacks_wavy_shebang.jpg?1682108294)

# Feather RP2040 DVI Video Synth

## Orbits

![](https://cdn-learn.adafruit.com/assets/assets/000/120/384/medium800thumb/hacks_orbits_hero.jpg?1682108344)

Orbits shows four "planets" orbiting around a "sun" with "stars" in the background.

All four of the potentiometers control the speed of the orbit for each "planet".

![hacks_orbits_speed.gif](https://cdn-learn.adafruit.com/assets/assets/000/120/385/medium640thumb/hacks_orbits_speed.jpg?1682108418)

The shebang button causes a black hole to open and the planets to melt. Releasing the button restores order to the solar system.

![hacks_orbits_shebang.gif](https://cdn-learn.adafruit.com/assets/assets/000/120/386/medium640thumb/hacks_orbits_shebang.jpg?1682108527)

# Feather RP2040 DVI Video Synth

## More Synth Creations

https://www.youtube.com/watch?v=yEY8iRZ_L4E

If you're looking for even more video synth examples with the Feather RP2040 DVI, be sure to check out our friend [TodBot's video synth experiments](https://github.com/todbot/PicoDVI_experiments). He's done some great examples with lots of color and MIDI.


## Featured Products

### Adafruit Feather RP2040 with DVI Output Port - Works with HDMI

[Adafruit Feather RP2040 with DVI Output Port - Works with HDMI](https://www.adafruit.com/product/5710)
Wouldn't it be cool if you could display images and graphics from a microcontroller directly to an HDMI monitor or television? We think so! So we designed this RP2040 Feather that has a digital video output (a.k.a DVI) that will work with any HDMI monitor or display. Note it doesn't do...

In Stock
[Buy Now](https://www.adafruit.com/product/5710)
[Related Guides to the Product](https://learn.adafruit.com/products/5710/guides)
### FeatherWing Proto - Prototyping Add-on For All Feather Boards

[FeatherWing Proto - Prototyping Add-on For All Feather Boards](https://www.adafruit.com/product/2884)
A Feather board without ambition is a Feather board without FeatherWings!

This is the **FeatherWing Proto** - a prototyping add-on for all Feather boards. Using our [Feather Stacking Headers](https://www.adafruit.com/products/2830) or <a...></a...>

In Stock
[Buy Now](https://www.adafruit.com/product/2884)
[Related Guides to the Product](https://learn.adafruit.com/products/2884/guides)
### FeatherWing Doubler - Prototyping Add-on For All Feather Boards

[FeatherWing Doubler - Prototyping Add-on For All Feather Boards](https://www.adafruit.com/product/2890)
This is the **FeatherWing Doubler** - a prototyping add-on and more for all Feather boards. This is similar to our [FeatherWing Proto](https://www.adafruit.com/products/2884) except there are two! The magic of the Doubler comes when stacking a Feather and another...

In Stock
[Buy Now](https://www.adafruit.com/product/2890)
[Related Guides to the Product](https://learn.adafruit.com/products/2890/guides)
### Panel Mount 10K Log Potentiometer (Breadboard Friendly)

[Panel Mount 10K Log Potentiometer (Breadboard Friendly)](https://www.adafruit.com/product/3391)
This potentiometer is a two-in-one, good in a breadboard or with a panel. It's a **log taper** 10K ohm potentiometer, with a grippy shaft. It's smooth and easy to turn, but not so loose that it will shift on its own. We like this one because the legs are 0.2" apart...

In Stock
[Buy Now](https://www.adafruit.com/product/3391)
[Related Guides to the Product](https://learn.adafruit.com/products/3391/guides)
### 16mm Illuminated Pushbutton - Blue Momentary

[16mm Illuminated Pushbutton - Blue Momentary](https://www.adafruit.com/product/1477)
A switch is a switch, and an LED is an LED, but this LED illuminated button is a lovely combination of both! It's a medium sized button, large enough to press easily but not too big that it gets in the way of your project panel. It has a built in LED that can be controlled separately from...

In Stock
[Buy Now](https://www.adafruit.com/product/1477)
[Related Guides to the Product](https://learn.adafruit.com/products/1477/guides)
### 16mm Illuminated Pushbutton - Yellow Momentary

[16mm Illuminated Pushbutton - Yellow Momentary](https://www.adafruit.com/product/1441)
A button is a button, and an LED is a LED, but this LED illuminated button is a lovely combination of both! It's a medium sized button, large enough to press easily but not too big that it gets in the way of your project panel. It has a built in LED that can be controlled separately from...

In Stock
[Buy Now](https://www.adafruit.com/product/1441)
[Related Guides to the Product](https://learn.adafruit.com/products/1441/guides)
### Clear Micro Potentiometer Knob - 4 pack

[Clear Micro Potentiometer Knob - 4 pack](https://www.adafruit.com/product/5676)
Have you found yourself in a maze of twisty-turny knobs, all alike? These micro potentiometer&nbsp;(or rotary encoder) knobs offer a rainbow burst of color to your synth or control panel. They are made of a hard plastic, with a grippy star shape. The shape is...

In Stock
[Buy Now](https://www.adafruit.com/product/5676)
[Related Guides to the Product](https://learn.adafruit.com/products/5676/guides)
### Silicone Cover Stranded-Core Wire - 30AWG in Various Colors

[Silicone Cover Stranded-Core Wire - 30AWG in Various Colors](https://www.adafruit.com/product/2051)
Silicone-sheathing wire is super-flexible and soft, and its also strong! Able to handle up to 200°C and up to 600V, it will do when PVC covered wire wimps out. We like this wire for being extremely supple and flexible, so it is great for wearables or projects where the wire-harness has to...

Out of Stock
[Buy Now](https://www.adafruit.com/product/2051)
[Related Guides to the Product](https://learn.adafruit.com/products/2051/guides)

## Related Guides

- [Adafruit Feather RP2040 with DVI Output Port](https://learn.adafruit.com/adafruit-feather-rp2040-dvi.md)
- [Build an ESP8266 Mobile Robot](https://learn.adafruit.com/build-an-esp8266-mobile-robot.md)
- [Motorized POV LED Display](https://learn.adafruit.com/motorized-pov-led-display.md)
- [Square NeoPixel Display with Black LED Acrylic](https://learn.adafruit.com/sqaure-neopixel-display-with-black-led-acrylic.md)
- [MAC Address Finder](https://learn.adafruit.com/mac-address-finder.md)
- [Coffee Detonator: The TNT Plunger Grinder](https://learn.adafruit.com/coffee-detonator.md)
- [Bluetooth Controlled NeoPixel Lightbox](https://learn.adafruit.com/bluetooth-neopixel-lightbox.md)
- [MIDI for Makers](https://learn.adafruit.com/midi-for-makers.md)
- [STEMMA Lego base plates](https://learn.adafruit.com/stemma-lego-base-plates.md)
- [RPi Stock Alert Alarm](https://learn.adafruit.com/rpi-stock-alert-alarm.md)
- [CircuitPython displayio Setup for TFT FeatherWings](https://learn.adafruit.com/using-circuitpython-displayio-with-a-tft-featherwing.md)
- [Talking Musical NeoPixel Clock with Infrared, BLE and Touch Controls](https://learn.adafruit.com/talking-musical-neo-pixel-clock-with-infrared-ble-and-touch-controls.md)
- [Easy Alexa (Echo) Control of your ESP8266 Huzzah](https://learn.adafruit.com/easy-alexa-or-echo-control-of-your-esp8266-huzzah.md)
- [Adafruit CAN Bus FeatherWing](https://learn.adafruit.com/adafruit-can-bus-featherwing.md)
- [CircuitPython Servo Tester](https://learn.adafruit.com/circuitpython-servo-tester.md)
