Связка Mega2560 с p10 led module

VsemDobra
Offline
Зарегистрирован: 24.03.2019

Уважаемый dneese 

Спасибо за критику, хоть немного и с перебором. Я на форуме первый раз в жизни, а ардуинку в руки неделю назад взял.  Час  назад даже как правильно код вставить не знал, lean_74 не даст соврать.  Уровень у всех разный. По поводу сетап и луп понимание есть, но по моему чем детальнее опишешь проблему, тем понятнее специалисту.  Теперь о главно, начал с конца, т.е. убрал  делей и  ВСЕ ЗАРАБОТАЛО , за помощь безмерно благодарен.  Проблема только в том, что очень быстро меняется значение - не успеваешь, 2-3 цифры проскакивают.  Думаю дело не в дребезге. Удерживая кнопку перелистывание  продолжается и при переходе с 9 в 0 старший разряд увеличивается на единицу. Можно ли как нибудь это победить? Спасибо.

 

 

dneese
Offline
Зарегистрирован: 20.12.2018

Нужно наверно исправить саму
функцию вывода числа void ShowClockNumbers
Там все четыре числа( разряда) выводятся, в этом нет необходимости
если вы меняете по нажатию кнопки то можно менять одно число(разряд)
Или нет!
как вариант запоминать число после нажатия высшего разряда клавиши, сравнивать его с числом из нижнего и если оно больше на 10 то отнимать от переменной - 10.
С сотнями так же, если больше 100 то -100, с тысячами так же, если больше или равно 1000 то -1000
Как то так. Нужно подумать.
На счёт дребезга, я бы не был так уверен что его нет.
Возможно нужно поиграть со светодиодами, кнопками и простыми примерами с тем по семисегментным индикаторам.

iupd
У вас не разряды десятки сотни тысячи единици, и вам нужно 4отдельных функции вывода каждой цифры
Если 9+1 это не 10 а 0
Изменить

Проще всего для каждого числа(разряда) завести свою переменную
Четыре переменных крути от 0 до 9 если 10 то =0
В void ShowClockNumbers изменить переменные
void ShowClockNumbers ( unsigned int ui )

{
dmd.clearScreen(true);
dmd.drawChar( 0, 1, '0'+((ui1), GRAPHICS_NORMAL ); // thousands
dmd.drawChar( 8, 1, '0'+((ui2), GRAPHICS_NORMAL ); // hundreds
dmd.drawChar( 17, 1, '0'+((ui3), GRAPHICS_NORMAL ); // tens
dmd.drawChar( 25, 1, '0'+ (ui4), GRAPHICS_NORMAL ); // units
dmd.drawChar( 15, 3, '.', GRAPHICS_OR ); // clock colon overlay on

}
В сетупе назначить их И в лупе их обработать

VsemDobra
Offline
Зарегистрирован: 24.03.2019

Примерно так?


  #include <SPI.h>        //
  #include <DMD.h>        //
  #include <TimerOne.h>   //
  #include "Arial_black_16.h"
   DMD dmd(1,1);
    unsigned int ui1, ui2, ui3, ui4;
  void ScanDMD()
  {
    dmd.scanDisplayBySPI();
  }
  void ShowClockNumbers( unsigned int ui1,ui2,ui3,ui4, byte bColonOn )
  
   
  {
dmd.clearScreen(true);
dmd.drawChar( 0, 1, '0'+((ui1), GRAPHICS_NORMAL ); // thousands
dmd.drawChar( 8, 1, '0'+((ui2), GRAPHICS_NORMAL ); // hundreds
dmd.drawChar( 17, 1, '0'+((ui3), GRAPHICS_NORMAL ); // tens
dmd.drawChar( 25, 1, '0'+ ((ui4), GRAPHICS_NORMAL ); // units
dmd.drawChar( 15, 3, '.', GRAPHICS_OR ); // clock colon overlay on
  
  }
  void setup(void)
  {
      
     Timer1.initialize( 500 );           //
     Timer1.attachInterrupt( ScanDMD );   //
    
     dmd.selectFont(Arial_Black_16);
     ui1 = 0;
     ui2 = 0;
     ui3 = 0;
     ui4 = 0;
    
    pinMode(1, INPUT);         //  устанавливает режим работы - вход для 1го вход/выхода (pin)
    pinMode(2, INPUT);         //  устанавливает режим работы - вход для 2го вход/выхода (pin)
    pinMode(3, INPUT);         //  устанавливает режим работы - вход для 3го вход/выхода (pin)
    pinMode(4, INPUT);         //  устанавливает режим работы - вход для 4го вход/выхода (pin)
  }
    
  void loop(void)
  {
   if(digitalRead(1)==HIGH)//если кнопка нажата ..
  
   ui1 = ui1+1; // прибавляем 1000
   ShowClockNumbers( ui1, true );     
   
   if(digitalRead(2)==HIGH)//если кнопка нажата ..     
 
   ui2 = ui2+1; // прибавляем 100
   ShowClockNumbers( ui2, true );     
   
   if(digitalRead(3)==HIGH)//если кнопка нажата ..
   
   ui3 = ui3+1; // прибавляем 10
   ShowClockNumbers( ui3, true );  
  
   if(digitalRead(4)==HIGH)//если кнопка нажата ..
   
   ui = ui4+1; // прибавляем 1                                                     
   ShowClockNumbers( ui4, true );    
   
  }
 

 

dneese
Offline
Зарегистрирован: 20.12.2018

попробуйте сами,

и ещё после

ui1 = ui1+1; // прибавляем 1000

if (ui1 > 9){
 ui1=0;// обнулите переменную
} 

 с другими так же.

только я не пойму что это за девайс такой в котором 9+1 не равно 10 а равно 0 ?

 

VsemDobra
Offline
Зарегистрирован: 24.03.2019

Это для того. чтобы с помощью 4 кнопок выставить любое 4-значное число, а связи между разрядами быть не должно. От одной до 4 команд -участников возможно. Если 9+1будет равно 10, то придется кнопки долго нажимать...Так решили, так будем делать. Спасибо. Буду пробовать подставлять.

VsemDobra
Offline
Зарегистрирован: 24.03.2019

Попробовал, работает. От 0 до 9 крутится, другие  разряды не задевает. А скорость осталась прежней, все равно проскакиваешь.

dneese
Offline
Зарегистрирован: 20.12.2018

VsemDobra пишет:

все равно проскакиваешь.



// задаем константы
const int buttonAPin = 13;     // номер входа, подключенный к кнопке A
const int buttonBPin = 2;     // номер входа, подключенный к кнопке B
const int buttonCPin = 3;     // номер входа, подключенный к кнопке C
const int buttonDPin = 4;     // номер входа, подключенный к кнопке D

// переменные
int buttonStateA = 0;         // переменная для хранения состояния кнопки a
int buttonStateB = 0;         // переменная для хранения состояния кнопки b
int buttonStateC = 0;         // переменная для хранения состояния кнопки c
int buttonStateD = 0;         // переменная для хранения состояния кнопки d

int flag1 = 0;
int flag2 = 0;
int flag3 = 0;
int flag4 = 0;

void setup() {
  // initialize serial:
  Serial.begin(9600);
      
  // инициализируем пин, подключенный к кнопке, как вход
  pinMode(buttonAPin, INPUT);    
  pinMode(buttonBPin, INPUT);    
  pinMode(buttonCPin, INPUT);    
  pinMode(buttonDPin, INPUT);    
}

void loop(){
  // считываем значения с входа кнопки
  buttonStateA = digitalRead(buttonAPin);

  // проверяем нажата ли кнопка a
  // если нажата, то buttonStateA будет HIGH:
  if (buttonStateA == HIGH&& flag1 == 0) {    
    Serial.println("a"); 
    flag1 = 1;//поднимаем флаг
  }

  if (digitalRead(buttonAPin) == LOW && flag1 == 1) //если первая кнопка не нажата ..
  {
    flag1 = 0; //обнуляем переменную flag, опускаем флаг
  }

//// проверяем нажата ли кнопка b
//  // если нажата, то buttonState будет HIGH:
//  if (buttonState == HIGH&& flag2 == 0) {    
//    Serial.println("b"); 
//    flag2 = 1;//поднимаем флаг
//  }
//
//  if (buttonState == LOW && flag2 == 1) //если первая кнопка не нажата ..
//  {
//    flag2 = 0; //обнуляем переменную flag, опускаем флаг
//  }
//
//// проверяем нажата ли кнопка c
//  // если нажата, то buttonState будет HIGH:
//  if (buttonState == HIGH&& flag3 == 0) {    
//    Serial.println("a"); 
//    flag3 = 1;//поднимаем флаг
//  }
//
//  if (buttonState == LOW && flag3 == 1) //если первая кнопка не нажата ..
//  {
//    flag3 = 0; //обнуляем переменную flag, опускаем флаг
//  }
//
//
//  // проверяем нажата ли кнопка d
//  // если нажата, то buttonState будет HIGH:
//  if (buttonState == HIGH&& flag4 == 0) {    
//    Serial.println("a"); 
//    flag4 = 1;//поднимаем флаг
//  }
//
//  if (buttonState == LOW && flag4 == 1) //если первая кнопка не нажата ..
//  {
//    flag4 = 0; //обнуляем переменную flag, опускаем флаг
//  }
 
}

для других кнопок подправить код

VsemDobra
Offline
Зарегистрирован: 24.03.2019

Сообщения 305 и 307 еще не прорабатывал, позже... У меня такой вопрос а нельзя ли для замедления  смены  цифры воспользоваться delay ? К примеру вот так:

void loop(void)
{
 
 if(digitalRead(1)==HIGH)//если кнопка нажата ..
   ui = ui+1; // прибавляем 1 
 ShowClockNumbers( ui, true );
 delay (100);
}
 
И так для каждой кнопки.  Можно было-бы получить желаемую задержку.  Спасибо.
b707
Offline
Зарегистрирован: 26.05.2017

VsemDobra - ну так попробуйте, чего спрашивать7

VsemDobra
Offline
Зарегистрирован: 24.03.2019

А я , извините не у Вас спрашивал, а у человека который реально помог советами.  А Ваши  "ценный" совет оставте  пожалуйста себе.  Если спросил, значит не зря спросил...

lean_74
Онлайн
Зарегистрирован: 22.12.2015

VsemDobra пишет:

Если спросил, значит не зря спросил...

ты неделю назад зарегился, а уже хамишь, неправильно это, и обращение на ВЫ, тебя врядли отмажет.

b707
Offline
Зарегистрирован: 26.05.2017

VsemDobra пишет:

А я , извините не у Вас спрашивал, а у человека который реально помог советами.  А Ваши  "ценный" совет оставте  пожалуйста себе.  Если спросил, значит не зря спросил...

А почему мой совет - "ценный" в кавычках? - я посмотрел код и мне кажется, что delay() тут ничего не испортит.  И в любом случае, исправив одну строчку кода - ответ вы могли бы узнать за 2 минуты, вместо того чтоб хамить. Но если больше нравится ждать у моря погоды несколько часов - а может и дней - то ждите.

VsemDobra
Offline
Зарегистрирован: 24.03.2019

b707 пишет:

VsemDobra пишет:

А я , извините не у Вас спрашивал, а у человека который реально помог советами.  А Ваши  "ценный" совет оставте  пожалуйста себе.  Если спросил, значит не зря спросил...

А почему мой совет - "ценный" в кавычках? - я посмотрел код и мне кажется, что delay() тут ничего не испортит.  И в любом случае, исправив одну строчку кода - ответ вы могли бы узнать за 2 минуты, вместо того чтоб хамить. Но если больше нравится ждать у моря погоды несколько часов - а может и дней - то ждите.

Уважаемый,b707  не ужели Вы подумали, что я не пробовал с delay? Очень  ПО РАЗНОМУ пытался, но не компилируется и все тут, ну и спросить решил. Смотрю сообщение новое, обрадовался. А получилось как в том анекдоте: желая получить беспл. консультацию у врача человек спрашивает - доктор, что вы делаете когда простудились? На что доктор отвечает - лечусь.  Сможет кто помоч разобраться - благодарен буду, нет - нет так нет. Земля же не остановит свое вращение. Рано или поздно разберусь - опыта наберусь.  А обидел если - извините. 

b707
Offline
Зарегистрирован: 26.05.2017

VsemDobra пишет:

не ужели Вы подумали, что я не пробовал с delay? Очень  ПО РАЗНОМУ пытался, но не компилируется и все тут

VsemDobra, что вообще в этом крохотном кусочке может не компилироваться? Или вы о том, что там скобки не хватало? - добавил:

  if(digitalRead(1)==HIGH)  {    //если кнопка нажата ..
   ui = ui+1; // прибавляем 1 
   ShowClockNumbers( ui, true );
   delay (100);
}

если опять будут проблемы - приведите точный текст сообщения об ошибке

dneese
Offline
Зарегистрирован: 20.12.2018

не флудите пожалуйста на техническом форуме,

я выше предложил уже такую конструкцию, вы её пробовали? делей вам не нужен, не используйте его без надобности, упростил Вам код

  #include <SPI.h>        //
  #include <DMD.h>        //
  #include <TimerOne.h>   //
  #include "Arial_black_16.h"
   DMD dmd(1,1);
    unsigned int ui1, ui2, ui3, ui4;

boolean flag1 =  false;
boolean flag2 =  false;
boolean flag3 =  false;
boolean flag4 =  false;
 
  void ScanDMD()
  {
    dmd.scanDisplayBySPI();
  }
  
  void setup(void)
  {
      
     Timer1.initialize( 5000 );           //
     Timer1.attachInterrupt( ScanDMD );   //
    
     dmd.selectFont(Arial_Black_16);
     ui1 = 0;
     ui2 = 0;
     ui3 = 0;
     ui4 = 0;
    
    pinMode(4, INPUT);         //  устанавливает режим работы - вход для 1го вход/выхода (pin)
    pinMode(3, INPUT);         //  устанавливает режим работы - вход для 2го вход/выхода (pin)
    pinMode(2, INPUT);         //  устанавливает режим работы - вход для 3го вход/выхода (pin)
    pinMode(1, INPUT);         //  устанавливает режим работы - вход для 4го вход/выхода (pin)
  }
    
  void loop(void)
  {
   //////////////////////////
   if(digitalRead(1)==HIGH&& flag1 ==  false) {  //если кнопка нажата ..
  
  ui1 = ui1+1; // прибавляем 1000
    if (ui1 > 9){
       ui1=0;// обнулите переменную
    }
  dmd.drawChar( 0, 1, '0'+(ui1), GRAPHICS_NORMAL ); // a
  flag1 = true;//поднимаем флаг
   }

   if(digitalRead(1)==HIGH == LOW && flag1 == true) //если первая кнопка не нажата ..
  {
    flag1 =  false; //обнуляем переменную flag, опускаем флаг
  }
   
  /////////////////////////
   if(digitalRead(2)==HIGH&& flag2 ==  false) {  //если кнопка нажата ..     
 
   ui2 = ui2+1; // прибавляем 100
    if (ui2 > 9){
           ui2=0;// обнулите переменную
        }
  dmd.drawChar( 8, 1, '0'+(ui2), GRAPHICS_NORMAL ); // b
  flag2 = true;//поднимаем флаг
  }  
if(digitalRead(2)==HIGH == LOW && flag2 == true) //если первая кнопка не нажата ..
  {
    flag2 =  false; //обнуляем переменную flag, опускаем флаг
  }



  }
 /////////////////////////////////////

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

, у меня нет свободных выходов поэтому проверить немогу, проверьте сами только не перепутайте выходы кнопок с выходами на дисплей

VsemDobra
Offline
Зарегистрирован: 24.03.2019
#include <SPI.h>        //
#include <DMD.h>        //
#include <TimerOne.h>   //
#include "Arial_black_16.h"
 DMD dmd(1,1);
 
unsigned int ui;
 
void ScanDMD()
{
  dmd.scanDisplayBySPI();
}
void ShowClockNumbers( unsigned int uiTime, byte bColonOn )
{
   dmd.drawChar(  -1,  1,'0'+((uiTime%10000)/1000),  GRAPHICS_NORMAL );   // thousands
   dmd.drawChar(  7,  1, '0'+((uiTime%1000) /100),  GRAPHICS_NORMAL );   // hundreds
   dmd.drawChar( 17,  1, '0'+((uiTime%100)  /10),   GRAPHICS_NORMAL );   // tens
   dmd.drawChar( 25,  1, '0'+ (uiTime%10),          GRAPHICS_NORMAL );   // units
    if( bColonOn )
    dmd.drawChar( 15,  3, '.', GRAPHICS_OR     );   // clock colon overlay on
 
}
void setup(void)    
{
    
   Timer1.initialize( 500 );           //
   Timer1.attachInterrupt( ScanDMD );   //
   dmd.clearScreen( true ); 
   dmd.selectFont(Arial_Black_16);
 
 
  pinMode(1, INPUT);         //  устанавливает режим работы - вход для 0го вход/выхода (pin)
  pinMode(2, INPUT);         //  устанавливает режим работы - вход для 1го вход/выхода (pin)
  pinMode(3, INPUT);         //  устанавливает режим работы - вход для 2го вход/выхода (pin)
  pinMode(4, INPUT);         //  устанавливает режим работы - вход для 3го вход/выхода (pin)
}
  
void loop(void)
   
 { 
  if(digitalRead(1)==HIGH)//если кнопка нажата ..
 { ui = ui+1; // прибавляем 1 
 ShowClockNumbers( ui, true ); //delay (100);
 delay(100);
 }
  if(digitalRead(2)==HIGH)//если кнопка нажата ..
 { ui = ui+10; // прибавляем 10
 ShowClockNumbers( ui, true );
 delay(100);
 }
  if(digitalRead(3)==HIGH)//если кнопка нажата ..
 { ui = ui+100; // прибавляем 100
 ShowClockNumbers( ui, true );
 delay(100);
 }
  if(digitalRead(4)==HIGH)//если кнопка нажата ..
 { ui = ui+1000; // прибавляем 1000
 ShowClockNumbers( ui, true );
 delay(100);
 }
 }
 
Код полностью. 
 
collect2.exe: error: ld returned 5 exit status
 
exit status 1
Ошибка компиляции.
 
Убираю delay - все компилируется и работает, только быстро перелистывает. С помощью delay думал замедлить. Самому не понятно, вроде все работать должно... Спасибо.
 
 
 
b707
Offline
Зарегистрирован: 26.05.2017

dneese - поясните, плиз, смысл вот этой заковыристой конструкции:

 if(digitalRead(1)==HIGH == LOW && flag1 == true)

чему все-таки должен равнятся первый член выражения - HIGh или LOW ?

А насчет делеев Вы зря. В том элементарном коде, что привел VsemDobra, они, ИМХО, вполне будут работать

b707
Offline
Зарегистрирован: 26.05.2017

VsemDobra пишет:

Код полностью. 
 
collect2.exe: error: ld returned 5 exit status
 
 

Только что собрал Ваш код - никаких ошибок.  Результат:

Скетч использует 5818 байт (18%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 314 байт (15%) динамической памяти, оставляя 1734 байт для локальных переменных. Максимум: 2048 байт.

Ардуино ИДЕ 1.8.3 , библиотеки с гитхаба.

Думаю, у вас какие-то проблемы с конфигурацией среды, с делеями это вряд ли связано

b707
Offline
Зарегистрирован: 26.05.2017

VsemDobra - попробуйте переключить ИДЕ на любую другую плату и запустите компиляцию (не важно, что будут ошибки).  Потом снова вернитесь на нужную плату и соберите снова, вполне возможно, что ошибка линкера исчесзнет.

VsemDobra
Offline
Зарегистрирован: 24.03.2019

Переключение на другие платы ничего не дало. Воспользовался предыдущим  Вашим советом, снес IDE 1.6.7  и установил 1.8.7 и все получилось.  Заметил и раньше, что старая IDE 1.6.7  кривая была - пару раз окно скетча само по себе закрывалось. Есть конечно над чем еще поработать, но и показать уже есть что.  Хочется разделить разряды, ну чтобы крутилась по кругу  только одна цифра. Позже вернусь к этой задаче. Но в первую очередь неплохо бы  организовать  сохранение  текущих  значений  цифр. Тут я пока совсем мелко плаваю. Полагаю следует в  код вписать команду. Но,  что  это за команда и куда ее привинтить?

Огромное СПАСИБО  dneese, d707 за  реальную  помощь  в решении  реальной  задачи.  

VsemDobra
Offline
Зарегистрирован: 24.03.2019

Попробовал, добавил еще 2 кнопки. Компилируется, но коректно работает только вторая кнопка (одно нажатие, одна единица).  На сегодня достаточно, продолжу завтра на свежую голову - все перепроверю, может сам пропустил чего.  

Спасибо dneese за Вашу помощь. Код предложенный  Вами в начале - вполне рабочий. Как я уже написал, IDE у меня оказалась кривой.  delay хоть и не рекомендуется, но в данном случае  неплохо справляется. И с дребезгом паралельно борется. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

b707 пишет:

dneese - поясните, плиз, смысл вот этой заковыристой конструкции:

 if(digitalRead(1)==HIGH == LOW && flag1 == true)

чему все-таки должен равнятся первый член выражения - HIGh или LOW ?

if(!digitalRead(1) && flag1)

 

b707
Offline
Зарегистрирован: 26.05.2017

VsemDobra пишет:

Попробовал, добавил еще 2 кнопки. Компилируется, но коректно работает только вторая кнопка (одно нажатие, одна единица).

код выкладывайте

VsemDobra
Offline
Зарегистрирован: 24.03.2019

b707 пишет:

VsemDobra пишет:

Попробовал, добавил еще 2 кнопки. Компилируется, но коректно работает только вторая кнопка (одно нажатие, одна единица).

код выкладывайте

Код из сообшения 315 , + 2 кнопки.

  #include <SPI.h>        //
  #include <DMD.h>        //
  #include <TimerOne.h>   //
  #include "Arial_black_16.h"
   DMD dmd(1,1);
    unsigned int ui1, ui2, ui3, ui4;

boolean flag1 =  false;
boolean flag2 =  false;
boolean flag3 =  false;
boolean flag4 =  false;
 
  void ScanDMD()
  {
    dmd.scanDisplayBySPI();
  }
  void setup(void)
  {
      
     Timer1.initialize( 5000 );           //
     Timer1.attachInterrupt( ScanDMD );   //
    
     dmd.selectFont(Arial_Black_16);
     ui1 = 0;
     ui2 = 0;
     ui3 = 0;
     ui4 = 0;
    
    pinMode(4, INPUT);         //  устанавливает режим работы - вход для 1го вход/выхода (pin)
    pinMode(3, INPUT);         //  устанавливает режим работы - вход для 2го вход/выхода (pin)
    pinMode(2, INPUT);         //  устанавливает режим работы - вход для 3го вход/выхода (pin)
    pinMode(1, INPUT);         //  устанавливает режим работы - вход для 4го вход/выхода (pin)
  }
    
  void loop(void)
  {
  
   if(digitalRead(1)==HIGH&& flag1 ==  false)   //если кнопка нажата ..
     {
     ui1 = ui1+1; // прибавляем 1000
     if (ui1 > 9)
       {
       ui1=0;// обнулите переменную
       }
  dmd.drawChar( 0, 1, '0'+(ui1), GRAPHICS_NORMAL ); // a
  flag1 = true;//поднимаем флаг
     }

   if(digitalRead(1)==HIGH == LOW && flag1 == true) //если первая кнопка не нажата ..
     {
    flag1 =  false; //обнуляем переменную flag, опускаем флаг
     }


      
   if(digitalRead(2)==HIGH&& flag2 ==  false)   //если кнопка нажата ..     
    {
     ui2 = ui2+1; // прибавляем 100
    if (ui2 > 9)
       {
       ui2=0;// обнулите переменную
       }
  dmd.drawChar( 8, 1, '0'+(ui2), GRAPHICS_NORMAL ); // b
  flag2 = true;//поднимаем флаг
       }  
if(digitalRead(2)==HIGH == LOW && flag2 == true) //если первая кнопка не нажата ..
   {
    flag2 =  false; //обнуляем переменную flag, опускаем флаг
   }



   if(digitalRead(3)==HIGH&& flag1 ==  false)    //если кнопка нажата ..
    {
     ui1 = ui1+1; // прибавляем 1000
     if (ui1 > 9)
     {
      ui1=0;// обнулите переменную
     }
  dmd.drawChar( 0, 1, '0'+(ui1), GRAPHICS_NORMAL ); // a
  flag1 = true;//поднимаем флаг
     }

   if(digitalRead(3)==HIGH == LOW && flag1 == true) //если первая кнопка не нажата ..
    {
    flag1 =  false; //обнуляем переменную flag, опускаем флаг
    }



   if(digitalRead(4)==HIGH&& flag1 ==  false)   //если кнопка нажата ..
    {
     ui1 = ui1+1; // прибавляем 1000
     if (ui1 > 9)
     {
     ui1=0;// обнулите переменную
     }
   dmd.drawChar( 0, 1, '0'+(ui1), GRAPHICS_NORMAL ); // a
   flag1 = true;//поднимаем флаг
    }

   if(digitalRead(4)==HIGH == LOW && flag1 == true) //если первая кнопка не нажата ..
  {
    flag1 =  false; //обнуляем переменную flag, опускаем флаг
  }

  }

 

dneese
Offline
Зарегистрирован: 20.12.2018

исправил копипаст был, а сами не догадались? :-)

dneese пишет:

не флудите пожалуйста на техническом форуме,

я выше предложил уже такую конструкцию, вы её пробовали? делей вам не нужен, не используйте его без надобности, упростил Вам код

  #include <SPI.h>        //
  #include <DMD.h>        //
  #include <TimerOne.h>   //
  #include "Arial_black_16.h"
   DMD dmd(1,1);
    unsigned int ui1, ui2, ui3, ui4;

boolean flag1 =  false;
boolean flag2 =  false;
boolean flag3 =  false;
boolean flag4 =  false;
 
  void ScanDMD()
  {
    dmd.scanDisplayBySPI();
  }
  
  void setup(void)
  {
      
     Timer1.initialize( 5000 );           //
     Timer1.attachInterrupt( ScanDMD );   //
    
     dmd.selectFont(Arial_Black_16);
     ui1 = 0;
     ui2 = 0;
     ui3 = 0;
     ui4 = 0;
    
    pinMode(4, INPUT);         //  устанавливает режим работы - вход для 1го вход/выхода (pin)
    pinMode(3, INPUT);         //  устанавливает режим работы - вход для 2го вход/выхода (pin)
    pinMode(2, INPUT);         //  устанавливает режим работы - вход для 3го вход/выхода (pin)
    pinMode(1, INPUT);         //  устанавливает режим работы - вход для 4го вход/выхода (pin)
  }
    
  void loop(void)
  {
   //////////////////////////
   if(digitalRead(1)==HIGH&& flag1 ==  false) {  //если кнопка нажата ..
  
  ui1 = ui1+1; // прибавляем 1000
    if (ui1 > 9){
       ui1=0;// обнулите переменную
    }
  dmd.drawChar( 0, 1, '0'+(ui1), GRAPHICS_NORMAL ); // a
  flag1 = true;//поднимаем флаг
   }

   if(digitalRead(1)== LOW && flag1 == true) //если первая кнопка не нажата ..
  {
    flag1 =  false; //обнуляем переменную flag, опускаем флаг
  }
   
  /////////////////////////
   if(digitalRead(2)==HIGH&& flag2 ==  false) {  //если кнопка нажата ..     
 
   ui2 = ui2+1; // прибавляем 100
    if (ui2 > 9){
           ui2=0;// обнулите переменную
        }
  dmd.drawChar( 8, 1, '0'+(ui2), GRAPHICS_NORMAL ); // b
  flag2 = true;//поднимаем флаг
  }  
if(digitalRead(2) == LOW && flag2 == true) //если первая кнопка не нажата ..
  {
    flag2 =  false; //обнуляем переменную flag, опускаем флаг
  }



  }
 /////////////////////////////////////

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

, у меня нет свободных выходов поэтому проверить немогу, проверьте сами только не перепутайте выходы кнопок с выходами на дисплей

b707
Offline
Зарегистрирован: 26.05.2017

VsemDobra - во-первых, посмотрите исправленный код  dneese в сообщении #325 и исправте у себя.

А во-вторых, зачем вы показываете мне его код - вы же вроде написали, что вы его код поправили и добавили делеи... не вижу их в коде. Выкладывайте свой код, который у вас не работает.

VsemDobra
Offline
Зарегистрирован: 24.03.2019

Господа, случилась набольшая путаница. В #316 код от dneese  в который  я  добавил делеи и который скомпилировался и  заработал только при ИДЕ 1.8.7.   (не считая  перелистывание  цифр пока нажата кнопка - это видно по коду и этим в принципе можно пренебреч).  В #324 я добавлил только 2 кнопки, без делеев. Просто не успел его детальнее проработать - профукал копипаст.  Учусь пока я - опыта почти нет. Проверю код из #325 и отпишусь.  Спасибо.

VsemDobra
Offline
Зарегистрирован: 24.03.2019

Уважаемые форумчане. Поразмыслил и пришел к выводу, что не плохо бы к выстраданному коду

#include <SPI.h>        //
#include <DMD.h>        //
#include <TimerOne.h>   //
#include "Arial_black_16.h"
 DMD dmd(1,1);
 
unsigned int ui;
 
void ScanDMD()
{
  dmd.scanDisplayBySPI();
}
void ShowClockNumbers( unsigned int uiTime, byte bColonOn )
{
   dmd.clearScreen(true);
   dmd.drawChar(  -1,  1,'0'+((uiTime%10000)/1000),  GRAPHICS_NORMAL );   // thousands
   dmd.drawChar(  7,  1, '0'+((uiTime%1000) /100),  GRAPHICS_NORMAL );   // hundreds
   dmd.drawChar( 17,  1, '0'+((uiTime%100)  /10),   GRAPHICS_NORMAL );   // tens
   dmd.drawChar( 25,  1, '0'+ (uiTime%10),          GRAPHICS_NORMAL );   // units
   dmd.drawChar( 14,  3, '.', GRAPHICS_OR     );   // clock colon overlay on
 
}
void setup(void)    
{
    
   Timer1.initialize( 500 );           //
   Timer1.attachInterrupt( ScanDMD );   //
   dmd.clearScreen( true ); 
   dmd.selectFont(Arial_Black_16);
    
 
  pinMode(1, INPUT);         //  устанавливает режим работы - вход для 0го вход/выхода (pin)
  pinMode(2, INPUT);         //  устанавливает режим работы - вход для 1го вход/выхода (pin)
  pinMode(3, INPUT);         //  устанавливает режим работы - вход для 2го вход/выхода (pin)
  pinMode(4, INPUT);         //  устанавливает режим работы - вход для 3го вход/выхода (pin)
}
  
void loop(void)
   
 { 
  if(digitalRead(1)==HIGH)//если кнопка нажата ..
 { ui = ui+1; // прибавляем 1 
 ShowClockNumbers( ui, true );
 delay(100);
 }
  if(digitalRead(2)==HIGH)//если кнопка нажата ..
 { ui = ui+10; // прибавляем 10
 ShowClockNumbers( ui, true );
 delay(100);
 }
  if(digitalRead(3)==HIGH)//если кнопка нажата ..
 { ui = ui+100; // прибавляем 100
 ShowClockNumbers( ui, true );
 delay(100);
 }
  if(digitalRead(4)==HIGH)//если кнопка нажата ..
 { ui = ui+1000; // прибавляем 1000
 ShowClockNumbers( ui, true );
 delay(100);
 }
 }

прикрутить  запоминание  текущих значений цифр при отключении  питания. Есть понимание, что это делается с помощью EEPROM (на борту IDE  имеется). А как?, что?,  куда?  - нет мыслей.  Направьте пожалуйста на путь истинный. Спасибо.

dneese
Offline
Зарегистрирован: 20.12.2018

вот вам на память: 


void writeEprom(){  // запись числа в память
int bigNum = ui; // число > 255 разбиваем на 2 байта (макс. 65536)
  byte hi = highByte(bigNum); // старший байт
  byte low = lowByte(bigNum); // младший байт
  EEPROM.write(1, hi);  // записываем в ячейку 1 старший байт
  EEPROM.write(2, low); // записываем в ячейку 2 младший байт
  
}

void readEprom (){ //читаем из памяти число

  
    byte val1 = EEPROM.read(1); // считываем 1 байт по адресу ячейки
    byte val2 = EEPROM.read(2); // считываем 1 байт по адресу ячейки
   
    ui=val1*256+val2; //складываем число и присваеваем переменной ui
    

}

 

b707
Offline
Зарегистрирован: 26.05.2017

dneese, в библиотеке EEPROM давно есть методы put() get() позволяющие прямо писать в ЕЕПРОМ любой тип данных, в том числе и инт - без ручного разбиения на байты

VsemDobra
Offline
Зарегистрирован: 24.03.2019

b707 пишет:

dneese, в библиотеке EEPROM давно есть методы put() get() позволяющие прямо писать в ЕЕПРОМ любой тип данных, в том числе и инт - без ручного разбиения на байты

b707, можете пояснить нагляднее ? Спасибо.

b707
Offline
Зарегистрирован: 26.05.2017

VsemDobra пишет:

b707, можете пояснить нагляднее ? Спасибо.

http://wikihandbk.com/wiki/Arduino:%D0%91%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B8/EEPROM/put()

то есть вместо куска кода выше

void writeEprom(){  // запись числа в память
int bigNum = ui; // число > 255 разбиваем на 2 байта (макс. 65536)
  byte hi = highByte(bigNum); // старший байт
  byte low = lowByte(bigNum); // младший байт
  EEPROM.write(1, hi);  // записываем в ячейку 1 старший байт
  EEPROM.write(2, low); // записываем в ячейку 2 младший байт
  
}

для записи bigNum в ЕЕПРОМ достаточно одной строчки

EEPROM.put(1,bigNum);

точно так же и с чтением достаточно одной строчки

EEPROM.get(1,bigNum);

 

VsemDobra
Offline
Зарегистрирован: 24.03.2019

Доброго времени суток. Как обещал  проверил код из #325. Немного причесал - пронумеровал переменные, добавил еще 2 кнопки. Все работает. Правда при  включении ничего не светится. Цифры появляются только при первом нажатии на любую из кнопок. Думаю это легко исправить, попробую справиться сам...  В итоге получилось 2 варианта решения одной задачи и оба по своему хороши.  Респект  dneese и  b707

VsemDobra
Offline
Зарегистрирован: 24.03.2019

Всем - здравствуйте. Мой незатейливый девайс (#289 #291) сделаный для  дет.сада заинтересовал учителя физкультуры из местной школы. Только вот экран из одного  модуля 32Х16 оказалось маловат. Решили собрать из четырех подобных модулей, на таком же  ардуино уно. Модули соединяются  так

                             1   2

                             3   4

Шрифт оказался так же мал, хоть и удалось выставить по центру. Решил по совету из #247 с помощью GLCD Font Creator создать новый шрифт. Файл экспортировал в DMD. Но  скетч упорно не желает компилироваться 3-й день бьюсь. Помогите разобраться , что не так или может есть другой способ вывести 4 цифры  на экран из четырех модулей, с возможностью выставлять любую цифру  с помощью 4-х  кнопок.  Спасибо.


#include <SPI.h>       
#include <DMD.h>        
#include <TimerOne.h>   
#include "Small.h"
#define DISPLAYS_ACROSS 2
#define DISPLAYS_DOWN 2

DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);
 
unsigned int ui;

void ScanDMD()
{
  dmd.scanDisplayBySPI();
}
void ShowClockNumbers( unsigned int uiTime, byte bColonOn )
{
   dmd.clearScreen(true);
   dmd.drawChar(  4,  8,'0'+((uiTime%10000)/1000),  GRAPHICS_NORMAL );   // thousands
   dmd.drawChar(  17,  8, '0'+((uiTime%1000) /100),  GRAPHICS_NORMAL );   // hundreds
   dmd.drawChar( 36,  8, '0'+((uiTime%100)  /10),   GRAPHICS_NORMAL );   // tens
   dmd.drawChar( 49,  8, '0'+ (uiTime%10),          GRAPHICS_NORMAL );   // units
   dmd.drawChar( 30,  13, ':', GRAPHICS_OR     );   // clock colon overlay on
 
}
void setup(void)    
{
    
   Timer1.initialize( 500 );           
   Timer1.attachInterrupt( ScanDMD );   
   dmd.clearScreen( true ); 
   dmd.selectFont(new_Font);
    
  

 
  pinMode(1, INPUT);         //  устанавливает режим работы - вход для 0го вход/выхода (pin)
  pinMode(2, INPUT);         //  устанавливает режим работы - вход для 1го вход/выхода (pin)
  pinMode(3, INPUT);         //  устанавливает режим работы - вход для 2го вход/выхода (pin)
  pinMode(4, INPUT);         //  устанавливает режим работы - вход для 3го вход/выхода (pin)
}
  
void loop(void)
   
 { 
  if(digitalRead(1)==HIGH)//если кнопка нажата ..
 { ui = ui+1; // прибавляем 1 
 ShowClockNumbers( ui, true );
 delay(100);
 }
  if(digitalRead(2)==HIGH)//если кнопка нажата ..
 { ui = ui+10; // прибавляем 10
 ShowClockNumbers( ui, true );
 delay(100);
 }
  if(digitalRead(3)==HIGH)//если кнопка нажата ..
 { ui = ui+100; // прибавляем 100
 ShowClockNumbers( ui, true );
 delay(100);
 }
  if(digitalRead(4)==HIGH)//если кнопка нажата ..
 { ui = ui+1000; // прибавляем 1000
 ShowClockNumbers( ui, true );
 delay(100);
 }
 }

 

b707
Offline
Зарегистрирован: 26.05.2017

VsemDobra - ошибку компиляции приведите

VsemDobra
Offline
Зарегистрирован: 24.03.2019

b707 пишет:

VsemDobra - ошибку компиляции приведите

Arduino: 1.8.7 , Плата:"Arduino/Genuino Uno"

 

In file included from C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28:0,

 

                 from sketch\sketch_apr05b.ino.cpp:1:

 

C:\Documents and Settings\Admin\Мои документы\Arduino\libraries\DMD/Small.h:48:27: error: variable 'new_Font' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

 

 static uint8_t new_Font[] PROGMEM = {

 

                           ^

exit status 1

Ошибка компиляции для платы Arduino/Genuino Uno.

 

Этот отчёт будет иметь больше информации с

включенной опцией Файл -> Настройки ->

"Показать подробный вывод во время компиляции"

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Гуглопереводчиком вот это:

Цитата:

variable 'new_Font' must be const

Догадаетесь, какое ключевое слово надо дописать в объявлении переменной?

VsemDobra
Offline
Зарегистрирован: 24.03.2019

Если бы... оно было бы уже на своем  месте...

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

VsemDobra пишет:

Если бы... оно было бы уже на своем  месте...

А если ещё раз перечитать мой пост выше и обратить внимание на специально выделенное жирным? Всё равно не догадываетесь?

VsemDobra
Offline
Зарегистрирован: 24.03.2019

DIYMan пишет:

VsemDobra пишет:

Если бы... оно было бы уже на своем  месте...

А если ещё раз перечитать мой пост выше и обратить внимание на специально выделенное жирным? Всё равно не догадываетесь?

Спасибо. Нашел куда притулить. Её к стати фонт креатор не дописал в файл. Работает.

b707
Offline
Зарегистрирован: 26.05.2017

VsemDobra пишет:

Спасибо. Нашел куда притулить. Её к стати фонт креатор не дописал в файл. Работает.

ну так фонт креатор не знает, как и куда вы будете этот фонт использовать. Правильно описывать тип данных - обязанность программиста.

VsemDobra
Offline
Зарегистрирован: 24.03.2019

b707 пишет:

VsemDobra пишет:

Спасибо. Нашел куда притулить. Её к стати фонт креатор не дописал в файл. Работает.

ну так фонт креатор не знает, как и куда вы будете этот фонт использовать. Правильно описывать тип данных - обязанность программиста.

Согласен. Но я не программист, а только учусь.  А фонт крутая прога, рекомендую всем.

VsemDobra
Offline
Зарегистрирован: 24.03.2019

Здравствуйте. С памятью не удается разобраться. Надо чтобы  при подаче  питания  на дисплее  появлялись цифры какие были  на момент выключения питания. Скетч компилируется, но на дисплее при включении нули.  Подскажите пожалуйста, чего не хватает или  что не на своем месте  в  коде?  Спасибо.

#include <EEPROM.h>  

#include <SPI.h>       
#include <DMD.h>        
#include <TimerOne.h>   
#include "Smmall.h"
#define DISPLAYS_ACROSS 2
#define DISPLAYS_DOWN 2
 
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);
 
unsigned int ui;
int bigNum = ui; 
void ScanDMD()
{
  dmd.scanDisplayBySPI();
}
void ShowClockNumbers( unsigned int uiTime, byte bColonOn )
{
   dmd.drawChar(  0,  4,'0'+((uiTime%10000)/1000),  GRAPHICS_NORMAL );   // thousands
   dmd.drawChar(  16,  4, '0'+((uiTime%1000) /100),  GRAPHICS_NORMAL );   // hundreds
   dmd.drawChar( 33,  4, '0'+((uiTime%100)  /10),   GRAPHICS_NORMAL );   // tens
   dmd.drawChar( 49,  4, '0'+ (uiTime%10),          GRAPHICS_NORMAL );   // units
   dmd.drawChar( 30,  7, ':', GRAPHICS_OR     );   // clock colon overlay on
 
   {
    EEPROM.get(1,bigNum);
   }
 
}
void setup(void)    
{
    
   Timer1.initialize( 500 );           
   Timer1.attachInterrupt( ScanDMD );   
   dmd.clearScreen( true ); 
   dmd.selectFont(new_Font);
   
    
     
    ui = bigNum;                    
   ShowClockNumbers( ui, true );   
   delay( 100 );                  
 
 
  pinMode(1, INPUT);         //  устанавливает режим работы - вход для 0го вход/выхода (pin)
  pinMode(2, INPUT);         //  устанавливает режим работы - вход для 1го вход/выхода (pin)
  pinMode(3, INPUT);         //  устанавливает режим работы - вход для 2го вход/выхода (pin)
  pinMode(4, INPUT);         //  устанавливает режим работы - вход для 3го вход/выхода (pin)
}
  
void loop(void)
   
 { 
  if(digitalRead(1)==HIGH)//если кнопка нажата ..
 { ui = ui+1; // прибавляем 1 
 ShowClockNumbers( ui, true );
 delay(100);
 }
  if(digitalRead(2)==HIGH)//если кнопка нажата ..
 { ui = ui+10; // прибавляем 10
 ShowClockNumbers( ui, true );
 delay(100);
 }
  if(digitalRead(3)==HIGH)//если кнопка нажата ..
 { ui = ui+100; // прибавляем 100
 ShowClockNumbers( ui, true );
 delay(100);
 }
  if(digitalRead(4)==HIGH)//если кнопка нажата ..
 { ui = ui+1000; // прибавляем 1000
 ShowClockNumbers( ui, true );
 delay(100); 
 }
 
 {
  EEPROM.put(1,bigNum);
 }
 }
 
Модератор: Рекомендую отформатировать код и вставить с нумерацией строк, воспользовавшись кнопкой "code".
 
b707
Offline
Зарегистрирован: 26.05.2017

VsemDobra пишет:

 что не на своем месте  в  коде?

Э-эээ... такое впечатление, что вы программирование совсем не знаете... надо либо осваивать, либо, простите, не стоит и лезть.
В этом коде очевидно не на своем месте EEPROM.get() и EEPROM.put().
 
EEPROM.get должен вызываться в setup() до использования bigNum, а EEPROM.put вообще нельзя вызывать в Loop() - вы так EEPROM убьете за пару часов, если еще не убили.
Вставьте код правиьно, чтобы можно было обсуждать с номерами строк.
VsemDobra
Offline
Зарегистрирован: 24.03.2019

b707 пишет:

VsemDobra пишет:

 что не на своем месте  в  коде?

Э-эээ... такое впечатление, что вы программирование совсем не знаете... надо либо осваивать, либо, простите, не стоит и лезть.
 

Знаний по программированию - минимум, с самого начала говорил об этом. Ну уж очень интересно и увлекательно.  Код как надо вставил, гляньте пожалуйста. Спасибо.

#include <EEPROM.h>  
#include <SPI.h>       
#include <DMD.h>        
#include <TimerOne.h>   
#include "Smmall.h"
#define DISPLAYS_ACROSS 2
#define DISPLAYS_DOWN 2
 
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);
 
unsigned int ui;
int bigNum = ui; 
void ScanDMD()
{
  dmd.scanDisplayBySPI();
}
void ShowClockNumbers( unsigned int uiTime, byte bColonOn )
{
   dmd.drawChar(  0,  4,'0'+((uiTime%10000)/1000),  GRAPHICS_NORMAL );   // thousands
   dmd.drawChar(  16,  4, '0'+((uiTime%1000) /100),  GRAPHICS_NORMAL );   // hundreds
   dmd.drawChar( 33,  4, '0'+((uiTime%100)  /10),   GRAPHICS_NORMAL );   // tens
   dmd.drawChar( 49,  4, '0'+ (uiTime%10),          GRAPHICS_NORMAL );   // units
   dmd.drawChar( 30,  7, ':', GRAPHICS_OR     );   // clock colon overlay on
 
 
}
void setup(void)    
{
    
   Timer1.initialize( 500 );           
   Timer1.attachInterrupt( ScanDMD );   
   dmd.clearScreen( true ); 
   dmd.selectFont(new_Font);
   
  {
    EEPROM.get(1,bigNum);
  }

     
    ui = bigNum;                    
   ShowClockNumbers( ui, true );   
   delay( 100 );                  
 
 
  pinMode(1, INPUT);         //  устанавливает режим работы - вход для 0го вход/выхода (pin)
  pinMode(2, INPUT);         //  устанавливает режим работы - вход для 1го вход/выхода (pin)
  pinMode(3, INPUT);         //  устанавливает режим работы - вход для 2го вход/выхода (pin)
  pinMode(4, INPUT);         //  устанавливает режим работы - вход для 3го вход/выхода (pin)
}
  
void loop(void)
   
 { 
  if(digitalRead(1)==HIGH)//если кнопка нажата ..
 { ui = ui+1; // прибавляем 1 
 ShowClockNumbers( ui, true );
 delay(100);
 }
  if(digitalRead(2)==HIGH)//если кнопка нажата ..
 { ui = ui+10; // прибавляем 10
 ShowClockNumbers( ui, true );
 delay(100);
 }
  if(digitalRead(3)==HIGH)//если кнопка нажата ..
 { ui = ui+100; // прибавляем 100
 ShowClockNumbers( ui, true );
 delay(100);
 }
  if(digitalRead(4)==HIGH)//если кнопка нажата ..
 { ui = ui+1000; // прибавляем 1000
 ShowClockNumbers( ui, true );
 delay(100); 
 }
 
 {
  EEPROM.put(1,bigNum);
 }
 }

 

Hr.Smartus
Offline
Зарегистрирован: 27.05.2017

Народ, вопрос по выводу текста в 2 строки маленьким шрифтом.

У кого-то получалось сделать скроллинг одной строки независимо от второй? Нужна подобная функция в случае, если текст не влезает в табло

dneese
Offline
Зарегистрирован: 20.12.2018

да делал такое

 /*This example illustrates two user funcions of LedP10 library
  *First function-showmsg_single_scroll is for scroling of single message on P10 panel with 4 arguments which are message, no. of times of message scrolling, speed and font.
  *for message, pointer to a character string can be passed. For continuously running the message, INF can be passed in second argument, spped can be in range of 0-30, 
   and font can be 0 or 1 as two type of fonts are currently supported for full screen messages. 
   
  * For second function-showmsg_double_scroll, there would be 7 arguments, 2 for messages, two for no. of times of message scrolling, two for speed, and last one for font. 
  * Specification being same as for single scrolling function, except only ont font id provided for double scrolling and it's value should be 0.
  * 
  */
 
#include <TimerOne.h>
#include"SPI.h"
#include <ledP10.h>

LedP10 myled;

void setup() 
{
    myled.init(6,7,8,9 ,1);
	 /*
      P10 Select Line A - Arduino Pin 6
      P10 Select Line B - Arduino Pin 7
      P10 Store Line    - Arduino Pin 8
      P10 OE Line       - Arduino Pin 9
      No. of Panels     - 1 (Can be up to 10)
      */
	
    myled.showmsg_single_scroll("this is single led test",2,3,0);
	//(сообщение,сколько раз,скорость,шрифт)
    delay(30000);
    myled.showmsg_double_scroll("this is double led test1","this is double led test2",10,INF,3,1,0); 
	//("mesage1","mesage2",сколько раз,inf,speed,speed,font)
	//inf-безконечно
}

void loop() {
  
}

 

Hr.Smartus
Offline
Зарегистрирован: 27.05.2017

Благодарю, попробую. А что за либа ledP10.h?

dneese
Offline
Зарегистрирован: 20.12.2018

Hr.Smartus пишет:

А что за либа ledP10.h?

специально для модуля P10, альтернатива DMD, DMD2

Hr.Smartus
Offline
Зарегистрирован: 27.05.2017

https://hackaday.io/project/27404-ledp10-arduino-library-for-p10-led-display-panels - это оно? Если нет - поделитесь ссылочкой =)