23 de novembro de 2017

Controle de Matriz de LED com Joystick

Neste projeto vamos aprender a controlar uma Matriz de LED (Dot Matrix)​ 8X8 utilizando um Joystick com o Arduino.

As peças necessárias são:

  • Arduino Uno ou similar
  • Matriz de LED 8X8
  • Modulo Joystick Para Arduino (ou dois potenciômetros de 10k)
  • 8 resistores de 1k
  • Fios

A ligação da Matriz de LED é a mesma utilizada em um dos projetos de exemplo que acompanham a IDE do Arduino chamado RowColumnScanning, você pode encontrar o detalhamento da ligação e outras explicações no próprio link.

Neste exemplo iremos usar um Joystick para a movimentação do LED, o que dá um controle muito melhor que os dois potenciômetros.

O código também é totalmente diferente e acredito que esteja mais simples e fácil de compreender.

Outra diferença são os resistores que devem ser usados para evitar sobrecarga de corrente nos LEDs e possível dano ao seu display.

Na imagem podemos ver a ligação para termos uma ideia melhor:

Segue o esquema das ligações:

Neste esquema o Joystick possui uma nomenclatura diferente do que estou usando, o que pode ser o seu caso também. Caso isso ocorra é só trocar as opções HORZ VERT por VRx VRy respectivamente.

Veja o vídeo demonstrativo:

E finalmente, segue o código:

int axisX = A0;
int axisY = A1;
float valX;
float valY;

// Set initial position
int currentRow = 3;
int currentCol = 3;

// Boundaries
int maxLimit = 7;
int minLimit = 0;

// Lower numbers are faster
int gameSpeed = 100;

// Just for reference
// Dot Matrix Rows pins sequence: 9, 14, 8, 12, 1, 7, 2, 5
// Dot Matrix Cols pins sequence: 13, 3, 4, 10, 6, 11, 15, 16
int rows[] = { 2, 7, 19, 5, 13, 18, 12, 16 };
int cols[] = { 6, 11, 10, 3, 17, 4, 8, 9 };

void setup() {
  // Optional declaration, but useful for clearness
  pinMode(axisX, INPUT);
  pinMode(axisY, INPUT);

  // Set all rows/cols pins as OUTPUT
  for (byte i = 0; i < 8; i++) {
    pinMode(rows[i], OUTPUT);
    pinMode(cols[i], OUTPUT);
  }

  drawLed();
}

void loop() {
  readJoystick();
  defineMovement();
}

void turnOffAllLeds() {
  for (byte i = 0; i < 8; i++) {
    digitalWrite(rows[i], LOW);
    digitalWrite(cols[i], HIGH);
  }
}

void readJoystick() {
  valX = analogRead(axisX);
  valY = analogRead(axisY);

  delay(gameSpeed);
}

void defineMovement() {
  // Controls reversed due to joystick cables position
  // Left and Right
  if (valX > 550 && currentCol > minLimit) {
    currentCol -= 1;
    drawLed();
  } else if (valX < 500 && currentCol < maxLimit) {
    currentCol += 1;
    drawLed();
  }

  // Up and Down
  if (valY > 550 && currentRow > minLimit) {
    currentRow -= 1;
    drawLed();
  } else if (valY < 500 && currentRow < maxLimit) {
    currentRow += 1;
    drawLed();
  }
}

void drawLed() {
  turnOffAllLeds();
  digitalWrite(rows[currentRow], HIGH);
  digitalWrite(cols[currentCol], LOW);
}

 

Visualizações: 47



Eletrônica

12 de novembro de 2017

LEDs sequenciais em Arduino

Projeto Arduino de LEDs sequenciais.

06 de novembro de 2017

Player em Arduino com ajuste de velocidade

Projeto em Arduino que executa a música Dó Ré Mi com ajuste de velocidade.

Sérgio Toledo | Full-Stack Web Developer | LinkedIn | GitHub | YouTube

Todos os direitos reservados ©