Ви не увійшли.
Спасибо за ответ .Условие следующее: если одна из кнопок нажата выводим на сериал один раз(шлейф включен) ,если эта же кнопка отжата выводим один раз на сериал (шлейф выключен).
Вот, помоги человеку так он уже и условия выставляет, с выводом на сериал. Пусть сам выводит на сериал.
Спасибо за ответ .Условие следующее: если одна из кнопок нажата выводим на сериал один раз(шлейф включен) ,если эта же кнопка отжата выводим один раз на сериал (шлейф выключен).
Добрый День!
Помогите пожалуйста.Перед вами код опроса 256 кнопок(контактов).Опрос идет, но нужен вывод в сериал контакт включен, контакт выключен .Спасибо.
Спасёт: if (нажата) {...} then {...}
Добрый День!
Помогите пожалуйста.Перед вами код опроса 256 кнопок(контактов).Опрос идет, но нужен вывод в сериал контакт включен, контакт выключен .Спасибо.
#include <DS1307.h>
// Init the DS1307
DS1307 rtc(SDA, SCL);
int PinOut[16] {22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37}; // пины выходы
int PinIn[16] {38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53}; // пины входа
int val = 0;
int i = 0;// 1
int j = 0;// 1
const short value[16][16]
//unsigned int value[16][16]signed char
{ {16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1},
{32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17},
{48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33},
{64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49},
{80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65},
{96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81},
{112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97},
{128, 127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113},
{144, 143, 142, 141, 140, 139, 138, 137, 136, 135, 134, 133, 132, 131, 130, 129},
{160, 159, 158, 157, 156, 155, 154, 153, 152, 151, 150, 149, 148, 147, 146, 145},
{176, 175, 174, 173, 172, 171, 170, 169, 168, 167, 166, 165, 164, 163, 162, 161},
{192, 191, 190, 189, 188, 187, 186, 185, 184, 183, 182, 181, 180, 179, 178, 177},
{208, 207, 206, 205, 204, 203, 202, 201, 200, 199, 198, 197, 196, 195, 194, 193},
{224, 223, 222, 221, 220, 219, 218, 217, 216, 215, 214, 213, 212, 211, 210, 209},
{240, 239, 238, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, 225},
{256, 255, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, 242, 241}
};
// двойной массив, обозначающий кнопку
void setup()
{
pinMode (22, OUTPUT); // инициализируем порты на выход (подают нули на столбцы)
pinMode (23, OUTPUT);
pinMode (24, OUTPUT);
pinMode (25, OUTPUT);
pinMode (26, OUTPUT);
pinMode (27, OUTPUT);
pinMode (28, OUTPUT);
pinMode (29, OUTPUT);
pinMode (30, OUTPUT);
pinMode (31, OUTPUT);
pinMode (32, OUTPUT);
pinMode (33, OUTPUT);
pinMode (34, OUTPUT);
pinMode (35, OUTPUT);
pinMode (36, OUTPUT);
pinMode (37, OUTPUT);
pinMode (38, INPUT); // инициализируем порты на вход с подтяжкой к плюсу (принимают нули на строках)
digitalWrite(38, HIGH);
pinMode (39, INPUT);
digitalWrite(39, HIGH);
pinMode (40, INPUT);
digitalWrite(40, HIGH);
pinMode (41, INPUT);
digitalWrite(41, HIGH);
pinMode (42, INPUT);
digitalWrite(42, HIGH);
pinMode (43, INPUT);
digitalWrite(43, HIGH);
pinMode (44, INPUT);
digitalWrite(44, HIGH);
pinMode (45, INPUT);
digitalWrite(45, HIGH);
pinMode (46, INPUT);
digitalWrite(46, HIGH);
pinMode (47, INPUT);
digitalWrite(47, HIGH);
pinMode (48, INPUT);
digitalWrite(48, HIGH);
pinMode (49, INPUT);
digitalWrite(49, HIGH);
pinMode (50, INPUT);
digitalWrite(50, HIGH);
pinMode (51, INPUT);
digitalWrite(51, HIGH);
pinMode (52, INPUT);
digitalWrite(52, HIGH);
pinMode (53, INPUT);
digitalWrite(53, HIGH);
Serial.begin(9600); // открываем Serial порт
// Initialize the rtc object
rtc.begin();
// Set the clock to run-mode
rtc.halt(false);
// The following lines can be uncommented to set the time
//rtc.setDOW(FRIDAY); // Set Day-of-Week to SUNDAY
//rtc.setTime(22, 01, 0); // Set the time to 12:00:00 (24hr format)
//rtc.setDate(17, 10, 2018); // Set the date to October 3th, 2010
}
void matrix () // создаем функцию для чтения кнопок
{
for (int i = 1; i <= 16; i++) // цикл, передающий 0 по всем столбцам
{
digitalWrite(PinOut[i - 1], LOW); // если i меньше 16 , то отправляем 0 на ножку
for (int j = 1; j <= 16; j++) // цикл, принимающих 0 по строкам
{
if (digitalRead(PinIn[j - 1]) == LOW) // если один из указанных портов входа равен 0, то..
{
Serial.println( value[i - 1][j - 1]); // то b равно значению из двойного массива
Serial.println( "shleif on");
//Serial.println( 256);
delay(175);
//Serial.println(" "); // перенос строки.
// Send date
Serial.print(rtc.getDateStr());
Serial.print(" -- ");
// Send time
Serial.println(rtc.getTimeStr());
}
}
digitalWrite(PinOut[i - 1], HIGH); // подаём обратно высокий уровень
//delay(175);
}
}
void loop()
{
matrix(); // используем функцию опроса матрицы
}
Спасибо, что быстро откликнулись, всё работает, как надо. Был затык с одной из кнопок (UP), поправил значение её сопротивления и все работает дальше. 98 Ом намерил, в скетче записал, как 100, т. е. почти без запаса. Замена записи на 120 всё исправила.
Ну... относительно неправильности, непонятности и сложности, я вам это не говорил. Всё определяется ситуацией и текущей задачей. Должно быть у вас не стоял вопрос в универсальности, поэтому вам и незачем было париться.)
О себе ничего.) О кнопках. Си чем удобнее ассемблера? Тем что выше абстракция, нет привязки к железу. А у вас? Только Ардуино. Только С++. Ограничение в одну кнопку. Понятно, что это не та задача, что бы её без особых проблем адаптировать под что то другое. Однако и она требует каких то усилий. Только заради чего? Отчего бы не писать проще, если это возможно. И если это удобно во всех случаях.
Я знаю, что я неправильно, непонятно, и сложно программирую. Вы не открыли мене на это глаза первый. Эти программулинки предназначались для Ардуино и не для чего более. Использование их в программах Ардуино не требует каких-то особенных умственных усилий, за-ради чего они и были написаны.
О себе ничего.) О кнопках. Си чем удобнее ассемблера? Тем что выше абстракция, нет привязки к железу. А у вас? Только Ардуино. Только С++. Ограничение в одну кнопку. Понятно, что это не та задача, что бы её без особых проблем адаптировать под что то другое. Однако и она требует каких то усилий. Только заради чего? Отчего бы не писать проще, если это возможно. И если это удобно во всех случаях.
Нет не прикалываюсь. Особой разницы нет, но на С++ выходит намного лаконичнее. Я не знаю, что вам ответить. Я не понял что вы о себе говорите. Напишите конкретнее. Обсудим.
Вячеслав, вы прикалываетесь? Какая ещё профессиональная клавиатура! Я ж вроде популярно объяснил.) У меня Си без плюсов, без зависимостей от окружения и железа. И мне не надо думать где эти плюсы брать и куда их вставлять!
Просто нужно знать где эти плюсы вставлять. А хороший встраиваемый драйвер кнопочной клавиатуры нигде просто так не валяется. Если вам нужна клавиатура для быстрого ввода, с возможностью нажатия двух переходных клавиш, а не только клавиш модификаторов, то лучше просто купить стандартную, профессиональную.
Вячеслав, библиотека это красиво, конечно. Особенно для одной кнопки.) А если их несколько? И ещё нужны их сочетания? И не везде Ардуино нужна... И даже вообще не AVR... Да и компилятор может плюсы не поддерживать... Да и места мало зачастую... ) Да и Линус плюсы терпеть не может (я ни на кого не намекаю).)))
ну он всё свёл в библиотеку, у других просто код используется))))
а OneButton ещё отслеживает удержание и фронты длительных нажатий)))
... в 80% случаев применяю OneButton, в ней реализованы наверное все варианты нажатий и меня она полностью устраивает. но это дело вкуса. с проф. программистами спорить не буду)))))
Это дело не вкуса но науки, хотя приятно когда и гайки красивые. Наверно, все возможные варианты не всегда нужны. Вот еще один любительский Button, из любви к искусству. https://github.com/slavaza/SuperButton Это сейчас любители такие пошли, Линуксы пишут, от нечего делать.