Совсем другие числа
- Войдите на сайт для отправки комментариев
Ср, 30/10/2019 - 12:24
Всем привет!!! Я делаю копилку. Сам вводишь в ручную сумму через клавиатуру 4х4, она всасывает деньги. Потом при нажатии на кнопку "В" должно показываться сколько всего в копилке. Вроде-бы всё сделал, но когда ввожу число, то в балансе показывается совсем другое число. Помогите пожалуйста!
Вот сам скетч:
#include <Wire.h> #include <LiquidCrystal_I2C.h> #include <Keypad.h> LiquidCrystal_I2C lcd(0x27,16,2); const byte ROWS = 4; // 4 строки const byte COLS = 4; // 4 столбца char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {' ','0','#','D'} }; byte rowPins[ROWS] = {11,10, 9, 8}; byte colPins[COLS] = {7, 6, 5, 4}; Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );// Create the Keypad int Relay = 13; //красный светодиод int Relay2 = 2; //зелёный светодиод int b = 0; //баланс int k = 7; //порядок числа при вводе void setup() { Serial.begin(9600); lcd.init(); // Инициализируем экран lcd.backlight(); pinMode(Relay, OUTPUT); //карсный светодиод пин 13 pinMode(Relay2, OUTPUT); //зелёный светодиод пин 2 } void loop() { char customKey = kpd.getKey(); if (customKey){ Serial.println(customKey); lcd.setCursor(k, 1); // устанавливаем курсор на начало второй строки lcd.print(customKey); k = k + 1; lcd.setCursor(0, 1); // устанавливаем курсор на начало второй строки lcd.print("RUB/DOL"); tone(12, (int)customKey*10, 300); // Издаем звуковой сигнал длиной 300 миллисекунд if(customKey) // Check for a valid key. { switch (customKey) { case 'A': //ОЖИДАЙТЕ, ОПЕРАЦИЯ ПРОШЛА УСПЕШНО, ВОЗВРАЩЕНИЕ К НАЧАЛУ digitalWrite(Relay, HIGH); lcd.clear(); lcd.setCursor(3, 0); lcd.print("Ozhidajte"); delay(4000); digitalWrite(Relay, LOW); digitalWrite(Relay2, HIGH); b = b + customKey; lcd.setCursor(3, 0); lcd.print("Operaciya"); lcd.setCursor(0, 1); lcd.print("Proshla uspeshno"); delay(4000); digitalWrite(Relay2, LOW); lcd.clear(); lcd.setCursor(4, 0); lcd.print("NAZHMITE"); lcd.setCursor(7, 1); lcd.print("*"); //ВОЗВРАЩЕНИЕ К НАЧАЛУ k= 16; lcd.backlight(); delay(300); lcd.noBacklight(); delay(300); lcd.backlight(); delay(300); lcd.noBacklight(); delay(300); lcd.backlight(); delay(300); lcd.noBacklight(); delay(300); lcd.backlight(); break; case ' ': //НАЧАЛО lcd.clear(); k = 8; lcd.setCursor(1,0); // устанавливаем курсор на начало первой строки lcd.print("Vvedite summu"); break; case 'B': lcd.clear(); lcd.setCursor(5, 0); lcd.print("Vsego:"); lcd.setCursor(7, 1); lcd.print(b); break; } } } }
Используются: LCD дисплей 1602 I2C, матричная клавиатура 4х4, Ардуино УНО, Buzzer(пищалка), пара светодиодов
ну если так писать
b = b + customKey;
то да, результат будет далёк от ожидаемого
тем более, што другие кнопки, кроме "А", "В" и "*" ты НИКАК не обрабатываешь, памойму
а покажите мне строчку в скетче, где вы складываете введенное число с балансом копилки? - я такого в коде не нашел
Что-то совсем ничего непонятно. Вы где число-то вводите?
Нельзя ли программу прокомментировать? Ваши нынешние комментарии не дают никакого понимания, только запутывают. Например, в строке №22 написано, что b – это баланс. А в строке №58 Вы к этому балансу букву 'A' прибавляете. Зачем? Что надеетесь получить?
Прокомментируйте программу нормально – в терминах решаемой задачи.
а покажите мне строчку в скетче, где вы складываете введенное число с балансом копилки? - я такого в коде не нашел
Ну, как же! В переменной b копятся буквы A. Стоит поделить её на 'A' - сразу получим количество сложений, которые были выполнены :)
загрузили ТС - он теперь в страхе забился под диван и мы его не увидим :)
Ну у меня так же бывает. Захожу в магазин скупится. Там под товарами числа. Гляжу в свой кошелёк а там другие числа. С деньгами всегда так. Лучше считать всякие яблоки и груши. Это надёжнее получается.
Потому что должно быть хотя бы так:
b = b + (customKey-48);
Нет. У него сумма прибавляеца, тока когда "А" нажмёшь, а прибавлять к сумме 17 каждыйрас, по твоему коду, - я думаю, это не то, что хотел ТС
бестолку
другие кнопки, кроме "А", "В" и "*" ты НИКАК не обрабатываешь, памойму
А чо, надо было?
Извините что долго. Вот скетч с комментариями:
Вроде-бы основное прокомментировал
У меня вот так. Например ввожу 5000, а в балансе 65
Конечно бестолку.
Учитывая как он это опрашивает и обрабатывает.
int input_value=0;
if(customKey>='0'&&customKey<=9){
input_value=(input_value*10)+(customKey-48);
if(customKey=='A'){balans+=input_value;input_value=0;}
Можно спросить куда это?
Вроде-бы основное прокомментировал
Вы читаете, что люди пишут?
Вам уже сказали, что
1. в строке №58 Вы прибавляете не то, что ввели, а всегда букву А и ничего другого
2. никакие кнопки, кроме А, В и звёздочки Вы вообще никак не обрабатываете.
Я же Вас спрашивал "где Вы вводите числа"? Ну и где? Где комментарий "ввод числа" или "ввод очередной цифры"?
Ну первый if, при нажатии на цифровую кнопку кейпада, записывает значение в переменную
input_value.(не забывая предыдущее значение умножать на 10, дабы при нажатии кнопок , скажем 5 и 6,
Сначала переменная стала 0*10+5=5, а потом 5*10+6=56.
Второй if при нажатии кнопки A, прибавляет введённые данные к балансу и обнуляет ввод.
Куда это запихнуть, думайте сами.
Ваш же скетч.
Вам виднее , что вы от него хотите.
Я просто показал , как правильно обработать данные вводимые с клавиатуры.
Вводим числа с помощью customKey
я хренею, дарагая редакция
Вводим числа с помощью customKey
"Вводим числа с помощью customKey" , должно выглядеть как у меня в первом if
ГДЕ???
Вот блин, вы вообще не читаете ответов?
ГДЕ???
Вот блин, вы вообще не читаете ответов?
Походу клиника.
Кактус. оформляйте код как положено, вы вроде не новичок :)
СКОРО , ВСТРЕЧАЙТЕ.
НОВЕЙШИЕ ЧУДО-БАНКОМАТЫ ОТ
НациональногоАрмяно-ЕврейскоегоБАНКа. :-)
Бида-бида, поцыэнт с непроходимостью головного мозга.
С телефона крайне неудобно это делать. Каждый раз приходится переходить в режим ПК.
Но намек понял
ИЗВИНИТЕ что вынес вам мозги.
Выходит вот-это
ИЗВИНИТЕ что вынес вам мозги.
Не торопитесь писать разную чушь. Изучите подсказки, что дал Кактус и другие участники, попытайтесь их понять.
Сейчас в вашем коде ввода суммы НЕТ ВОВСЕ
Я понимаю под вводом суммы:
Мы ввели данные с переменной customKey. Потом мы прибавляем к переменной b данные переменной customKey. Потом выводим переменную b на дисплей
Я понимаю под вводом суммы:
Мы ввели данные с переменной customKey. Потом мы прибавляем к переменной b данные переменной customKey. Потом выводим переменную b на дисплей
последний раз, терпеливо обьясняю - постарайтесь вникнуть. вероятно вы предполагали так - вводим "2", потом "3", потом нажимаем "А" и к сумме должно прибавится 23. верно?
Ну так вот - реально в вашем коде ни "2" ни "3" не обрабатывается. обрабатывается только "А" а все введенные числа улетают в никуда.
Спасибо всем! Я понял в чём ошибка
загрузили ТС - он теперь в страхе забился под диван и мы его не увидим :)
На амперку перебежал. Жаль, там дядя Витя выпилился :)
да я ему тут уже вручил сертификат, да bwn его осторожно выпилил.
да я ему тут уже вручил сертификат, да bwn его осторожно выпилил.
А я то с чего? Я ваще два дня не заглядывал, чуть чо, сразу Косой. (с).
Уже в работе, вчера в МФЦ презентация была. Две тыщи сто рублев, на пошлину, запихал, это чудо поурчало и затихло. Барышня, по телефону, сказала: если при инкассации лишние обнаружим, то в течении недели, на телефон переведем. Писец, если переведут, года два забесплатно трепаться буду, о радость то.
Решил, х-ый день, пришел, достал срецтво и ушел в астрал. А Дед, меня здесь, в чёрти чем обвиняет. Монстр, бездушный.))))
Ну не ты, значить, абознался, извини. :) Тут еще есть кто с Секирой ходит. Я подумал, совпало, что ты появился, и сритификат пропал. Прошу пращенью. :)
Но, человек же реально заслужил этот красивый сертификат, я, своей властью, ему пожаловал, а его тутже лишили чесно заработанного, не знаю кто. :) Ирады.
Это кто-то с сильной кармой сделал, в скрытых его нет. Удален начисто.
Клапа штоли? :) Запретил раздавать негосударственные награды, видимо.
Ну, типа того.)))
Ну не ты, значить, абознался, извини. :) Тут еще есть кто с Секирой ходит. Я подумал, совпало, что ты появился, и сритификат пропал. Прошу пращенью. :)
Но, человек же реально заслужил этот красивый сертификат, я, своей властью, ему пожаловал, а его тутже лишили чесно заработанного, не знаю кто. :) Ирады.
ну вообще-то правильно удалили - ТС-у 13 лет, а там ненормативная лексика :) хотя он Сертификат заслужил по праву, тут соглсаен.
ну вообще-то правильно удалили - ТС-у 13 лет, а там ненормативная лексика :)
Всё шутите? Я, в тринадцать, начал себя ограничивать в ее использовании.)))
Всё шутите? Я, в тринадцать, начал себя ограничивать в ее использовании.)))
А смысл?
А можно спросить? Что за сертификат?
To asam, ее было слишком много, стояла задача использовать не более одного-двух слов на предложение.)))
To Kreichik, вы действительно хотите это знать? Если вам, как и озвучено, тринадцать, то не надо. Ибо, согласно любимому мною Экклезиасту: Во многая знания, многая печали.))))
Стесняюсь спросить, А такая запись корректна
Стесняюсь спросить, А такая запись корректна
В GCC - да.
#define KEYDIGIT '0'...'9'
Стесняюсь спросить, А такая запись корректна
Этот вопрос для меня стого я азиатка да или нет? Знаеш это типично для меня. я привыкла. если Computing Science мальчик это хорошо, иначе девочка это плохо в Computing Science.
корректно да https://gcc.gnu.org/onlinedocs/gcc/Case-Ranges.html
корректно также это if ( key >='0' && key <= '9' )