Шахматные Часы
- Войдите на сайт для отправки комментариев
Сб, 18/09/2021 - 20:29
Подскажите где ошибка и по возможности как исправить.
unsigned long t1; #define but 5 #define but1 6 unsigned long t2; void setup() { Serial.begin(9600); pinMode(but, INPUT); pinMode(but1, INPUT); } void loop() { if (but == 0 && but1 == 1) { ml1=m1; sl1=s1; s=sl; m=ml; backcount(); } if (but == 1 && but1 == 0) { ml=m; sl=s; s1=sl1; m1=ml1; backcount1(); } if (millis() - t2 >= 1000) { Serial.print(m); Serial.print(' '); Serial.print(s); Serial.print(" & "); Serial.print(m1); Serial.print(' ');Serial.println(s1); t2=millis(); } } void backcount() { if (millis() - t >= 1000) { s--; t=millis(); } if (s==0) { s=60; m--; } } void backcount1() { if (millis() - t1 >= 1000) { s1--; t1=millis(); } if (s1==0) { s1=60; m1--; } }
Каким образом ты узнал, что тут ошибка?
INPUT_PULLUP
не работает
не работает
Принято к сведению.
sadman41 увы, в этот раз магия не сработала. Видимо теперь надо применять заклинание 80 уровня :-)
В магию нужно верить, тогда она работает. А тут человек неверующий попался.
Подскажите где ошибка и по возможности как исправить.
Константы but и but1 у Вас имеют значения отличные от 0 и 1, так что две первые проверки в loop() не выполняться никогда, от слова - совсем.
не работает
не просто не работает, а даже не компилируется. Для начала - ни одна из шести переменных, встречающихся в строчках с 14 по 17 - не обьявлена.
Вот когда исправите подобные ошибки - тогда будет "не работает".
Когда скетч начнет компилироваться - приходите, подскажу что исправлять дальше.
Спасибо не заметил
работает?
нет
сил не хватило половину скетча вставить? :)
Флажок упал
не всё скопировал:)
нет
просто выводит нули
30 строка - это про что?
Где Вы инициализируете переменные?
Ну вы же умные, исправьте как нибудь :)
А в чем наш интерес? Это Вам надо научится. Если нет - купите шахматные часы и не выносите моск.
просто выводит нули
при ненажатых кнопках и должен выводить только нули. А что до кнопок - я смотрю вы строчку 22 исправили, наверно кто-то подсказал? - а в строке 30 так и остался бред.
А еще....
Grib_arduino - если вам нужна помощь, так давайте общайтесь. Напишите что это за код. откуда вы его взяли, как он должен работать, что работает, а что нет. А когда вы молчите, на вопросы отвечаете односложно - никакого интереса отвечать вам нет. Создается впечатление, что вы настолько глупы и ограничены, что два слова вместе связать не можете...
Код написал сам, должно когда держу первую кнопку отниматься время первого игрока когда вторую второго.
Про 30 строку спасибо
но всё ровно не работает
должно когда держу первую кнопку отниматься время первого игрока когда вторую второго.
При старте программы у вас у обоих игроков время = 0. И если Вы начнете от этого времени что-то отнимать - получится отрицательное время. Вы уверены, что это правильно?
Код написал сам
Не надо писать коды (коды - это что-то непонятное) - пишите программы, а лучше - алгоритмы. Их несложно перевести на любой язык программирования. Но только ПРАВИЛЬНЫЕ алгоритмы.
ну это легко исправить но оно даже в минус не уходит
Код написал сам
Ага! Как Ньютону приснилось)) А как объявлять и инициализировать переменные не доснилось, разбудили небось не вовремя.
ну это легко исправить но оно даже в минус не уходит
Вы бы хоть тот раздел Программирование, что прямо на этом сайте есть, почитали...
http://arduino.ru/Reference/Increment Там есть "Примеры". Разницу с тем, что в скетче написано видите?
Вот я сделал алгоритм, закинул его на файло-обменик
https://fex.net/s/ynvlbmb
ну это легко исправить но оно даже в минус не уходит
Вы бы хоть тот раздел Программирование, что прямо на этом сайте есть, почитали...
http://arduino.ru/Reference/Increment Там есть "Примеры". Разницу с тем, что в скетче написано видите?
попробовал сделать как там написано всё равно не работает потом сделал просто х = х - 1;
Но всё ровно не работает
Уже говорили. Инициализируйте перед началом работы или добавьте условие про одинаковый статус кнопок и там инициализируйте время партии. Типа m=5;s=0; . Кроме того отсутствует проверка на окончание партии. Проверять надо m==0.
Нет защиты от дребезга контактов.
Grib_arduino - у вас код написан так, что любые изменения от нажатия кнопки сохраняются доли секунды, а при следующем нажатии снова сбрасываются на ноль. А поскольку защиты от дребезга нет - то никогда ничего и не меняется.
К чему вообще эти пляски с переменными, зачем при нажатии первой кнопки s приравнивается s1, а при нажатии второй обратно? - вы понимаете, что при таком раскладе значения никогда не изменятся, потому что вы не сохраняете изменения?
У вас вся программа - одна логическая несуразица
Они сохраняются чтобы потом когда кнопку нажал первый игрок потом второй а потом опять первый отсчет шел не сначала времени.
Они сохраняются
ошибаетесь, они не сохраняются
Так вроде все переменные инициализировал какие ещё остались?
Они сохраняются
ошибаетесь, они не сохраняются
или это неправильное сохранение?
или это неправильное сохранение?
это сохранение не в том месте. Если одну и ту же кнопку нажать два раза - сохранение не работает и даже предыдущие результаты сбрасываются. А с учетом дребезга кнопки всегда нажимаются по несколько раз.
Я бы всю логику вашей программы переработал. выкинул нафик кучу переменных типа s s1 s11 - время для игроков сделал бы общим. Тогда и сохранять ничего не нужно будет.
А отдельные таймеры каждому игроку считал бы из разниц общего времени
Так вроде все переменные инициализировал
ГДЕ ???
Вы, простите, что называете инициализацией? - у вас ни одна переменная не инициализирована....
Другой вопрос, что этому коду инициализация никак не поможет - все равно работать не будет
https://fex.net/s/ynvlbmb
Это сам алгоритм, он тоже не правильный?
не тупите, а возьмите любой учебник по языку и прочитайте. что такое "инициализация переменных".
https://fex.net/s/ynvlbmb
Это сам алгоритм, он тоже не правильный?
он очень общий.
Токарю можно сказать просто "Сделай мне гайку М12" - остальное он знает сам. А вот станку с ЧПУ придется обьяснить, какую заготовку взять (шестигранный пруток), какое отверстие просверлить, какую резьбу нарезать и так далее...
Понимаете разницу?
У вас алгоритм для человека, для программы этого мало.
Выкинул всё лишнее и добавил подавление дребезга. В железе не проверял. Одновременное нажатие двух клавиш начинает партию с начала. Ноги клавиш замыкать на землю.
Но там же написано если одна кнопка нажата партия начинается.
Огромное спасибо оно работает но там вывод немножко кривой я его доделаю, спасибо огромное.
Да, начинается с любой кнопки. Но по правилам чёрные должны нажать первыми. В программе это не контролируется. На совести играющих. И ещё было бы не плохо светодиоды повесить разного цвета, что бы было видно чей ход.
На счёт кривого вывода, последним в каждой выводной строке println должен быть.
Да, ну дальше сделаю светодиоды и дисплей.