led модуль 8 на 8 помощь в коде

Protez1999
Offline
Зарегистрирован: 08.07.2012

Решил побаловаться с модулем диодов 8 на 8. сделал букву П бегущую. Вопрос-можно както уменьшить код или так и придется писать столько строк под каждую букву????

n1 это минус led это плюс


int n1=49;
int n2 =11;
int n3 = 8;
int n4=13;
int n5=51;
int n6=7;
int n7 = 2;
int n8=5;
//////////////////////
int led1=12;
int led2=3;
int led3=4;
int led4=53;
int led5=6;
int led6=52;
int led7=10;
int led8=9;
int var =0;

void setup()
{
   pinMode(n1, OUTPUT);
   pinMode(n2, OUTPUT);
 pinMode(n3, OUTPUT);
   pinMode(n4, OUTPUT);
  pinMode(n5, OUTPUT);
   pinMode(n6, OUTPUT);
  pinMode(n7, OUTPUT);
   pinMode(n8, OUTPUT);
   /////////////
    pinMode(led1, OUTPUT);
   pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
   pinMode(led4, OUTPUT);
   pinMode(led5, OUTPUT);
   pinMode(led6, OUTPUT);
   pinMode(led7, OUTPUT);
   pinMode(led8, OUTPUT);
  
        }

void loop()
{
  
  // 1
  var = 0;
  while(var<200)
  {var++;
 digitalWrite(n3,1);
digitalWrite(led1, 1);
digitalWrite(led2, 1);
digitalWrite(led3, 1);
digitalWrite(led4, 1);
delay(1);
 digitalWrite(n3,0);
digitalWrite(led1, 0);
digitalWrite(led2, 0);
digitalWrite(led3, 0);
digitalWrite(led4, 0);
// лево

digitalWrite(led1, 1);
digitalWrite(n4, 1);
digitalWrite(n5, 1);
digitalWrite(n6,1);
delay(1);
digitalWrite(led1, 0);
digitalWrite(n4, 0);
digitalWrite(n5, 0);
digitalWrite(n6,0);
// право
digitalWrite(led4, 1);
digitalWrite(n4, 1);
digitalWrite(n5, 1);
digitalWrite(n6,1);
delay(1);
digitalWrite(led4, 0);
digitalWrite(n4, 0);
digitalWrite(n5, 0);
digitalWrite(n6,0);
  }
}

 

Protez1999
Offline
Зарегистрирован: 08.07.2012



/*
int n1=51;
int n2 =2;
int n5 = 5;
int n7=7;
int n8=8;
int n11=11;
int n13 = 13;
int n16=49;

int led3 =3;
int led4 = 4;
int led6 = 6;
int led9 = 9;
int led10 = 10;
int led12 = 12;
int led14 = 52;
int led15 = 53;
*/
int n1=49;
int n2 =11;
int n3 = 8;
int n4=13;
int n5=51;
int n6=7;
int n7 = 2;
int n8=5;
//////////////////////
int led1=12;
int led2=3;
int led3=4;
int led4=53;
int led5=6;
int led6=52;
int led7=10;
int led8=9;
int var=0;
int dir = 50; //скорость перемещения

void setup()
{
   pinMode(n1, OUTPUT);
   pinMode(n2, OUTPUT);
 pinMode(n3, OUTPUT);
   pinMode(n4, OUTPUT);
  pinMode(n5, OUTPUT);
   pinMode(n6, OUTPUT);
  pinMode(n7, OUTPUT);
   pinMode(n8, OUTPUT);
   /////////////
    pinMode(led1, OUTPUT);
   pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
   pinMode(led4, OUTPUT);
   pinMode(led5, OUTPUT);
   pinMode(led6, OUTPUT);
   pinMode(led7, OUTPUT);
   pinMode(led8, OUTPUT);
  
        }

void loop()


{
 var = 0;
  while(var<dir)
  {var++;

  //1 положени
// верх
 digitalWrite(n3,1);
digitalWrite(led5, 1);
digitalWrite(led6, 1);
digitalWrite(led7, 1);
digitalWrite(led8, 1);
delay(1);
 digitalWrite(n3,0);
digitalWrite(led5, 0);
digitalWrite(led6, 0);
digitalWrite(led7, 0);
digitalWrite(led8, 0);
// лево

digitalWrite(led5, 1);
digitalWrite(n4, 1);
digitalWrite(n5, 1);
digitalWrite(n6,1);
delay(1);
digitalWrite(led5, 0);
digitalWrite(n4, 0);
digitalWrite(n5, 0);
digitalWrite(n6,0);
// право
digitalWrite(led8, 1);
digitalWrite(n4, 1);
digitalWrite(n5, 1);
digitalWrite(n6,1);
delay(1);
digitalWrite(led8, 0);
digitalWrite(n4, 0);
digitalWrite(n5, 0);
digitalWrite(n6,0);
  }

// 2 положение на знак вправо

 var = 0;
  while(var<dir)
  {var++;

digitalWrite(n3,1);
digitalWrite(led5, 1);
digitalWrite(led6, 1);
digitalWrite(led7, 1);
digitalWrite(led4, 1);
delay(1);
 digitalWrite(n3,0);
digitalWrite(led5, 0);
digitalWrite(led6, 0);
digitalWrite(led7, 0);
digitalWrite(led4, 0);
// лево

digitalWrite(led4, 1);
digitalWrite(n4, 1);
digitalWrite(n5, 1);
digitalWrite(n6,1);
delay(1);
digitalWrite(led4, 0);
digitalWrite(n4, 0);
digitalWrite(n5, 0);
digitalWrite(n6,0);
// право
digitalWrite(led7, 1);
digitalWrite(n4, 1);
digitalWrite(n5, 1);
digitalWrite(n6,1);
delay(1);
digitalWrite(led7, 0);
digitalWrite(n4, 0);
digitalWrite(n5, 0);
digitalWrite(n6,0);
  }
  
// 3
 var = 0;
  while(var<dir)
  {var++;

digitalWrite(n3,1);
digitalWrite(led5, 1);
digitalWrite(led6, 1);
digitalWrite(led3, 1);
digitalWrite(led4, 1);
delay(1);
 digitalWrite(n3,0);
digitalWrite(led5, 0);
digitalWrite(led6, 0);
digitalWrite(led3, 0);
digitalWrite(led4, 0);
// лево

digitalWrite(led3, 1);
digitalWrite(n4, 1);
digitalWrite(n5, 1);
digitalWrite(n6,1);
delay(1);
digitalWrite(led3, 0);
digitalWrite(n4, 0);
digitalWrite(n5, 0);
digitalWrite(n6,0);
// право
digitalWrite(led6, 1);
digitalWrite(n4, 1);
digitalWrite(n5, 1);
digitalWrite(n6,1);
delay(1);
digitalWrite(led6, 0);
digitalWrite(n4, 0);
digitalWrite(n5, 0);
digitalWrite(n6,0);
  }
// 4 положени
 var = 0;
  while(var<dir)
  {var++;
 digitalWrite(n3,1);
digitalWrite(led5, 1);
digitalWrite(led2, 1);
digitalWrite(led3, 1);
digitalWrite(led4, 1);
delay(1);
 digitalWrite(n3,0);
digitalWrite(led5, 0);
digitalWrite(led2, 0);
digitalWrite(led3, 0);
digitalWrite(led4, 0);
// лево

digitalWrite(led2, 1);
digitalWrite(n4, 1);
digitalWrite(n5, 1);
digitalWrite(n6,1);
delay(1);
digitalWrite(led2, 0);
digitalWrite(n4, 0);
digitalWrite(n5, 0);
digitalWrite(n6,0);
// право
digitalWrite(led5, 1);
digitalWrite(n4, 1);
digitalWrite(n5, 1);
digitalWrite(n6,1);
delay(1);
digitalWrite(led5, 0);
digitalWrite(n4, 0);
digitalWrite(n5, 0);
digitalWrite(n6,0);
  }
// 5 положени

 var = 0;
  while(var<dir)
  {var++;
 digitalWrite(n3,1);
digitalWrite(led1, 1);
digitalWrite(led2, 1);
digitalWrite(led3, 1);
digitalWrite(led4, 1);
delay(1);
 digitalWrite(n3,0);
digitalWrite(led1, 0);
digitalWrite(led2, 0);
digitalWrite(led3, 0);
digitalWrite(led4, 0);
// лево

digitalWrite(led1, 1);
digitalWrite(n4, 1);
digitalWrite(n5, 1);
digitalWrite(n6,1);
delay(1);
digitalWrite(led1, 0);
digitalWrite(n4, 0);
digitalWrite(n5, 0);
digitalWrite(n6,0);
// право
digitalWrite(led4, 1);
digitalWrite(n4, 1);
digitalWrite(n5, 1);
digitalWrite(n6,1);
delay(1);
digitalWrite(led4, 0);
digitalWrite(n4, 0);
digitalWrite(n5, 0);
digitalWrite(n6,0);
  }
}

 

Protez1999
Offline
Зарегистрирован: 08.07.2012

Извините в первом не тот код вставил 

maksim
Offline
Зарегистрирован: 12.02.2012

Ну вы же уже это делали с 7-сегментным индикатором... объявляли массив битов (битовую маску) и через функцию выводили на дисплей, здесь такой же принцип...

Protez1999
Offline
Зарегистрирован: 08.07.2012

Пробовал не получилось. я счас напрямую без регистра поэтому немного сложнее 

maksim
Offline
Зарегистрирован: 12.02.2012

Наоборот еще проще, что пробовали показыжите

Protez1999
Offline
Зарегистрирован: 08.07.2012

Я пробовал данные в массиве( с кода часов) которые были для регистра поменять на led1 led2 и т.д. но ничего не получилось  . 1 буква почти 5 тысяч байт ужас

 если каждую букву так писать то охренеть можноу меня заняла кучу строк а их 36 еще и 10 цифр

/*
int n1=51;
int n2 =2;
int n5 = 5;
int n7=7;
int n8=8;
int n11=11;
int n13 = 13;
int n16=49;

int led3 =3;
int led4 = 4;
int led6 = 6;
int led9 = 9;
int led10 = 10;
int led12 = 12;
int led14 = 52;
int led15 = 53;
*/
int n1=49;
int n2 =11;
int n3 = 8;
int n4=13;
int n5=51;
int n6=7;
int n7 = 2;
int n8=5;
//////////////////////
int led1=12;
int led2=3;
int led3=4;
int led4=53;
int led5=6;
int led6=52;
int led7=10;
int led8=9;
int var=0;
int dir = 30; //скорость перемещения
int dir2=1; // вторая задержка

void setup()
{
   pinMode(n1, OUTPUT);
   pinMode(n2, OUTPUT);
 pinMode(n3, OUTPUT);
   pinMode(n4, OUTPUT);
  pinMode(n5, OUTPUT);
   pinMode(n6, OUTPUT);
  pinMode(n7, OUTPUT);
   pinMode(n8, OUTPUT);
   /////////////
    pinMode(led1, OUTPUT);
   pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
   pinMode(led4, OUTPUT);
   pinMode(led5, OUTPUT);
   pinMode(led6, OUTPUT);
   pinMode(led7, OUTPUT);
   pinMode(led8, OUTPUT);
  
        }

void loop()


{//1
   var = 0;
  while(var<dir)
  {var++;
  digitalWrite(led8,1);
  digitalWrite(n3,1);
  digitalWrite(n4,1);
  digitalWrite(n5,1);
  digitalWrite(n6,1);
}
  
  //2
  var = 0;
  while(var<dir)
  {var++;
 digitalWrite(led8,1);
  digitalWrite(led7,1);
    digitalWrite(n3,1);
    delay(dir2);
    digitalWrite(led8,0);
    digitalWrite(led7,0);
    digitalWrite(n3,0);
    
 digitalWrite(led7,1);
 digitalWrite(n4,1);
    digitalWrite(n5,1);
    digitalWrite(n6,1);
    delay(dir2);
    digitalWrite(led7,0);
 digitalWrite(n4,0);
    digitalWrite(n5,0);
    digitalWrite(n6,0);
  }
  
  //3
  var = 0;
  while(var<dir)
  {var++;
  digitalWrite(led8,1);
  digitalWrite(led7,1);
   digitalWrite(led6,1);
    digitalWrite(n3,1);
    delay(dir2);
    digitalWrite(led8,0);
    digitalWrite(led7,0);
     digitalWrite(led6,0);
    digitalWrite(n3,0);
    
 digitalWrite(led6,1);
 digitalWrite(n4,1);
    digitalWrite(n5,1);
    digitalWrite(n6,1);
    delay(dir2);
    digitalWrite(led6,0);
 digitalWrite(n4,0);
    digitalWrite(n5,0);
    digitalWrite(n6,0);
}
  //4
   var = 0;
  while(var<dir)
  {var++;
  
digitalWrite(led5, 1);
digitalWrite(n4, 1);
digitalWrite(n5, 1);
digitalWrite(n6,1);
delay(dir2);
digitalWrite(led5, 0);
digitalWrite(n4, 0);
digitalWrite(n5, 0);
digitalWrite(n6,0);
  
// верх
 digitalWrite(n3,1);
digitalWrite(led5, 1);
digitalWrite(led6, 1);
digitalWrite(led7, 1);
digitalWrite(led8, 1);
delay(dir2);
 digitalWrite(n3,0);
digitalWrite(led5, 0);
digitalWrite(led6, 0);
digitalWrite(led7, 0);
digitalWrite(led8, 0);

// ПРАВО
  digitalWrite(led8, 1);
digitalWrite(n4, 1);
digitalWrite(n5, 1);
digitalWrite(n6,1);
delay(dir2);
digitalWrite(led8, 0);
digitalWrite(n4, 0);
digitalWrite(n5, 0);
digitalWrite(n6,0);
  
  }
  
  


//5 положение на знак вправо

 var = 0;
  while(var<dir)
  {var++;

digitalWrite(n3,1);
digitalWrite(led5, 1);
digitalWrite(led6, 1);
digitalWrite(led7, 1);
digitalWrite(led4, 1);
delay(dir2);
 digitalWrite(n3,0);
digitalWrite(led5, 0);
digitalWrite(led6, 0);
digitalWrite(led7, 0);
digitalWrite(led4, 0);
// лево

digitalWrite(led4, 1);
digitalWrite(n4, 1);
digitalWrite(n5, 1);
digitalWrite(n6,1);
delay(dir2);
digitalWrite(led4, 0);
digitalWrite(n4, 0);
digitalWrite(n5, 0);
digitalWrite(n6,0);
// право
digitalWrite(led7, 1);
digitalWrite(n4, 1);
digitalWrite(n5, 1);
digitalWrite(n6,1);
delay(dir2);
digitalWrite(led7, 0);
digitalWrite(n4, 0);
digitalWrite(n5, 0);
digitalWrite(n6,0);
  }
  
// 6
 var = 0;
  while(var<dir)
  {var++;

digitalWrite(n3,1);
digitalWrite(led5, 1);
digitalWrite(led6, 1);
digitalWrite(led3, 1);
digitalWrite(led4, 1);
delay(dir2);
 digitalWrite(n3,0);
digitalWrite(led5, 0);
digitalWrite(led6, 0);
digitalWrite(led3, 0);
digitalWrite(led4, 0);
// лево

digitalWrite(led3, 1);
digitalWrite(n4, 1);
digitalWrite(n5, 1);
digitalWrite(n6,1);
delay(1);
digitalWrite(led3, 0);
digitalWrite(n4, 0);
digitalWrite(n5, 0);
digitalWrite(n6,0);
// право
digitalWrite(led6, 1);
digitalWrite(n4, 1);
digitalWrite(n5, 1);
digitalWrite(n6,1);
delay(dir2);
digitalWrite(led6, 0);
digitalWrite(n4, 0);
digitalWrite(n5, 0);
digitalWrite(n6,0);
  }
// 7 положени
 var = 0;
  while(var<dir)
  {var++;
 digitalWrite(n3,1);
digitalWrite(led5, 1);
digitalWrite(led2, 1);
digitalWrite(led3, 1);
digitalWrite(led4, 1);
delay(dir2);
 digitalWrite(n3,0);
digitalWrite(led5, 0);
digitalWrite(led2, 0);
digitalWrite(led3, 0);
digitalWrite(led4, 0);
// лево

digitalWrite(led2, 1);
digitalWrite(n4, 1);
digitalWrite(n5, 1);
digitalWrite(n6,1);
delay(dir2);
digitalWrite(led2, 0);
digitalWrite(n4, 0);
digitalWrite(n5, 0);
digitalWrite(n6,0);
// право
digitalWrite(led5, 1);
digitalWrite(n4, 1);
digitalWrite(n5, 1);
digitalWrite(n6,1);
delay(1);
digitalWrite(led5, 0);
digitalWrite(n4, 0);
digitalWrite(n5, 0);
digitalWrite(n6,0);
  }
// 8 положени

 var = 0;
  while(var<dir)
  {var++;
 digitalWrite(n3,1);
digitalWrite(led1, 1);
digitalWrite(led2, 1);
digitalWrite(led3, 1);
digitalWrite(led4, 1);
delay(dir2);
 digitalWrite(n3,0);
digitalWrite(led1, 0);
digitalWrite(led2, 0);
digitalWrite(led3, 0);
digitalWrite(led4, 0);
// лево

digitalWrite(led1, 1);
digitalWrite(n4, 1);
digitalWrite(n5, 1);
digitalWrite(n6,1);
delay(dir2);
digitalWrite(led1, 0);
digitalWrite(n4, 0);
digitalWrite(n5, 0);
digitalWrite(n6,0);
// право
digitalWrite(led4, 1);
digitalWrite(n4, 1);
digitalWrite(n5, 1);
digitalWrite(n6,1);
delay(dir2);
digitalWrite(led4, 0);
digitalWrite(n4, 0);
digitalWrite(n5, 0);
digitalWrite(n6,0);
  }
  
  //9
   var = 0;
  while(var<dir)
  {var++;
  digitalWrite(led3,1);
  digitalWrite(n3,1);
  digitalWrite(n4,1);
  digitalWrite(n5,1);
  digitalWrite(n6,1);
  delay(dir2);
  digitalWrite(led3,0);
  digitalWrite(n3,0);
  digitalWrite(n4,0);
  digitalWrite(n5,0);
  digitalWrite(n6,0);
  
  digitalWrite(n3,1);
  digitalWrite(led1,1);
  digitalWrite(led2,1);
  delay(dir2);
  digitalWrite(n3,0);
  digitalWrite(led1,0);
  digitalWrite(led2,0);
  
  }
  
  // 10
   var = 0;
  while(var<dir)
  {var++;
  digitalWrite(led2,1);
  digitalWrite(n3,1);
  digitalWrite(n4,1);
  digitalWrite(n5,1);
  digitalWrite(n6,1);
  delay(dir2);
  digitalWrite(led2,0);
  digitalWrite(n3,0);
  digitalWrite(n4,0);
  digitalWrite(n5,0);
  digitalWrite(n6,0);
  
  digitalWrite(n3,1);
  digitalWrite(led1,1);
  
  delay(dir2);
  digitalWrite(n3,0);
  digitalWrite(led1,0);
  }
  //11
   var = 0;
  while(var<dir)
  {var++;
  digitalWrite(led1,1);
  digitalWrite(n3,1);
  digitalWrite(n4,1);
  digitalWrite(n5,1);
  digitalWrite(n6,1);
  delay(dir2);
  digitalWrite(led1,0);
  digitalWrite(n3,0);
  digitalWrite(n4,0);
  digitalWrite(n5,0);
  digitalWrite(n6,0);
  }
  
  
}

 

maksim
Offline
Зарегистрирован: 12.02.2012

Определитесь с размером символа если будет кирилица, то рекомендую 8х6, а если только латинские то можно 8х5
Вот пример:
 

byte [][6] = 
{
  { // П
    B00000000,
    B11111111,
    B10000000,
    B10000000,
    B10000000,
    B11111111,
  }
  ,
  { // Т
    B00000000,
    B10000000,
    B10000000,
    B11111111,
    B10000000,
    B10000000,
  }
   ,
  { // Щ
    B00000001,
    B11111110,
    B00000001,
    B11111111,
    B00000001,
    B11111111,
  }
};

 

Protez1999
Offline
Зарегистрирован: 08.07.2012

символ 4 на 4. у вас пример для сдвигового регистра на сколько я понял 

maksim
Offline
Зарегистрирован: 12.02.2012

У меня пример для символа 8х6, какая разница для чего он? Сдвиговый регистр - это всего лишь преобразователь последовательных даных в параллельный вывод. И как вы хотите в поле 4х4 изобразить например букву М?

Вы буквы видите, которые вырисовываются из битов?

Protez1999
Offline
Зарегистрирован: 08.07.2012

да буквы вижу. растяну 5 на 4 для м

Protez1999
Offline
Зарегистрирован: 08.07.2012

у меня получается я рисую полосами . наприме для т сначала код для верхней полосы зажигаю ее делаю паузу гашу диоды и тоже самое для ножки 

maksim
Offline
Зарегистрирован: 12.02.2012

Ну так вот один байт (В10000001) - это вертикальная полоса, состоящая из 8 точек.

Protez1999
Offline
Зарегистрирован: 08.07.2012

dW(n3,1);

dw(led3-led7,1);

delay(1);

 dW(n3,0);

dw(led3-led7,0);

получилась шляпка на 5 символов

 

dW(led5,1);

dw(n4-n6,1);

delay(1);

dW(led5,0);

dw(n4-n6,0);

 

Protez1999
Offline
Зарегистрирован: 08.07.2012

 я понимаю про что вы. тока как это сделать в моем случаи???

maksim
Offline
Зарегистрирован: 12.02.2012

Использовать высоту символа 4 точки - это не рационально. Ладно, а букву Е как изобразите? Минимум 5 точек, а лучше сразу 7 или 8.

Protez1999
Offline
Зарегистрирован: 08.07.2012

пока у меня проблема в том как оптимизировать процес 

Protez1999
Offline
Зарегистрирован: 08.07.2012

если можно на примере моего кода 

maksim
Offline
Зарегистрирован: 12.02.2012

Protez1999 пишет:

 я понимаю про что вы. тока как это сделать в моем случаи???

Точно также

byte mask[][5] = 
{
  { // П
    B00000000,
    B11111000,
    B10000000,
    B10000000,
    B11111000,
  }
  ,
  { // Т
    B00000000,
    B00000000,
    B10000000,
    B11111000,
    B10000000,
  }
};

 

Protez1999
Offline
Зарегистрирован: 08.07.2012

int n1=49;
int n2 =11;
int n3 = 8;
int n4=13;
int n5=51;
int n6=7;
int n7 = 2;
int n8=5;
//////////////////////
int led1=12;
int led2=3;
int led3=4;
int led4=53;
int led5=6;
int led6=52;
int led7=10;
int led8=9;
int var=0;
int dir = 30; //скорость перемещения
int dir2=1; // вторая задержка

void setup()
{
   pinMode(n1, OUTPUT);
   pinMode(n2, OUTPUT);
 pinMode(n3, OUTPUT);
   pinMode(n4, OUTPUT);
  pinMode(n5, OUTPUT);
   pinMode(n6, OUTPUT);
  pinMode(n7, OUTPUT);
   pinMode(n8, OUTPUT);
   /////////////
    pinMode(led1, OUTPUT);
   pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
   pinMode(led4, OUTPUT);
   pinMode(led5, OUTPUT);
   pinMode(led6, OUTPUT);
   pinMode(led7, OUTPUT);
   pinMode(led8, OUTPUT);
  
        }

void loop()


{
  digitalWrite(led8,1);
  digitalWrite(n3,1);
  digitalWrite(n4,1);
  digitalWrite(n5,1);
  digitalWrite(n6,1);
}

куда тут его нужно вставить??? 

maksim
Offline
Зарегистрирован: 12.02.2012

Для дальнейшего понимания каким способом можно выводить информацию на дисплей, вот вам пример как оптимизировать инициализацию выводов:

byte anods[8] = {49, 11, 8, 13, 51, 7, 2, 5};
byte catods[8] = {12, 3, 4, 53, 6, 52, 10, 9};

void setup(){
  for(byte i = 0; i < 8; i++)pinMode(anods[i], OUTPUT);
  for(byte i = 0; i < 8; i++)pinMode(catods[i], OUTPUT);
}

 

maksim
Offline
Зарегистрирован: 12.02.2012

Protez1999 пишет:

 

куда тут его нужно вставить??? 

В начало кода где объявляются глобальные переменные

Protez1999
Offline
Зарегистрирован: 08.07.2012

а void loop если можно для примера 

Protez1999
Offline
Зарегистрирован: 08.07.2012

 или если не трудно полный код для 1 буквы

maksim
Offline
Зарегистрирован: 12.02.2012

 

void loop(){
  Out_to_display(stroka, sdvig);
  sdvig++;
  if(sdvig == 30)sdvig = 0;
}

 

Protez1999
Offline
Зарегистрирован: 08.07.2012

или если не трудно полный код для 1 буквы 

что то так и ниче не догоняю

Protez1999
Offline
Зарегистрирован: 08.07.2012

частично понял остлось догнать как несколько вводить символов в строку 

maksim
Offline
Зарегистрирован: 12.02.2012

 Обьявить массив под строку и написать функцию, которая будет заполнять массив кодами символов.

Protez1999
Offline
Зарегистрирован: 08.07.2012

получается каждая буква свой массив?

maksim
Offline
Зарегистрирован: 12.02.2012

Не совсем. Как вы видите byte mask[][6] - это двумерный массив, то есть массив массивов и каждый массив из этого массива - это одна буква.

Protez1999
Offline
Зарегистрирован: 08.07.2012

всеравно не догоняю напишите пожалуста полный код для 1 буквы а там по аналогии разберусь .

я пишу букву код заганяю в подмассив(массив в массиве) так??? в коде часов у меня 1 строкой писалась цифра мне нужно было открыть тока плюсы и 1 минус .тут я  в 1 строку только 3 часть буквы или цифры  смогу написать. получается я открываю минус  и 3 плюса например

dW(catods[1],1);

dW(anods[1],1); dw(anods[2],1); и т.д. грубо говоря это тоже самое сто и B11000000 я правильно понял?

как это сделать через регистр я понимаю а вот как это сделать без него никак не догоню

Protez1999
Offline
Зарегистрирован: 08.07.2012

1 byte anods[8] = {49, 11, 8, 13, 51, 7, 2, 5};
2 byte catods[8] = {12, 3, 4, 53, 6, 52, 10, 9};
получается B11000000 запустит контакт 49 и 11? 

maksim
Offline
Зарегистрирован: 12.02.2012

Protez1999 пишет:

1 byte anods[8] = {49, 11, 8, 13, 51, 7, 2, 5};
2 byte catods[8] = {12, 3, 4, 53, 6, 52, 10, 9};
получается B11000000 запустит контакт 49 и 11? 

Да, все верно, именно такой подход. Теперь вам нужно написать функцию, которая будет принимать этот байт и выводить его на 8 анодов (на 8 точек), что бы пока вам не заморачиваться по поводу сдвигов битов можно использовать функцию bitRead. Пока сделайте все просто на одном катоде, потом уже будете разбираться с катодами...

Protez1999
Offline
Зарегистрирован: 08.07.2012

bitRead ()
Описание

Читает немного числа.

Синтаксис

bitRead (х, п)

Параметры

х: номер, с которого читать

п: какой бит для чтения, начиная с 0 для наименее значимым (крайний справа) немного

Возвраты

Значение бита (0 или 1). новсеравно не понял как должно выглядить 

maksim
Offline
Зарегистрирован: 12.02.2012

У вас 8 анодов подключенных к выводам дуины. Одним выводом вы управляете функцией digitalWrite(anod, 1) или digitalWrite(anod, 0). Ваша функция (котору вы пытаетесь написать) принимает байт, состоящий из 8 бит и вам нужно каждый бит вытащить из этого байта и поместить в 8 функций digitalWrite(anod1, бит№0), digitalWrite(anod2, бит№1), digitalWrite(anod3, бит№2) и т.д.. Что бы не плодить 8 практически одинаковых строк можно все это сделать в цикле.

Protez1999
Offline
Зарегистрирован: 08.07.2012

получается  например B10000001

                                     B11!!1!!!00000

bitRead(2,3); это единица во второй строчке???

 

maksim
Offline
Зарегистрирован: 12.02.2012
bitRead(B0000000Х, 0); 
bitRead(B000000Х0, 1); 
bitRead(B00000Х00, 2); 
bitRead(B0000Х000, 3);
bitRead(B000Х0000, 4); 
bitRead(B00Х00000, 5);
и т.д.

где Х - возврачаемое значение 0 или 1 (бит)

 

Protez1999
Offline
Зарегистрирован: 08.07.2012

 извините наверное я туплю но что это нам дает.

как будеть выгледить весь код если нужно зажечи в 1 строке матрицы 1 5 7 диоды?

пример сверху касается только X ????

maksim
Offline
Зарегистрирован: 12.02.2012

Вот так

byte line = B01010001;

digitalWrite(anod1, bitRead(line, 0));
digitalWrite(anod2, bitRead(line, 1));
digitalWrite(anod3, bitRead(line, 2));
digitalWrite(anod4, bitRead(line, 3));
digitalWrite(anod5, bitRead(line, 4));
digitalWrite(anod6, bitRead(line, 5));
digitalWrite(anod7, bitRead(line, 6));
digitalWrite(anod8, bitRead(line, 7));

 просто к сведению - нумерация битов идет с права на лево.

Protez1999
Offline
Зарегистрирован: 08.07.2012
byte anod[8] = {49, 11, 8, 13, 51, 7, 2, 5};
byte catods[8] = {12, 3, 4, 53, 6, 52, 10, 9};
int dir=8;
int dir2=2;

void setup(){
  for(byte i = 0; i < 8; i++)pinMode(anod[i], OUTPUT);
  for(byte i = 0; i < 8; i++)pinMode(catods[i], OUTPUT);
}

void loop()
{
 
byte line = B01010001; ????

digitalWrite(anod1, bitRead(line, 0));
digitalWrite(anod2, bitRead(line, 1));
digitalWrite(anod3, bitRead(line, 2));
digitalWrite(anod4, bitRead(line, 3));
digitalWrite(anod5, bitRead(line, 4));
digitalWrite(anod6, bitRead(line, 5));
digitalWrite(anod7, bitRead(line, 6));
digitalWrite(anod8, bitRead(line, 7));

}
 

я имел ввиду в таком виде  как она должна выглсядеть.

maksim
Offline
Зарегистрирован: 12.02.2012

В общем ладно, я уже утомился, сложно вот так обьяснить в форуме что, куда и откуда. Вот так работает?

for(byte i = 0; i < 8; i++) digitalWrite(anod[i], bitRead(line, i));

 это тоже самое что и так:

digitalWrite(anod[0], bitRead(line, 0));
digitalWrite(anod[1], bitRead(line, 1));
digitalWrite(anod[2], bitRead(line, 2));
digitalWrite(anod[3], bitRead(line, 3));
digitalWrite(anod[4], bitRead(line, 4));
digitalWrite(anod[5], bitRead(line, 5));
digitalWrite(anod[6], bitRead(line, 6));
digitalWrite(anod[7], bitRead(line, 7));

 можете поэтапно описать что происходит в строчке digitalWrite(anod[0], bitRead(line, 0)); ???

Protez1999
Offline
Зарегистрирован: 08.07.2012

 digitalWrite(anod[0], bitRead(line, 0)); ??? даем сигнал на 0 анод(контакт обьявленый в начале ) 

bitRead(line, 0)); ??? определяем относительно B00000000 чему будет равнятся 0 или 1 этод анод(вернее включится он или нет)

если я все правильно понял digital write(49,0 или 1);
 

 я просто не понимаю как полностью должен выглядить void setup и loop

какя понимаю матрицу типа как вы мне писали выше 

byte mask я должен назначить чтоб мог брать значения для bitRead(line, 0));
 

maksim
Offline
Зарегистрирован: 12.02.2012

Вроде все правильно понимаете, не торопитесь всему свое время. Так заработало? 1, 5 и 7 загорелись? а точнее если все катоды подключены должны были загореться 3 линии...

Protez1999
Offline
Зарегистрирован: 08.07.2012
byte anods[8] = {49, 11, 8, 13, 51, 7, 2, 5};
byte catods[8] = {12, 3, 4, 53, 6, 52, 10, 9};
int dir=8;
int dir2=2;
void setup(){
  for(byte i = 0; i < 8; i++)pinMode(anods[i], OUTPUT);
  for(byte i = 0; i < 8; i++)pinMode(catods[i], OUTPUT);
}

void loop()
{
  
 for(byte i = 0; i < 5; i++) digitalWrite(anods[i], 1);
 digitalWrite (catods[3],1);
 digitalWrite (catods[5],1);

  
 
 
  
}

горит 2 линии(3 и 5) . bitRead(line, i) -  не проходит поскольку как я понимаю ей неоткуда брать значения
 

maksim
Offline
Зарегистрирован: 12.02.2012

 Так у вас катоды через транзисторы (транзисторную сборку) подключены?

Protez1999
Offline
Зарегистрирован: 08.07.2012

да минусы на транзисторах 

maksim
Offline
Зарегистрирован: 12.02.2012

 

Protez1999 пишет:

bitRead(line, i) - не проходит поскольку как я понимаю ей неоткуда брать значения

Как это неоткуда??? из byte line = B01010001; как видите 1, 5 и 7 биты в единице

maksim
Offline
Зарегистрирован: 12.02.2012

 Так понятно тогда так 3 точки горят???

byte anods[8] = {49, 11, 8, 13, 51, 7, 2, 5};
byte catods[8] = {12, 3, 4, 53, 6, 52, 10, 9};

void setup(){
  for(byte i = 0; i < 8; i++)pinMode(anods[i], OUTPUT);
  for(byte i = 0; i < 8; i++)pinMode(catods[i], OUTPUT);
}

void loop(){
 byte line = B01010001;
 for(byte i = 0; i < 8; i++) digitalWrite(anods[i], bitRead(line, i));
 digitalWrite (catods[0],1); 
}

 

 

Protez1999
Offline
Зарегистрирован: 08.07.2012
byte anods[8] = {49, 11, 8, 13, 51, 7, 2, 5};
byte catods[8] = {12, 3, 4, 53, 6, 52, 10, 9};
int dir=8;
int dir2=2;
void setup(){
  for(byte i = 0; i < 8; i++)pinMode(anods[i], OUTPUT);
  for(byte i = 0; i < 8; i++)pinMode(catods[i], OUTPUT);
   
}

void loop()
{
  byte line = B01010101;

 for(byte i = 0; i < 8; i++) digitalWrite(anods[i], bitRead(line, i));
 digitalWrite (catods[2],1);

 
 
}
 

все горит теперб надо сделать 8 строк byte line 

maksim
Offline
Зарегистрирован: 12.02.2012

 В смысле все горит??? Все точки горят или только нужные 3 ????

Protez1999
Offline
Зарегистрирован: 08.07.2012

только нужные