Нужна помощь в редактирование скетча Цифровой счетчик на TM1637..

Z
Offline
Зарегистрирован: 24.08.2017
В приведеном ниже коде индекатор разбит на 2 двузначных числа
 нужно разделить 4х значный индекатор на 4 однозначных числа
и добавить 2 кнопки для 2 добавившихся цифр., а звук и ускорение переключения при долгом нажатие нужно вырезать. Знания програмированния нет! Зарание благадарю за уделёнае мне время для оказания помощи!
{САМ СКЕТЧ НИЖЕ БЕЗ ИЗМЕНЕНИЙ КАК ЕСТЬ!}
/*
Цифровой счетчик.
Описание действия. Теоретическая часть.
Устройство служит для ведения счета игры от 0 до 99.
После включения питания запускается заставка,
демонстрирующая исправность всех светодиодов и динамика.
Затем на дисплее загорается 0000.
Точки загораются, когда задействованы кнопки.
Каждое изменение индикации сопровождается звуком той или ной тональности.
На индикаторе отображается два двузначных числа, для подсчета очков команды "А" и "Б".
Когда однократно нажата кнопка №1, то число очков команды "А" возрастает на 1 очко, а когда №2 - команды "Б".
Если каждую из этих кнопок подержать нажатой,
то число увеличиваются тем быстрее, чем дольше нажата кнопка.
Кнопка №3 изменяет яркость свечения дисплея.
Кнопка №4 - альтернативное действие.
Когда она зажата, то загораются точки.
Если при зажатой копке №4 нажать любую другую кнопку, то точки будут гаснуть.
Кнопки №1 и №2 при зажатой кнопке №4 начнут считать очки в обратную сторону,
а кнопка №3 при этом сбросит счетчик в 0000.
*/
 
 
#define DISPLAY_CLK_PIN 11         // подключаем TM1637
#define DISPLAY_DIO_PIN 12         // подключаем TM1637
#include "TM1637.h"         // библиотека для TM1637
#define Btn_1  7     //назначаем кнопку №1
#define Btn_2  6     //назначаем кнопку №2
#define Btn_3  5     //назначаем кнопку №3
#define Btn_4  4     //назначаем кнопку №4
#define ledPin 13    //вводим эту строчку, чтобы погасить светодиод на плате
 
TM1637 display(DISPLAY_CLK_PIN, DISPLAY_DIO_PIN);
 
unsigned char A=0;         //начало отсчета очков команды "А"
unsigned char B=0;         //начало отсчета очков команды "Б"
unsigned char dots=0;         //для точек индикатора 
 
void setup()
 
{
  display.set(1);  //яркость индикатора (0-7)
   
  pinMode(Btn_1, INPUT_PULLUP);   // включаем внутренний резистор
  pinMode(Btn_2, INPUT_PULLUP);   // включаем внутренний резистор
  pinMode(Btn_3, INPUT_PULLUP);   // включаем внутренний резистор
  pinMode(Btn_4, INPUT_PULLUP);   // включаем внутренний резистор
  pinMode(ledPin, OUTPUT);         //гасим светодиод на плате
}
 
 
void loop()
 
{
  action_buttons();
  displey();
}
 
 
void action_buttons()
 
{
   if (digitalRead(Btn_1)==LOW){delay (250), A++;}         //если кнопка №1 нажата, то счет команды "А" возрастает
   if (digitalRead(Btn_2)==LOW){delay (250), B++;}         //если кнопка №2 нажата, то счет команды "Б" возрастает
}
 
 
void displey()
 
{
   int8_t timeDisp[4];         
   timeDisp[0] = A / 10;    
   timeDisp[1] = A % 10;    
   timeDisp[2] = B / 10;  
   timeDisp[3] = B % 10;  
   
   display.display(timeDisp);  
   display.point(dots ==0 ? POINT_OFF : POINT_ON);  //гасим точки на индикаторе
}
 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вы ошиблись разделом, Вам вот сюда. Там и поблагодарите за помощь.

Z
Offline
Зарегистрирован: 24.08.2017

По данному вопросу помощь уже не требуется, я просил не написать за меня программу а помочь разобраться в этой, по ломав голову 2 вечера я разобраля сам вот выкладываю то что получилось.

Выложеный код полностью исправен и протестирован на UNO и NANO ползуйтесь если комуто пригодится!

#define DISPLAY_CLK_PIN 3      // подключаем TM1637
#define DISPLAY_DIO_PIN 2      // подключаем TM1637
#include "TM1637.h"             // библиотека для TM1637
#define Btn_1  7                //назначаем кнопку №1
#define Btn_2  6                //назначаем кнопку №2
#define Btn_3  5                //назначаем кнопку №3
#define Btn_4  4                //назначаем кнопку №4
#define Btn_5  8                //назначаем кнопку №5
#define Btn_6  9                //назначаем кнопку №6
#define ledPin 13               //вводим эту строчку, чтобы погасить светодиод на плате
 
TM1637 display(DISPLAY_CLK_PIN, DISPLAY_DIO_PIN);
 
unsigned char A=0;         //начало отсчета очков команды "А"
unsigned char B=0;         //начало отсчета очков команды "B"
unsigned char C=0;         //начало отсчета очков команды "C"
unsigned char D=0;         //начало отсчета очков команды "D"
unsigned char dots=0;         //для точек индикатора 
 
void setup()
 
{
  display.set(1);  //яркость индикатора (0-7)
   
  pinMode(Btn_1, INPUT_PULLUP);   // включаем внутренний резистор
  pinMode(Btn_2, INPUT_PULLUP);   // включаем внутренний резистор
  pinMode(Btn_3, INPUT_PULLUP);   // включаем внутренний резистор
  pinMode(Btn_4, INPUT_PULLUP);   // включаем внутренний резистор
  pinMode(Btn_5, INPUT_PULLUP);   // включаем внутренний резистор
  pinMode(Btn_6, INPUT_PULLUP);   // включаем внутренний резистор
  pinMode(ledPin, OUTPUT);         //гасим светодиод на плате
}
 
 
void loop()
 
{
  action_buttons();
  displey();
}
 
 
void action_buttons()
 
{
   if (digitalRead(Btn_1)==LOW){delay (50), A++;}         //если кнопка №1 нажата, то счет команды "А" возрастает
   if (digitalRead(Btn_2)==LOW){delay (50), B++;}         //если кнопка №2 нажата, то счет команды "B" возрастает
   if (digitalRead(Btn_3)==LOW){delay (50), C++;}         //если кнопка №3 нажата, то счет команды "C" возрастает
   if (digitalRead(Btn_4)==LOW){delay (50), D++;}         //если кнопка №4 нажата, то счет команды "D" возрастает
}
 
 
void displey()
 
{
   int8_t timeDisp[4];         
   timeDisp[0] = A / 10;    
   timeDisp[1] = B / 10;    
   timeDisp[2] = C / 10;  
   timeDisp[3] = D / 10; 
 
    
   display.display(timeDisp);  
   display.point(dots ==0 ? POINT_OFF : POINT_ON);  //гасим точки на индикаторе
   
}     
 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Z пишет:

я просил не написать за меня программу а помочь разобраться 

Неправда. Когда хотят разобраться - задают вопросы. В Вашем посте вопросов не было - была только хотелка.

Z пишет:

Выложеный код полностью исправен

Вот и замечательно! Но, правильнее всё же сначала ломать голову, а потом уж постить sos'ы.

Z пишет:

Выложеный код полностью исправен

Программ без ошибок не бывает в природе. Если бы они были, то это было бы нарушением Закона Брукса.

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

Z пишет:

Выложеный код полностью исправен и протестирован на UNO и NANO ползуйтесь если комуто пригодится!

Вранье. Выложенный код безграмотен и работать не будет.  Для того, чтобы в этом убедиться - достаточно внимательно посмотреть на код функции displey()
 
(кстати, сэр, в каком университете Вы изучали английский? :)
andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ЕвгенийП пишет:

Программ без ошибок не бывает в природе. Если бы они были, то это было бы нарушением Закона Брукса.

Не только.

Разве Клапауций не запрещал программы без ошибок?