Всем доброго здравия! Помогите! Есть такой код, все работает, но при нажатии кнопки 1, цифра 1 появляется не сразу, сначала происходит выполнение всего цикла, а затем собственно цифра 1 появляется. Вопрос, как сделать так чтобы при нажатии, цифра появлялась сразу, без ожидания окончания цикла. Работать должно так, при нажатии и удержании кнопки, загорается соответствующая цифра, при отпускании кнопки происходит цикл бегущих сегментов. Спасибо за понимание! int pins[7]={2,3,4,5,6,7,8}; int button1 = 9; int button2 = 10; int button3 = 11; int button4 = 12; int button5 = 13; int button6 = 14; int val = 0; // значения для вывода цифр 0-9 /*byte digitRank[10] = { B11111100, B01100000, B11011010, B11110010, B01100110, B10110110, B10111110, B11100000, B11111110, B11100110}; */ byte digitRank[117][7] = { { 0,0,0,0,0,0,0 }, // = 0 { 0,1,1,0,0,0,0 }, // = 1 { 1,1,0,1,1,0,1 }, // = 2 { 1,1,1,1,0,0,1 }, // = 3 { 0,1,1,0,0,1,1 }, // = 4 { 1,0,1,1,0,1,1 }, // = 5 { 1,1,1,0,1,1,1 }, // = R { 0,0,0,0,0,0,0 }, // = 7 { 1,1,0,0,0,0,0 }, // = 8 { 0,1,0,0,0,0,1 }, // = 9 { 0,0,0,0,1,0,1 }, // = 10 { 0,0,0,1,1,0,0 }, // = 11 { 0,0,1,1,0,0,0 }, // = 12 { 0,0,1,0,0,0,1 }, // = 13 { 0,0,0,0,0,1,1 }, // = 14 { 1,0,0,0,0,1,0 }, // = 15 }; // переменная для хранения значения текущей цифры int number=0; void setup(){ // контакты выходы /*for(int i=0;i<7;i++) pinMode(pins,OUTPUT); */ pinMode(2, OUTPUT); // a pinMode(3, OUTPUT); // b pinMode(4, OUTPUT); // c pinMode(5, OUTPUT); // d pinMode(6, OUTPUT); // e pinMode(7, OUTPUT); // f pinMode(8, OUTPUT); // g pinMode(9, INPUT); // первая передача pinMode(10, INPUT); // вторая передача pinMode(11, INPUT); // третья передача pinMode(12, INPUT); // четвертая передача pinMode(13, INPUT); // пятая передача pinMode(14, INPUT); // задняя } //вывод цифры на семисегментный индикатор void setDigit(byte digit) { byte pin=2; for (byte i = 0; i < 9; ++i) { digitalWrite(pin, digitRank[digit]); ++pin;} } void loop() { if (digitalRead(button1) == HIGH) {setDigit(1);} if (digitalRead(button1) != HIGH) {setDigit(8); delay(200); setDigit(9); delay(200); setDigit(10); delay(200); setDigit(11); delay(200); setDigit(12); delay(200); setDigit(13); delay(200); setDigit(14); delay(200); setDigit(15); delay(200);} while (digitalRead(button2) == HIGH) {setDigit(2); } while (digitalRead(button3) == HIGH) {setDigit(3); } while (digitalRead(button4) == HIGH) {setDigit(4); } while (digitalRead(button5) == HIGH) {setDigit(5); } while (digitalRead(button6) == HIGH) {setDigit(6); } } [/code]
код - Г. полное Судя по всему, ты списал где-то номальный код, с использованием массивов и битов для сегментов - но не смог его осилить и весь перекорежил... а вот это что? Код (C++): byte digitRank[117][7] = { { 0,0,0,0,0,0,0 }, что за 117 элементов в массиве?
показывайте код. ТОЛЬКО ВСТАВЛЯЙТЕ ЕГО ПО ПРАВИЛАМ ФОРУМА, иначе попрощу модератора снести вашу тему полностью
Код (C++): int pins[7]={2,3,4,5,6,7,8}; int button1 = 9; int button2 = 10; int button3 = 11; int button4 = 12; int button5 = 13; int button6 = 14; int val = 0; // значения для вывода цифр 0-9 /*byte digitRank[10] = { B11111100, B01100000, B11011010, B11110010, B01100110, B10110110, B10111110, B11100000, B11111110, B11100110}; */ byte digitRank[117][7] = { { 0,0,0,0,0,0,0 }, // = 0 { 0,1,1,0,0,0,0 }, // = 1 { 1,1,0,1,1,0,1 }, // = 2 { 1,1,1,1,0,0,1 }, // = 3 { 0,1,1,0,0,1,1 }, // = 4 { 1,0,1,1,0,1,1 }, // = 5 { 1,1,1,0,1,1,1 }, // = R { 0,0,0,0,0,0,0 }, // = 7 { 1,1,0,0,0,0,0 }, // = 8 { 0,1,0,0,0,0,1 }, // = 9 { 0,0,0,0,1,0,1 }, // = 10 { 0,0,0,1,1,0,0 }, // = 11 { 0,0,1,1,0,0,0 }, // = 12 { 0,0,1,0,0,0,1 }, // = 13 { 0,0,0,0,0,1,1 }, // = 14 { 1,0,0,0,0,1,0 }, // = 15 }; // переменная для хранения значения текущей цифры int number=0; void setup(){ // контакты выходы /*for(int i=0;i<7;i++) pinMode(pins[i],OUTPUT); */ pinMode(2, OUTPUT); // a pinMode(3, OUTPUT); // b pinMode(4, OUTPUT); // c pinMode(5, OUTPUT); // d pinMode(6, OUTPUT); // e pinMode(7, OUTPUT); // f pinMode(8, OUTPUT); // g pinMode(9, INPUT); // первая передача pinMode(10, INPUT); // вторая передача pinMode(11, INPUT); // третья передача pinMode(12, INPUT); // четвертая передача pinMode(13, INPUT); // пятая передача pinMode(14, INPUT); // задняя } //вывод цифры на семисегментный индикатор void setDigit(byte digit) { byte pin=2; for (byte i = 0; i < 9; ++i) { digitalWrite(pin, digitRank[digit][i]); ++pin;} } void loop() { if (digitalRead(button1) == HIGH) {setDigit(1);} if (digitalRead(button1) != HIGH) {setDigit(8); delay(200); setDigit(9); delay(200); setDigit(10); delay(200); setDigit(11); delay(200); setDigit(12); delay(200); setDigit(13); delay(200); setDigit(14); delay(200); setDigit(15); delay(200);} while (digitalRead(button2) == HIGH) {setDigit(2); } while (digitalRead(button3) == HIGH) {setDigit(3); } while (digitalRead(button4) == HIGH) {setDigit(4); } while (digitalRead(button5) == HIGH) {setDigit(5); } while (digitalRead(button6) == HIGH) {setDigit(6); } }
это тот же код, что и в начале? Зачем он мне? Покажите, что у вас получилось после замены delay() И еще раз!!!! уберите уже двойной массив на 117 элементов... это чушь. Или вы вообще не понимаете ни буквы в этом коде?
Код (C++): int pins[7]={2,3,4,5,6,7,8}; int button1 = 9; int button2 = 10; int button3 = 11; int button4 = 12; int button5 = 13; int button6 = 14; int val = 0; // значения для вывода цифр 0-9 /*byte digitRank[10] = { B11111100, B01100000, B11011010, B11110010, B01100110, B10110110, B10111110, B11100000, B11111110, B11100110}; */ byte digitRank[16][7] = { { 0,0,0,0,0,0,0 }, // = 0 { 0,1,1,0,0,0,0 }, // = 1 { 1,1,0,1,1,0,1 }, // = 2 { 1,1,1,1,0,0,1 }, // = 3 { 0,1,1,0,0,1,1 }, // = 4 { 1,0,1,1,0,1,1 }, // = 5 { 1,1,1,0,1,1,1 }, // = R { 0,0,0,0,0,0,0 }, // = 7 { 1,1,0,0,0,0,0 }, // = 8 { 0,1,0,0,0,0,1 }, // = 9 { 0,0,0,0,1,0,1 }, // = 10 { 0,0,0,1,1,0,0 }, // = 11 { 0,0,1,1,0,0,0 }, // = 12 { 0,0,1,0,0,0,1 }, // = 13 { 0,0,0,0,0,1,1 }, // = 14 { 1,0,0,0,0,1,0 }, // = 15 }; // переменная для хранения значения текущей цифры int number=0; void setup(){ // контакты выходы /*for(int i=0;i<7;i++) pinMode(pins[i],OUTPUT); */ pinMode(2, OUTPUT); // a pinMode(3, OUTPUT); // b pinMode(4, OUTPUT); // c pinMode(5, OUTPUT); // d pinMode(6, OUTPUT); // e pinMode(7, OUTPUT); // f pinMode(8, OUTPUT); // g pinMode(9, INPUT); // первая передача pinMode(10, INPUT); // вторая передача pinMode(11, INPUT); // третья передача pinMode(12, INPUT); // четвертая передача pinMode(13, INPUT); // пятая передача pinMode(14, INPUT); // задняя } //вывод цифры на семисегментный индикатор void setDigit(byte digit) { byte pin=2; for (byte i = 0; i < 9; ++i) { digitalWrite(pin, digitRank[digit][i]); ++pin;} } void loop() { if (digitalRead(button1) == HIGH) {setDigit(1);} if (digitalRead(button1) != HIGH) {setDigit(8); setDigit(9); setDigit(10); setDigit(11); setDigit(12); setDigit(13); setDigit(14); setDigit(15); } while (digitalRead(button2) == HIGH) {setDigit(2); } while (digitalRead(button3) == HIGH) {setDigit(3); } while (digitalRead(button4) == HIGH) {setDigit(4); } while (digitalRead(button5) == HIGH) {setDigit(5); } while (digitalRead(button6) == HIGH) {setDigit(6); } }