Совсем другие числа в в копилке

Тема в разделе "Arduino & Shields", создана пользователем Kreichik, 31 окт 2019.

  1. Kreichik

    Kreichik Нерд

    Всем привет!!! Я делаю копилку. Сам вводишь в ручную сумму через клавиатуру 4х4. Потом при нажатии на кнопку "В" должно показываться сколько всего в копилке. Вроде-бы всё сделал, но когда ввожу число, то в балансе показывается совсем другое число. Помогите пожалуйста!
    Вот сам скетч:
    Код (C++):
    #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);
      pinMode(Relay2, OUTPUT);
         
    }
    void loop()
    {
          char customKey = kpd.getKey(); //создаём массив customKey
          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; //прибавляем к балансу то что ввели(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': //при нажатии на кнопку "В" очищаем экран и выводим переменную b(баланс)
    lcd.clear();
    lcd.setCursor(5, 0);
    lcd.print("Vsego:");
    lcd.setCursor(7, 1);
    lcd.print(b); //выводим баланс
    break;
    }
    }
    }
    }
     
     
  2. parovoZZ

    parovoZZ Гуру

    А твою клавиатуру можно к сбербанк-онлайн прикрутить?
     
    NikitOS и Andrey12 нравится это.
  3. b707

    b707 Гуру

    Kreichik - Вам же на ардуино.ру все обьяснили, даже с примерами кода. Что не понятно?
    Если вы ждете , что вам кто-то напишет готовый код - то боюсь этого не будет ни здесь ни там, ни на каком другом форуме.
     
    NikitOS нравится это.
  4. Asper Daffy

    Asper Daffy Иксперд

    Всё понятно.

    ТС там так прямо и написал: "Спасибо всем! Я понял в чём ошибка". А здесь опять букву А к сумме прибавляет :)
     
  5. b707

    b707 Гуру

    ну мы же не знаем, о какой ошибке он писал :)
    Может быть так: "Я понял в чем ошибка - я спросил на неправильном форуме"
     
  6. Asper Daffy

    Asper Daffy Иксперд

    Ну, теперь нехай на правильном поймёт очередную ошибку.
     
  7. b707

    b707 Гуру

    я думаю что реально это его мама пишет...
    Мамы - они такие, обьяснишь им ошибку - а они в ответ "Я вижу, вы не хотите мне помочь... тогда я пойду еще у кого-нибудь спрошу " :)
     
  8. Kreichik

    Kreichik Нерд

    Привет! Опять. Я начал заниматься Ардуино совсем недавно. Да я деревянный. Я не понял http://arduino.ru/forum/programmirovanie/sovsem-drugie-chisla#comment-488612. Хотел спросить здесь, если не пойму пойду дальше спрашивать.
     
  9. Kreichik

    Kreichik Нерд

    Нет. Я не мама. Я просто
     
    Airbus нравится это.
  10. Kreichik

    Kreichik Нерд

    Я просто начал чувствовать что обстановка накаляется. Ещё один вопрос и ваши мозги взорвутся. Потому-что мне
    объяснить тяжело
     
    Asper Daffy нравится это.
  11. Kreichik

    Kreichik Нерд

    У меня вылазиет очередная ошибка
     
  12. DetSimen

    DetSimen Guest

    а ты начни с простого. нажал кнопку, выведи её значение в Сериал. Потом собирай в буфере нажатия нескольких кнопок. Потом преобразуй набранное - в число. И так, шаг за шагом, копилка и наполнится, и деньгами и знаниями.
     
    Airbus и Daniil нравится это.
  13. Airbus

    Airbus Радиохулиган Модератор

    Я так понял что особо одаренные приходят сюда с ардуино.ру в надежде услышать чтото новое?
     
    Andrey12 и Asper Daffy нравится это.
  14. Airbus

    Airbus Радиохулиган Модератор

    Куда?
     
  15. Kreichik

    Kreichik Нерд

    О великий DetSimen. Последовал вашему совету. Почему не получается?
    Код (C++):
    #include <Wire.h>
    #include <Keypad.h> //подключаем библиотеки

    int input_value = 0;
    int balans = 0; //баланс

    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

    void setup(){
        Serial.begin(9600);
    }
    //----------------------------------
    void loop()
    {
      char customKey = kpd.getKey();
          if (customKey){
                Serial.println(customKey);//выводим в монитор порта цифры
    //----------------------------------------
    if(customKey>='0'&&customKey<=9)
    {
    input_value = (input_value*10)+(customKey-48);
    //--------------------------------
    if(customKey=='A')
    {
      balans+=input_value; //указываем баланс
      input_value=0;
    //---------------------------------
      if(customKey=='B')
      {
       Serial.println(balans);//выводим в монитор порта баланс
     

      }
      }
    }
    }
    }

     
     
  16. b707

    b707 Гуру

    что не получается?
    Привыкайте писать информативно, вместо "не получается" пишите, что хотели получить и что получили на самом деле
     
  17. Kreichik

    Kreichik Нерд

    Ок. Минуточку
     
  18. Kreichik

    Kreichik Нерд

    Последовал вашему совету. В мониторе порта просто показываются буквы и числа. Когда нажимаю на B чтобы посмотреть баланс, то в мониторе просто буква В. А баланс не показывается
     
  19. b707

    b707 Гуру

    обратите внимание, что там где вы сравниваете введенный код с цифрами - у вас ноль красненький. а девятка синенькая...Это потому что ноль - символ, а девятка - число. Дальше догадаетесь?

    добавка - хотя это совсем не главное. Для начала разберитесь со скобками у операторв if - они у вас все не на месте.

    Кравчук (надеюсь правильно прочитал) - вы похоже вовсе языка Си не знаете. Толгда зачем вы вообще за этот проект взялись? - сначала язык надо выучить.
     
  20. Kreichik

    Kreichik Нерд

    Правильно Крейчик. Ну да ладно. Можно спросить? Как вы выучили язык?