nkorobkov
@nkorobkov

Как сделать, чтобы диоды в матрице не гасли?

Есть следующая схема:
5bb543e6be21a490202970.png
Код:
int valX = 0;
int valY = 0;
int fila = 5;
int columna = 13;
int lectura = 0;
int posX = constrain(posX, 0, 5);
int posY = constrain(posY,0,5);
int contX=constrain(contX, 0, 150);
int contY=constrain(contY, 0, 150);
int frame[6][6]=

 {
    {0,0,0,0,0,0},
    {0,0,0,0,0,0},
    {0,0,0,0,0,0},
    {0,0,0,0,0,0},
    {0,0,0,0,0,0},
    {0,0,0,0,0,0}
};


void setup()
{
  for(int i=0; i<6; i++){
    pinMode(i, OUTPUT);
  }
  for(int i=8; i<14; i++){
    pinMode(i, OUTPUT);
  }
  	pinMode(6, INPUT);
  	pinMode(7, INPUT);
}

void limpiar(){
  for(int i=0; i<6; i++){
    digitalWrite(i, LOW);
  }
  for(int i=8; i<14; i++){
    digitalWrite(i, HIGH);
  }
}


void loop()
{
  valX = map(analogRead(5),0,1023,0,6);
  valY = map(analogRead(4),0,1023,0,6);
  
  switch(valX){
    case 1: if(contX>=100){
      				frame[posY][posX]=0;
      				posX--;
      				frame[posY][posX]=1;
      				contX=0;
    			}
    case 2: if(contX>=100){
      				frame[posY][posX]=0;
      				posX--;
      				frame[posY][posX]=1;
      				contX=0;
    			}
 				break;   	
    case 5: if(contX>=100){
      			frame[posY][posX]=0;
      			posX++;
      			frame[posY][posX]=1;
      			contX=0;
    		}
    			break;
    case 6: if(contX>=100){
      			frame[posY][posX]=0;
      			posX++;
      			frame[posY][posX]=1;
      			contX=0;
    		}
    			break;
  }
  
  switch(valY){
    case 1: if(contY>=100){
      				frame[posY][posX]=0;
      				posY--;
      				frame[posY][posX]=1;
      				contY=0;
    			}
 				break; 
    case 2: if(contY>=100){
      				frame[posY][posX]=0;
      				posY--;
      				frame[posY][posX]=1;
      				contY=0;
    			}
 				break; 
    case 4: if(contY>=100){
      			frame[posY][posX]=0;
      			posY++;
      			frame[posY][posX]=1;
      			contY=0;
    		}
    			break;
     
    case 5: if(contY>=100){
      			frame[posY][posX]=0;
      			posY++;
      			frame[posY][posX]=1;
      			contY=0;
    		}
    			break;
  }
  
  
  for(int scan=0; scan<1; scan++){
    for(int i=0; i<6; i++){
      digitalWrite(fila-i,HIGH);
      for(int j=0; j<6; j++){
        if(frame[i][j]==1){
          digitalWrite(columna-j, LOW);
        }
      }
      limpiar();
    }
  }
  contX++;
  contY++;
}


Необходимо сделать так, чтобы диоды загорались по очереди, но после этого не гасли. То есть последовательное заполнение всей матрицы снизу вверх, справа налево. Пожалуйста, помогите решить эту задачу.
  • Вопрос задан
  • 159 просмотров
Пригласить эксперта
Ответы на вопрос 1
@dennzo
не глядя в код, а просто на схему и в задание - а как описано в тз, строго говоря, вообще - возможно?
("чтоб не гасло" несколько портит все, надо уточнять - "чтоб казалось, что не гаснет"?)
представьте себе схему без дуины, просто с тумблерами, на строки и столбцы. имхо, не получается.
допустим, на нижнюю строку дали, теперь пошли давать по одному, на столбцы - пока ок, нижний ряд заполняется как хотели, а вот дальше - ряд 2 - даем на вторую строку, и у нас горит полные две строки... не по одному заполняется снова, а сразу вся строка, и далее 3,4,5 так же...
Или нужно динамическое отображение - как на 7ми сегментных индикаторах, которых много в параллели,
но по матрицам делают развертку давая в общую шину символ для позиции, и включая общий катод только нужной матрице.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы