Здравствуйте. Делаю часы на семисегментных индикаторах. Их 4 шт. Имеются 3 кнопки. Две из которых устанавливают время. 3 служит для переключения между минутами и часами, а также при удержании отправляет в функцию где и происходит отсчёт времени. Проблема в строках 112 - 115. То есть когда мы установили время, запустили функцию Clock(), данные которые записались в one_seg two_seg three_seg four_seg, не передаются функциям one two three four. Я в программировании новичок, хотелось бы узнать как исправить ошибку.
#define A 2
#define B 3
#define C 4
#define D 5
#define E 6
#define F 7
#define G 8
#include <GyverButton.h>
GButton button1(A0, HIGH_PULL);
GButton button2(A1, HIGH_PULL);
GButton button3(A2, HIGH_PULL);
////////////////////
///////////////////
byte one_seg = 0;
byte two_seg = 0;
byte three_seg = 0;
byte four_seg = 0;
byte minuts_set = 0;
byte hours_set = 0;
byte minuts_need = 0;
byte hours_need = 0;
byte val = 0;
unsigned long timing = 0;
unsigned long tim = millis();
void setup() {
Serial.begin(9600);
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(A0, INPUT_PULLUP);
pinMode(A1, INPUT_PULLUP);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
}
void loop() {
static bool insert_hours = true;
one(); digitalWrite(9, HIGH); delay(1); digitalWrite(9, LOW); delay(1);
two(); digitalWrite(10, HIGH); delay(1); digitalWrite(10, LOW); delay(1);
three(); digitalWrite(11, HIGH); delay(1); digitalWrite(11, LOW); delay(1);
four(); digitalWrite(12, HIGH); delay(1); digitalWrite(12, LOW); delay(1);
button1.tick();
button2.tick();
button3.tick();
if (button1.isClick()) {
insert_hours = !insert_hours;
}
if (button1.isHolded()) {
Clock();
}
if (button2.isClick() or button2.isStep()) {
if (insert_hours) {
if (++minuts_set > 59) {
minuts_set = 0;
}
}
else {
if (++hours_set > 23) {
hours_set = 0;
}
}
}
///////////////////////////////////////////
if (button3.isClick() or button3.isStep()) {
if (insert_hours) {
if (--minuts_set < 0) {
minuts_set = 59;
}
}
else {
if (--hours_set < 0) {
hours_set = 23;
}
}
}
one_seg = minuts_set % 10;
two_seg = minuts_set / 10;
three_seg = hours_set % 10;
four_seg = hours_set / 10;
}
void Clock(void) {
minuts_need = minuts_set - 1;
hours_need = hours_set;
while (true) {
if (millis() - timing > 1000) {
timing = millis();
++minuts_need;
if (minuts_need > 59) {
minuts_need = 0;
++hours_need;
if (hours_need > 23) {
hours_need = 0;
}
}
}
one_seg = minuts_need%10;
two_seg = minuts_need/10;
three_seg = hours_need %10;
four_need = hours_need/10;
}
}
void one() {
if (one_seg == 0 || one_seg == 10 || one_seg == 20 || one_seg == 30 || one_seg == 40 || one_seg == 50) {
digitalWrite(A, 1);
digitalWrite(B, 1);
digitalWrite(C, 1);
digitalWrite(D, 1);
digitalWrite(E, 1);
digitalWrite(F, 1);
digitalWrite(G, 0);
}
if (one_seg == 1 || one_seg == 11 || one_seg == 21 || one_seg == 31 || one_seg == 41 || one_seg == 51) {
digitalWrite(A, 0);
digitalWrite(B, 1);
digitalWrite(C, 1);
digitalWrite(D, 0);
digitalWrite(E, 0);
digitalWrite(F, 0);
digitalWrite(G, 0);
}
if (one_seg == 2 || one_seg == 12 || one_seg == 22 || one_seg == 32 || one_seg == 42 || one_seg == 52) {
digitalWrite(A, 1);
digitalWrite(B, 1);
digitalWrite(C, 0);
digitalWrite(D, 1);
digitalWrite(E, 1);
digitalWrite(F, 0);
digitalWrite(G, 1);
}
if (one_seg == 3 || one_seg == 13 || one_seg == 23 || one_seg == 33 || one_seg == 43 || one_seg == 53) {
digitalWrite(A, 1);
digitalWrite(B, 1);
digitalWrite(C, 1);
digitalWrite(D, 1);
digitalWrite(E, 0);
digitalWrite(F, 0);
digitalWrite(G, 1);
}
if (one_seg == 4 || one_seg == 14 || one_seg == 24 || one_seg == 34 || one_seg == 44 || one_seg == 54) {
digitalWrite(A, 0);
digitalWrite(B, 1);
digitalWrite(C, 1);
digitalWrite(D, 0);
digitalWrite(E, 0);
digitalWrite(F, 1);
digitalWrite(G, 1);
}
if (one_seg == 5 || one_seg == 15 || one_seg == 25 || one_seg == 35 || one_seg == 45 || one_seg == 55) {
digitalWrite(A, 1);
digitalWrite(B, 0);
digitalWrite(C, 1);
digitalWrite(D, 1);
digitalWrite(E, 0);
digitalWrite(F, 1);
digitalWrite(G, 1);
}
if (one_seg == 6 || one_seg == 16 || one_seg == 26 || one_seg == 36 || one_seg == 46 || one_seg == 56) {
digitalWrite(A, 1);
digitalWrite(B, 0);
digitalWrite(C, 1);
digitalWrite(D, 1);
digitalWrite(E, 1);
digitalWrite(F, 1);
digitalWrite(G, 1);
}
if (one_seg == 7 || one_seg == 17 || one_seg == 27 || one_seg == 37 || one_seg == 47 || one_seg == 57) {
digitalWrite(A, 1);
digitalWrite(B, 1);
digitalWrite(C, 1);
digitalWrite(D, 0);
digitalWrite(E, 0);
digitalWrite(F, 0);
digitalWrite(G, 0);
}
if (one_seg == 8 || one_seg == 18 || one_seg == 28 || one_seg == 38 || one_seg == 48 || one_seg == 58) {
digitalWrite(A, 1);
digitalWrite(B, 1);
digitalWrite(C, 1);
digitalWrite(D, 1);
digitalWrite(E, 1);
digitalWrite(F, 1);
digitalWrite(G, 1);
}
if (one_seg == 9 || one_seg == 19 || one_seg == 29 || one_seg == 39 || one_seg == 49 || one_seg == 59) {
digitalWrite(A, 1);
digitalWrite(B, 1);
digitalWrite(C, 1);
digitalWrite(D, 1);
digitalWrite(E, 0);
digitalWrite(F, 1);
digitalWrite(G, 1);
}
}
void two() {
if (two_seg == 0) {
digitalWrite(A, 1);
digitalWrite(B, 1);
digitalWrite(C, 1);
digitalWrite(D, 1);
digitalWrite(E, 1);
digitalWrite(F, 1);
digitalWrite(G, 0);
}
if (two_seg == 1) {
digitalWrite(A, 0);
digitalWrite(B, 1);
digitalWrite(C, 1);
digitalWrite(D, 0);
digitalWrite(E, 0);
digitalWrite(F, 0);
digitalWrite(G, 0);
}
if (two_seg == 2) {
digitalWrite(A, 1);
digitalWrite(B, 1);
digitalWrite(C, 0);
digitalWrite(D, 1);
digitalWrite(E, 1);
digitalWrite(F, 0);
digitalWrite(G, 1);
}
if (two_seg == 3) {
digitalWrite(A, 1);
digitalWrite(B, 1);
digitalWrite(C, 1);
digitalWrite(D, 1);
digitalWrite(E, 0);
digitalWrite(F, 0);
digitalWrite(G, 1);
}
if (two_seg == 4) {
digitalWrite(A, 0);
digitalWrite(B, 1);
digitalWrite(C, 1);
digitalWrite(D, 0);
digitalWrite(E, 0);
digitalWrite(F, 1);
digitalWrite(G, 1);
}
if (two_seg == 5) {
digitalWrite(A, 1);
digitalWrite(B, 0);
digitalWrite(C, 1);
digitalWrite(D, 1);
digitalWrite(E, 0);
digitalWrite(F, 1);
digitalWrite(G, 1);
}
}
void three() {
if (three_seg == 0 || three_seg == 10 || three_seg == 20) {
digitalWrite(A, 1);
digitalWrite(B, 1);
digitalWrite(C, 1);
digitalWrite(D, 1);
digitalWrite(E, 1);
digitalWrite(F, 1);
digitalWrite(G, 0);
}
if (three_seg == 1 || three_seg == 11 || three_seg == 21) {
digitalWrite(A, 0);
digitalWrite(B, 1);
digitalWrite(C, 1);
digitalWrite(D, 0);
digitalWrite(E, 0);
digitalWrite(F, 0);
digitalWrite(G, 0);
}
if (three_seg == 2 || three_seg == 12 || three_seg == 22) {
digitalWrite(A, 1);
digitalWrite(B, 1);
digitalWrite(C, 0);
digitalWrite(D, 1);
digitalWrite(E, 1);
digitalWrite(F, 0);
digitalWrite(G, 1);
}
if (three_seg == 3 || three_seg == 13 || three_seg == 23) {
digitalWrite(A, 1);
digitalWrite(B, 1);
digitalWrite(C, 1);
digitalWrite(D, 1);
digitalWrite(E, 0);
digitalWrite(F, 0);
digitalWrite(G, 1);
}
if (three_seg == 4 || three_seg == 14) {
digitalWrite(A, 0);
digitalWrite(B, 1);
digitalWrite(C, 1);
digitalWrite(D, 0);
digitalWrite(E, 0);
digitalWrite(F, 1);
digitalWrite(G, 1);
}
if (three_seg == 5 || three_seg == 15) {
digitalWrite(A, 1);
digitalWrite(B, 0);
digitalWrite(C, 1);
digitalWrite(D, 1);
digitalWrite(E, 0);
digitalWrite(F, 1);
digitalWrite(G, 1);
}
if (three_seg == 6 || three_seg == 16) {
digitalWrite(A, 1);
digitalWrite(B, 0);
digitalWrite(C, 1);
digitalWrite(D, 1);
digitalWrite(E, 1);
digitalWrite(F, 1);
digitalWrite(G, 1);
}
if (three_seg == 7 || three_seg == 17) {
digitalWrite(A, 1);
digitalWrite(B, 1);
digitalWrite(C, 1);
digitalWrite(D, 0);
digitalWrite(E, 0);
digitalWrite(F, 0);
digitalWrite(G, 0);
}
if (three_seg == 8 || three_seg == 18) {
digitalWrite(A, 1);
digitalWrite(B, 1);
digitalWrite(C, 1);
digitalWrite(D, 1);
digitalWrite(E, 1);
digitalWrite(F, 1);
digitalWrite(G, 1);
}
if (three_seg == 9 || three_seg == 19) {
digitalWrite(A, 1);
digitalWrite(B, 1);
digitalWrite(C, 1);
digitalWrite(D, 1);
digitalWrite(E, 0);
digitalWrite(F, 1);
digitalWrite(G, 1);
}
}
void four() {
if (four_seg == 0) {
digitalWrite(A, 1);
digitalWrite(B, 1);
digitalWrite(C, 1);
digitalWrite(D, 1);
digitalWrite(E, 1);
digitalWrite(F, 1);
digitalWrite(G, 0);
}
if (four_seg == 1) {
digitalWrite(A, 0);
digitalWrite(B, 1);
digitalWrite(C, 1);
digitalWrite(D, 0);
digitalWrite(E, 0);
digitalWrite(F, 0);
digitalWrite(G, 0);
}
if (four_seg == 2) {
digitalWrite(A, 1);
digitalWrite(B, 1);
digitalWrite(C, 0);
digitalWrite(D, 1);
digitalWrite(E, 1);
digitalWrite(F, 0);
digitalWrite(G, 1);
}
}