Заказ: проект на ардуино, перевод числа из 10-ного в 2-ный

Тема в разделе "Закажу проект", создана пользователем Eskor, 18 мар 2020.

  1. Eskor

    Eskor Нуб

    Добрый вечер
    Ищу помощи конечно не за бесплатно, нужно сделать проект ,имеется код калькулятора для ардуино с подключенной клавиатурой и лед дисплеем, нужно его переделать чтобы при вводе цифры ,она переводилась в двоичной код, так жк могу приложить файлы проекта и фотографии элементной базы. Жду вашего ответа
     
  2. Ariadna-on-Line

    Ariadna-on-Line Гуру

    На какие жертвы готовы ? ))) Код секретный ? А выложить сюды - не ?
    Вводите десятичные величины, а на экране бинарный вид ?
    Числа с дробными значениями (цифры после запятой) выражаются как ?
     
    Последнее редактирование: 18 мар 2020
  3. Eskor

    Eskor Нуб

    это обычный калькулятор , и да я могу его выложить
    Код (C++):
    //библиотеки
    #include <LiquidCrystal_I2C.h>
    #include <Keypad.h>
    #include <Wire.h>
    #include <String.h>

    //ряды и столбцы клавиатуры
    const byte ROWS = 4;
    const byte COLS = 4;
    char keys[ROWS][COLS] = {
      {'7', '8', '9', 'D'},
      {'4', '5', '6', 'C'},
      {'1', '2', '3', 'B'},
      {'*', '0', '#', 'A'}
    };

    //пины клавиатуры
    byte rowPins[ROWS] = { 0, 1, 2, 3 };
    byte colPins[COLS] = { 4, 5, 6, 7 };

    //обьявляем клавиатуру и экран
    Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //  Create the Keypad
    LiquidCrystal_I2C lcd(0x26, 16, 2);

    long Num1, Num2, Number;
    char key, action;
    boolean result = false;

    void setup() {
      //включаем экран
      lcd.init();
      lcd.backlight();
      Serial.begin(9600);
    }

    void loop() {
      //ждём и обрабатываем кнопки
      key = kpd.getKey(); //storing pressed key value in a char
      if (key != NO_KEY) DetectButtons();
      if (result == true) CalculateResult();
      //выводим результат
      DisplayResult();
    }

    //распознавание кнопки
    void DetectButtons()
    {
      lcd.clear();
      if (key == '*')
      {
        Serial.println ("Button Cancel");
        Number = Num1 = Num2 = 0;
        result = false;
      }

      if (key == '1')
      { Serial.println ("Button 1");
        if (Number == 0)
          Number = 1;
        else
          Number = (Number * 10) + 1;
      }

      if (key == '4')
      { Serial.println ("Button 4");
        if (Number == 0)
          Number = 4;
        else
          Number = (Number * 10) + 4;
      }

      if (key == '7')
      { Serial.println ("Button 7");
        if (Number == 0)
          Number = 7;
        else
          Number = (Number * 10) + 7;
      }


      if (key == '0')
      { Serial.println ("Button 0");
        if (Number == 0)
          Number = 0;
        else
          Number = (Number * 10) + 0;
      }

      if (key == '2')
      { Serial.println ("Button 2");
        if (Number == 0)
          Number = 2;
        else
          Number = (Number * 10) + 2;
      }

      if (key == '5')
      { Serial.println ("Button 5");
        if (Number == 0)
          Number = 5;
        else
          Number = (Number * 10) + 5;
      }

      if (key == '8')
      { Serial.println ("Button 8");
        if (Number == 0)
          Number = 8;
        else
          Number = (Number * 10) + 8;
      }


      if (key == '#')
      { Serial.println ("Button Equal");
        Num2 = Number;
        result = true;
      }

      if (key == '3')
      { Serial.println ("Button 3");
        if (Number == 0) Number = 3;
        else Number = (Number * 10) + 3;
      }

      if (key == '6')
      { Serial.println ("Button 6");
        if (Number == 0) Number = 6;
        else Number = (Number * 10) + 6;
      }

      if (key == '9')
      {
        Serial.println ("Button 9");
        if (Number == 0) Number = 9;
        else Number = (Number * 10) + 9;
      }

      if (key == 'A' || key == 'B' || key == 'C' || key == 'D')
      {
        Num1 = Number;
        Number = 0;
        if (key == 'A')
        {
          Serial.println ("Суммирование");
          action = '+';
        }
        if (key == 'B')
        {
          Serial.println ("Разность");
          action = '-';
        }
        if (key == 'C')
        {
          Serial.println ("Множение");
          action = '*';
        }
        if (key == 'D')
        {
          Serial.println ("Деление");
          action = '/';
        }

        delay(100);
      }

    }

    //считаем результат
    void CalculateResult()
    {
      if (action == '+') Number = Num1 + Num2;

      if (action == '-') Number = Num1 - Num2;

      if (action == '*') Number = Num1 * Num2;

      if (action == '/' && Num2 !=0) Number = Num1 / Num2;
    }

    //фуркция вывода результата
    void DisplayResult()
    {
      lcd.setCursor(0, 0);
      lcd.print(Num1); lcd.print(action); lcd.print(Num2);

      if (result == true)
      {
        lcd.print(" =");
        lcd.print(Number);
      }

      lcd.setCursor(0, 1);
      lcd.print(Number);
    }
     
    Последнее редактирование: 18 мар 2020
  4. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Щас админ ругаться будет и страшную картинку покажет. Прячьте "простыню" в формат КОД - значек вроде симки с "<>" в меню "Редактировать".
     
    Последнее редактирование: 18 мар 2020
  5. Airbus

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

    Буду
    [​IMG]
     
    Navigator, Daniil и Ariadna-on-Line нравится это.
  6. Eskor

    Eskor Нуб

    исправил
     
  7. ostrov

    ostrov Гуру

    Что должно быть и что из этого делает или не делает текущая программа?
     
  8. Ariadna-on-Line

    Ariadna-on-Line Гуру

    библа keypad не подаёт признаков жизни даже со своими собственными примерами. Чета там перемудрили.
     
    Последнее редактирование: 19 мар 2020
  9. ostrov

    ostrov Гуру

    Матричная клавиатура? А нафига ей библа? Подключили то все правильно хоть? Я про вот это:
    Код (C++):
    //пины клавиатуры
    byte rowPins[ROWS] = { 0, 1, 2, 3 };
    byte colPins[COLS] = { 4, 5, 6, 7 };
     
  10. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Я без библы напишу, (у меня ее и не было - спецом для него скачивал) но мы же его (ТС) прогу обсуждаем. А библа реально не работает. Сканирования линий нет. Висят единицы и тишина.
     
  11. vvr

    vvr Инженерище

    а что делать, если клава висит на rx tx и запущен serial......
     
    Пушной звер нравится это.
  12. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Это я сразу увидел. Переписывал код на другие пины. На других пинах появляются единицы и тишина. И в сериал ничего не идет тоже.
     
  13. vvr

    vvr Инженерище

    это я тс вопросик задал)))))
     
  14. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Размерность значений Number - long. Это 32 бита нулей и единиц. На ЛСД экране поместятся ? Или вам в бинаре только текущую кнопку ?
    Код (C++):
    //библиотеки
    #include <LiquidCrystal_I2C.h>
    #include <Keypad.h>
    #include <Wire.h>
    #include <String.h>

    //ряды и столбцы клавиатуры
    const byte ROWS = 4;
    const byte COLS = 4;
    char keys[ROWS][COLS] = {
    {'7', '8', '9', 'D'},
    {'4', '5', '6', 'C'},
    {'1', '2', '3', 'B'},
    {'*', '0', '#', 'A'}
    };

    //пины клавиатуры
    byte rowPins[ROWS] = {5, 4, 3, 2};
    byte colPins[COLS] = {8, 7, 6};

    //обьявляем клавиатуру и экран
    Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // Create the Keypad
    LiquidCrystal_I2C lcd(0x26, 16, 2);

    long Num1, Num2, Number, binSlit, binCurr ;
    char key, action;
    boolean result = false;

    void setup() {
    //включаем экран
    lcd.init();
    lcd.backlight();
    Serial.begin(9600);
    }

    void loop() {
    //ждём и обрабатываем кнопки
    key = kpd.getKey(); //storing pressed key value in a char
    if (key != NO_KEY) DetectButtons();
    if (result == true) CalculateResult();
    //выводим результат
    DisplayResult();
    }

    //распознавание кнопки
    void DetectButtons()
    {
    lcd.clear();
    if (key == '*')
    {
    Serial.println ("Button Cancel");
    Number = Num1 = Num2 = 0;
    result = false;
    DisplayArguments();      //Выводим текущий аргумент
    }

    if (key == '1')
    { Serial.println ("Button 1");
    if (Number == 0)
    Number = 1;
    else
    Number = (Number * 10) + 1;
    DisplayArguments();      //Выводим текущий аргумент
    }

    if (key == '4')
    { Serial.println ("Button 4");
    if (Number == 0)
    Number = 4;
    else
    Number = (Number * 10) + 4;
    DisplayArguments();      //Выводим текущий аргумент
    }

    if (key == '7')
    { Serial.println ("Button 7");
    if (Number == 0)
    Number = 7;
    else
    Number = (Number * 10) + 7;
    DisplayArguments();      //Выводим текущий аргумент
    }


    if (key == '0')
    { Serial.println ("Button 0");
    if (Number == 0)
    Number = 0;
    else
    Number = (Number * 10) + 0;
    DisplayArguments() ;     //Выводим текущий аргумент
    }

    if (key == '2')
    { Serial.println ("Button 2");
    if (Number == 0)
    Number = 2;
    else
    Number = (Number * 10) + 2;
    DisplayArguments();      //Выводим текущий аргумент
    }

    if (key == '5')
    { Serial.println ("Button 5");
    if (Number == 0)
    Number = 5;
    else
    Number = (Number * 10) + 5;
    DisplayArguments();      //Выводим текущий аргумент
    }

    if (key == '8')
    { Serial.println ("Button 8");
    if (Number == 0)
    Number = 8;
    else
    Number = (Number * 10) + 8;
    DisplayArguments();      //Выводим текущий аргумент
    }

    if (key == '#')
    { Serial.println ("Button Equal");
    Num2 = Number;
    result = true;
    }

    if (key == '3')
    { Serial.println ("Button 3");
    if (Number == 0) Number = 3;
    else Number = (Number * 10) + 3;
    DisplayArguments();      //Выводим текущий аргумент
    }

    if (key == '6')
    { Serial.println ("Button 6");
    if (Number == 0) Number = 6;
    else Number = (Number * 10) + 6;
    DisplayArguments();      //Выводим текущий аргумент
    }

    if (key == '9')
    {
    Serial.println ("Button 9");
    if (Number == 0) Number = 9;
    else Number = (Number * 10) + 9;
    DisplayArguments();      //Выводим текущий аргумент
    }

    if (key == 'A' || key == 'B' || key == 'C' || key == 'D')
    {
    Num1 = Number;
    Number = 0;
    if (key == 'A')
    {
    Serial.println ("Суммирование");
    action = '+';
    }
    if (key == 'B')
    {
    Serial.println ("Разность");
    action = '-';
    }
    if (key == 'C')
    {
    Serial.println ("Умножение");
    action = '*';
    }
    if (key == 'D')
    {
    Serial.println ("Деление");
    action = '/';
    }

    delay(100);
    }

    }

    //считаем результат
    void CalculateResult()
    {
    if (action == '+') Number = Num1 + Num2;

    if (action == '-') Number = Num1 - Num2;

    if (action == '*') Number = Num1 * Num2;

    if (action == '/' && Num2 !=0) Number = Num1 / Num2;
    }

    //функция вывода результата
    void DisplayResult()
    {
    lcd.setCursor(0, 0);
    lcd.print(Num1); lcd.print(action); lcd.print(Num2);

    if (result == true)
    {
    lcd.print(" =");
    lcd.print(Number);
    }

    lcd.setCursor(0, 1);
    lcd.print(Number);
    }
    //==================================================================
    //функция вывода аргумента в двоичном виде
    void DisplayArguments()
    {
    lcd.setCursor(0,1);
    binSlit = 2147483648;                   // инициируем сканер битов аргументов - единица в старшем разряде
    for (int x = 1; x < 33; x++) {            // 32 раза нацеливаем "щель" сканера на бит
    binCurr = Number && binSlit;        // сравниваем бит сканера и аргумента
    if binCurr > 0 {
    lcd.print("1");
    }
    else {
    lcd.print("0");
    }
    binSlit >>1;                        // сдвигаем сканер вправо на один разряд
    }
    }

     
    Поскольку библа не работает - протестировать нечем. Но знаю - тормоз будет.
     
    Последнее редактирование: 20 мар 2020
  15. Kakmyc

    Kakmyc Нерд

  16. b707

    b707 Гуру

  17. microsystems

    microsystems Нерд

  18. ostrov

    ostrov Гуру

    А я подниму до 5000. Но делать не буду.
     
    parovoZZ нравится это.
  19. я бы за 5000 может даже сделал.
     
  20. Airbus

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

    Купить не?Нужно именно на Ардуино?