• Welcome to LusoRobótica - Robótica em Português.
 

Concurso: Prémio Matriz 8x8 Bicolor

Started by delphi, 22 de November de 2008, 14:28

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Fifas

#75
ah....na minha nao...com esse esquema e esse codigo, passa o hello em verde certinho ;)

mais daqui um bocado meto um video para verem :)

Como o prometido "é de vidro" aqui está o video  ;D


ricardo-reis

:) ainda bem, então.. aqui tinha esse bug da coluna vermelha..

TigPT

Agora aprendeste mandarim ? Está giro, só é pena estar a fazer rolling para o lado contrário ;)

Fifas

opa....era como estava o programa :P como disse, tenho de melhorar a programaçao...e ultimamente nao tenho dado uma pra caixa em programaçao :P

ricardo-reis

lol.. isso do rolling ao contrário tem a ver com a cagada de código k eu postei..

Fifas

Só eu é que estou interessado em terminar isto?????!!! :(

já agora....tentativa de desenhar o logo do LR na matriz ;D (é praticamente impossivel)


TigPT

Está muito giro fifas.. mete lá o código bom, ou partilha ai para eu te ajudar a corrigir isto para ver se o delphi se despacha.

ricardo-reis

nop, fifas, n és tu o único a querer acabar isto, eu tenho é os problemas k já postei em fotos e comentários ao que me acontece na matriz.. akela coluna vermelha lixa tudo.. :s

Fifas

Quote from: TigPT on 02 de June de 2009, 00:28
Está muito giro fifas.. mete lá o código bom, ou partilha ai para eu te ajudar a corrigir isto para ver se o delphi se despacha.

Penso que seja mais ou menos isto :)


#include "TimerOne.h"

byte rows[8] = {9, 14, 8, 12, 1, 7, 2, 5};
byte cols[8] = {13, 3, 4, 10, 6, 11, 15, 16};
byte pins[16] = {5, 4, 3, 2, 14, 15, 16, 17, 13, 12, 11, 10, 9, 8, 7, 6};
byte screen[8] = {0, 0, 0, 0, 0, 0, 0, 0};
volatile byte screenRow = 0;
volatile byte screenCol = 0;

void setup() {
  Timer1.initialize(100);
  for (int i = 2; i <= 17; i++)
    pinMode(i, OUTPUT);
  Timer1.attachInterrupt(doubleBuffer);
}

// interrupt routine
void doubleBuffer() {
  // reset the previous iteration
  digitalWrite(translatePin(rows[screenRow]), HIGH); // set previous off
  digitalWrite(translatePin(cols[screenCol]), LOW);  // set previous off
  // go to the next iteration...
  // go to the next screenCol, wrap if necessary
  screenCol++;
  if (screenCol >= 8) {
    screenCol = 0;
    // when screenCol wraps, go to the next screenRow, wrap if necessary
    screenRow++;
    if (screenRow >= 8) {
      screenRow = 0;
    }
  }
  // set this iteration
  if((screen[screenRow]>>screenCol)&B1 == B1) {
    digitalWrite(translatePin(rows[screenRow]), LOW);  // set this on
    digitalWrite(translatePin(cols[screenCol]), HIGH); // set this on
  } else {
    digitalWrite(translatePin(rows[screenRow]), HIGH); // set this off
    digitalWrite(translatePin(cols[screenCol]), LOW);  // set this off
  }
}

byte translatePin(byte original) {
  return pins[original - 1];
}

void allOFF() {
  for (int i = 0; i < 8; i++)
    screen[i]=0;
}

void on(byte row, byte column) {
    screen[column-1] |= (B1<<(row-1));
}

void off(byte row, byte column) {
    screen[column-1] &= ~(B1<<(row-1));
}

// looping some LEDs routine
void loop() {
  on(1,3); on(1,4); on(1,5); on(1,6);
  on(2,2); on(2,4); on(2,5); on(2,7);
  on(3,2); on(3,3); on(3,4); on(3,5); on(3,6); on(3,7);
  on(5,2); on(5,4); on(5,5); on(5,7);
  on(6,1); on(6,2); on(6,4); on(6,5); on(6,7); on(6,8);
  on(7,1); on(7,2); on(7,4); on(7,5); on(7,7); on(7,8);
  on(8,1); on(8,2); on(8,4); on(8,5); on(8,7); on(8,8);
  delay(400);
}



Caso queiram meter a piscar ou apagar para aparecer qualquer coisa depois:

  allOFF();
  delay(1000);



Todos acesos.....Ou se quiserem fazer outros designs  ;D

  on(1,1); on(1,2); on(1,3); on(1,4); on(1,5); on(1,6); on(1,7); on(1,8);
  on(2,1); on(2,2); on(2,3); on(2,4); on(2,5); on(2,6); on(2,7); on(2,8);
  on(3,1); on(3,2); on(3,3); on(3,4); on(3,5); on(3,6); on(3,7); on(3,8);
  on(4,1); on(4,2); on(4,3); on(4,4); on(4,5); on(4,6); on(4,7); on(4,8);
  on(5,1); on(5,2); on(5,3); on(5,4); on(5,5); on(5,6); on(5,7); on(5,8);
  on(6,1); on(6,2); on(6,3); on(6,4); on(6,6); on(6,6); on(6,7); on(6,8);
  on(7,1); on(7,2); on(7,3); on(7,4); on(7,5); on(7,6); on(7,7); on(7,8);
  on(8,1); on(8,2); on(8,3); on(8,4); on(8,5); on(8,6); on(8,7); on(8,8);
  delay(400);



Ricardo.....manda a coluna vermelha dar uma volta e faz isso :P ou entao faz com os vermelhos, ou tambem nao da? :P

ricardo-reis

Quote from: Fifas on 02 de June de 2009, 23:49
Ricardo.....manda a coluna vermelha dar uma volta e faz isso :P ou entao faz com os vermelhos, ou tambem nao da? :P

sinceramente nem me lembro, já postei isso há tanto tempo.. mas hei-de experimentar só com vermelhos.. e fazer o esquema de montagem pra isso tb, pra postar.. esse código parece-me bem melhor.. :)

Fifas

com este codigo nao consegues meter o scroll.....digo eu :P

agora o que estou a fazer é ligar tudo ao IC para controlar verdes e vermelhos com menos fios :P ( O IC dos samples ;D não me lembro qual é :P)

ricardo-reis

MAX7221CNG+, se n tou em erro.. :)

era pra isso que os tinha mandado vir, mas a minha matriz, com aquele código inicial, simplesmente n dava nada.. :( pode ser que com esse teu código já dê kk coisa.. e se der, passas a ter uma matriz tricolor e não bicolor.. verde, vermelha e laranja (kd ligas verdes e vermelhos ao mm tempo)..

Fifas

é isso...max7221 (o resto é do package ou lá que é)

vou ver se ligo isto....entretanto experimenta com os vermelhos da tua :)

metRo_

Fifas tens aí o link para o datasheet?

Fifas