RobotInputs

Bu çizim, kontrol kartı potansiyometresi ve düğmelerinin klavye olarak nasıl kullanılacağını gösterir. Robotu bir mobil müzik makinesine dönüştürür, farklı düğmelere basarak müzikle biraz eğlenin.

Gerekli Donanım

  • Arduino Robotu

Talimat

  1. Örneği yükleyin, bittikten sonra USB'yi takılı tutabilirsiniz.
  2. Başlangıç ekranından sonra müziğin çaldığını duyarsınız.
  3. Ekranda, dikey mavi çubuk müziğin temposunu gösterir. Turuncu renkli yatay çubuk, perdeyi gösterir. Ortadaki çapraz şekil düğmeleri temsil eder ve sol alttaki daire topuza karşılık gelir.
  4. Farklı düğmelere basın veya düğmeyi döndürmeyi deneyin. Ekrandaki arayüzün değiştiğini görmelisiniz.

Denemek

Robottaki girişleri test edin

Kod

/* Robot Inputs

 This sketch shows you how to use the on-board
 potentiometer and buttons as inputs.

 Turning the potentiometer draws a clock-shaped
 circle. The up and down buttons change the pitch,
 while the left and right buttons change the tempo.
 The middle button resets tempo and pitch.

 Circuit:
 * Arduino Robot

 created 1 May 2013
 by X. Yang
 modified 12 May 2013
 by D. Cuartielles

 This example is in the public domain
 */


#include <ArduinoRobot.h>
#include <Wire.h>

// default tempo and pitch of the music
int tempo = 60;
int pitch = 1000;

void setup() {
  // initialize the Robot, SD card, speaker, and display
  Robot.begin();
  Robot.beginTFT();
  Robot.beginSpeaker();
  Robot.beginSD();

  // draw "lg0.bmp" and "lg1.bmp" on the screen
  Robot.displayLogos();

  // play a sound file
  Robot.playFile("Melody.sqm");
}

void loop() {
  // check the value of the buttons
  keyDown(Robot.keyboardRead());

  // check the value of the pot
  drawKnob(Robot.knobRead());
}

// Draw the basic interface
void renderUI() {
  //fill the buttons blank
  Robot.fill(255, 255, 255);
  Robot.rect(53, 58, 13, 13); // left
  Robot.rect(93, 58, 13, 13); // right
  Robot.rect(73, 38, 13, 13); // up
  Robot.circle(79, 64, 6); // middle
  Robot.rect(73, 78, 13, 13); // down

  //draw the knob
  Robot.noFill();
  Robot.circle(26, 116, 17); // knob

  //draw the vertical bargraph
  int fullPart = map(pitch, 200, 2000, 0, 58); //length of filled bargraph
  Robot.fill(255, 255, 255);
  Robot.rect(21, 30, 13, 58 - fullPart);
  Robot.fill(0, 0, 255);
  Robot.rect(21, 88 - fullPart, 13, fullPart); //58-fullPart+30

  //draw the horizontal bargraph
  fullPart = map(tempo, 20, 100, 0, 58);  // length of filled bargraph
  Robot.fill(255, 190, 0);
  Robot.rect(53, 110, fullPart, 13);
  Robot.fill(255, 255, 255);
  Robot.rect(53 + fullPart, 110, 58 - fullPart, 13);
}

void keyDown(int keyCode) {
  // use a static int so it is persistent over time
  static int oldKey;
  switch (keyCode) {
    case BUTTON_LEFT:
      //left button pressed, reduces tempo
      tempo -= 5;
      if (tempo < 20) {
        tempo = 20;  //lowest tempo 20
      }
      Robot.fill(255, 190, 0);

      Robot.rect(53, 58, 13, 13);
      break;
    case BUTTON_RIGHT:
      //right button pressed, increases tempo
      tempo += 5;
      if (tempo > 100) {
        tempo = 100;  //highest tempo 100
      }
      Robot.fill(255, 190, 0);
      Robot.rect(93, 58, 13, 13);
      break;
    case BUTTON_UP:
      //up button pressed, increases pitch
      pitch += 120;
      if (pitch > 2000) {
        pitch = 2000;
      }
      Robot.fill(0, 0, 255);

      Robot.rect(73, 38, 13, 13);
      break;
    case BUTTON_DOWN:
      //down button pressed, reduces pitch
      pitch -= 120;
      if (pitch < 200) {
        pitch = 200;
      }
      Robot.fill(0, 0, 255);

      Robot.rect(73, 78, 13, 13);
      break;
    case BUTTON_MIDDLE:
      //middle button pressed, resets tempo and pitch
      tempo = 60;
      pitch = 1000;
      Robot.fill(160, 160, 160);

      Robot.circle(79, 64, 6);
      break;
    case BUTTON_NONE:
      //Only when the keys are released(thus BUTTON_NONE is
      //encountered the first time), the interface will be
      //re-drawn.
      if (oldKey != BUTTON_NONE) {
        renderUI();
      }
      break;
  }
  if (oldKey != keyCode) {
    // change the song's tempo
    Robot.tempoWrite(tempo);
    // change the song's pitch
    Robot.tuneWrite(float(pitch / 1000.0));
  }
  oldKey = keyCode;
}

//Draw a circle according to value
//of the knob.
void drawKnob(int val) {
  static int val_old;
  int r = map(val, 0, 1023, 1, 15);

  //Only updates when the
  //value changes.
  if (val_old != r) {
    Robot.noFill();

    //erase the old circle
    Robot.stroke(255, 255, 255);
    Robot.circle(26, 116, r + 1);

    //draw the new circle
    Robot.stroke(255, 0, 255);
    Robot.circle(26, 116, r);

    Robot.stroke(0, 0, 0);

    val_old = r;
  }
}
[Kodu Al]

See Also