Output Devices


Try out Output Devices

  • I tried using Neo-Pixel Output Devices that I think will be used for the final project.
  • First, I read the datasheet of the NeoPixel
  • NeoPixel datasheet here
  • After reading the datasheet, I connected Arduino Uno and Neo-pixel and tested their operation.
  • week12



    week12



  • I downloaded the Neo-Pixel library from the Arduino Library Manager and ran the example.
  • I changed the LED color by changing the example a little bit.
  • week12



    week12



    week12







  • Nice!
  • I used a kicad to make a schmatic.
  • Check the electrical rules after creating the schematic
  • week12



    week12



  • After electrical rules check, make footprints
  • Save the NET file after the footprints are finished.
  • week12



    week12



  • Run PCBnew to layout printed circuit board by loading net file
  • week12



    week12



  • I printed out the finished board design and matched it with the actual parts.
  • week12



  • Board milling and soldering.
  • I overcame many hardships and succeeded in soldering.
  • week12



  • The atiny412 MCU used this time is Programming the UPDI, so it is connected to Uno board.
  • week12



  • I did a programming upload test without any coding.
  • week12
  • What??? new error message...




  • I downloaded jtag2updi to solve the problem.
  • jtag2updi Download link here
  • week12







    week12



  • I ran the downloaded jtag2updi and programmed it on the Arduino Uno board.
  • week12



  • The new board was programmed, but the NeoPixel did not work.
  • week12



  • I checked the example and found that 16 MHz clock speed is required.
  • week12



  • I changed the clock speed to 16 MHz.
  • week12



  • Neopixels Example Code
  • 
      // Simple demonstration on using an input device to trigger changes on your
    // NeoPixels. Wire a momentary push button to connect from ground to a
    // digital IO pin. When the button is pressed it will change to a new pixel
    // animation. Initial state has all pixels off -- press the button once to
    // start the first animation. As written, the button does not interrupt an
    // animation in-progress, it works only when idle.
    
    #include 
    #ifdef __AVR__
     #include  // Required for 16 MHz Adafruit Trinket
    #endif
    
    // Digital IO pin connected to the button. This will be driven with a
    // pull-up resistor so the switch pulls the pin to ground momentarily.
    // On a high -> low transition the button press logic will execute.
    #define BUTTON_PIN   2
    
    #define PIXEL_PIN    4  // Digital IO pin connected to the NeoPixels.
    
    #define PIXEL_COUNT 16  // Number of NeoPixels
    
    // Declare our NeoPixel strip object:
    Adafruit_NeoPixel strip(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
    // Argument 1 = Number of pixels in NeoPixel strip
    // Argument 2 = Arduino pin number (most are valid)
    // Argument 3 = Pixel type flags, add together as needed:
    //   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
    //   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
    //   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
    //   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
    //   NEO_RGBW    Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
    
    boolean oldState = HIGH;
    int     mode     = 0;    // Currently-active animation mode, 0-9
    
    void setup() {
      pinMode(BUTTON_PIN, INPUT_PULLUP);
      strip.begin(); // Initialize NeoPixel strip object (REQUIRED)
      strip.show();  // Initialize all pixels to 'off'
    }
    
    void loop() {
      // Get current button state.
      boolean newState = digitalRead(BUTTON_PIN);
    
      // Check if state changed from high to low (button press).
      if((newState == LOW) && (oldState == HIGH)) {
        // Short delay to debounce button.
        delay(20);
        // Check if button is still low after debounce.
        newState = digitalRead(BUTTON_PIN);
        if(newState == LOW) {      // Yes, still low
          if(++mode > 8) mode = 0; // Advance to next mode, wrap around after #8
          switch(mode) {           // Start the new animation...
            case 0:
              colorWipe(strip.Color(  0,   0,   0), 50);    // Black/off
              break;
            case 1:
              colorWipe(strip.Color(255,   0,   0), 50);    // Red
              break;
            case 2:
              colorWipe(strip.Color(  0, 255,   0), 50);    // Green
              break;
            case 3:
              colorWipe(strip.Color(  0,   0, 255), 50);    // Blue
              break;
            case 4:
              theaterChase(strip.Color(127, 127, 127), 50); // White
              break;
            case 5:
              theaterChase(strip.Color(127,   0,   0), 50); // Red
              break;
            case 6:
              theaterChase(strip.Color(  0,   0, 127), 50); // Blue
              break;
            case 7:
              rainbow(10);
              break;
            case 8:
              theaterChaseRainbow(50);
              break;
          }
        }
      }
    
      // Set the last-read button state to the old state.
      oldState = newState;
    }
    
    // Fill strip pixels one after another with a color. Strip is NOT cleared
    // first; anything there will be covered pixel by pixel. Pass in color
    // (as a single 'packed' 32-bit value, which you can get by calling
    // strip.Color(red, green, blue) as shown in the loop() function above),
    // and a delay time (in milliseconds) between pixels.
    void colorWipe(uint32_t color, int wait) {
      for(int i=0; i RGB
            strip.setPixelColor(c, color); // Set pixel 'c' to value 'color'
          }
          strip.show();                // Update strip with new contents
          delay(wait);                 // Pause for a moment
          firstPixelHue += 65536 / 90; // One cycle of color wheel over 90 frames
        }
      }
    } 




  • Neopixels Example video




  • Using example code, I have created a code that can be used for the My final project.




  • 
      #include 
    #ifdef __AVR__
     #include 
    #endif
    
    #define BUTTON_PIN   2
    
    #define PIXEL_PIN    4
    
    #define PIXEL_COUNT 16
    
    Adafruit_NeoPixel strip(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
    
    
    void setup() {
      pinMode(BUTTON_PIN, INPUT_PULLUP);
      strip.begin();
      strip.show();
    
    }
    
    void loop() {
      boolean push = digitalRead(BUTTON_PIN);
      if(push == false){
        rainbow(10);
      }
    }
    
    void colorWipe(uint32_t color, int wait) {
      for(int i=0; i




  • Thank you
  • my work

  • New board SVG File here

    Arduino code here