"Непослушный" счётчик баллов

Тема в разделе "Arduino & Shields", создана пользователем mikiii, 26 янв 2019.

  1. mikiii

    mikiii Нерд

    Работаю над мини-проектом: была поставлена задача сделать счётчик баллов, которым можно будет управлять ИК-пультом. Все компоненты (кроме Arduino Uno) из Амперки: ЖК-экран 16x2 от МЭЛТ, ИК-приёмник TSOP 22 и ИК-пульт "Амперка". Код получился таким:
    Код (C++):
    #include <LiquidCrystalRus.h>
    #include "IRremote.h"
    IRrecv i(A0);
    decode_results in;
    LiquidCrystalRus d(12, 11, 5, 4, 3, 2);
    byte us = 0x1689609F;
    byte ds = 0x1689B847;
    byte uf = 0x168950AF;
    byte df = 0x168958A7;
    int b = 0;
    void setup()
    {
      d.begin(16, 2);
      d.print("Кол-во баллов:");
      i.enableIRIn();
      d.setCursor(0, 1);
      d.print(b);
    }
    void loop()
    {
      char(b);
      if (i.decode( &in))
      {
        if (in.value == us)
        {
          b=b+1;
        }
        else if (in.value == ds)
        {
          b=b-1;
        }
        else if (in.value == uf)
        {
          b=b+10;
        }
        else if (in.value == df)
        {
          b=b-10;
        }
        if (b < 0)
        {
          b = 0;
        }
        if (b > 500)
        {
          b = 500;
        }
        d.setCursor(0,1);
        d.print(b);
      }
      i.resume();
    }
    Код кнопок узнавал так:
    Код (C++):
    #include "IRremote.h"
    IRrecv irrecv(A0);
    decode_results results;
    void setup()
    {
      Serial.begin(9600);
      irrecv.enableIRIn();
    }

    void loop()
    {
      if ( irrecv.decode( &results ))
      {
        Serial.println( results.value, HEX);
        irrecv.resume();
      }
    }
    Но в итоге счётчик не реагирует на пульт. Что делать ума ни приложу. Если поможете буду благодарен))
    P. S. Подключал ровно так же как прописано статье wiki Амперка про ЖК-экраны 16x2, Только ещё подключил ИК-приёмник.
     
  2. ZAZ-965

    ZAZ-965 Гуру

    byte us = 0x1689609F - многовато для байта, не правда ли? Должно быть unsigned long
     
    mikiii нравится это.
  3. parovoZZ

    parovoZZ Гуру

    Компилятор тупо заносит 0x16 и не ругается? Ни за что не поверю!
     
    mikiii нравится это.
  4. Asper Daffy

    Asper Daffy Гуру

    Ну, про типы уже сказано.

    Кроме типов:
    1) что означает глубокомысленная запись char(b); в первой строчке в loop?
    2) Какое отношение оно имеет к int b = 0; в строке 10?
    3) Наконец, если уж b теперь char, то зачем Вы его сравнивает на >500, если char никогда не бывает больше 127?
    4) почему resume вынесено за if ?
     
    ZAZ-965 и mikiii нравится это.
  5. mikiii

    mikiii Нерд

    Ну он ругается, но пропускает. Вот что пишет:

    C:\Users\Пользователь\Desktop\Arduino Code\dps_Uk_v1\dps_Uk_v1.ino:6:11: warning: large integer implicitly truncated to unsigned type [-Woverflow]

    C:\Users\Пользователь\Desktop\Arduino Code\dps_Uk_v1\dps_Uk_v1.ino:7:11: warning: large integer implicitly truncated to unsigned type [-Woverflow]

    C:\Users\Пользователь\Desktop\Arduino Code\dps_Uk_v1\dps_Uk_v1.ino:8:11: warning: large integer implicitly truncated to unsigned type [-Woverflow]

    C:\Users\Пользователь\Desktop\Arduino Code\dps_Uk_v1\dps_Uk_v1.ino:9:11: warning: large integer implicitly truncated to unsigned type [-Woverflow]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '160' from 'int' to 'char' inside { } [-Wnarrowing]

    };

    ^

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '161' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '224' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '163' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '164' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '165' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '166' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '167' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\ПользовательDocuments\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '168' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '169' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '170' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '225' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '171' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '172' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '226' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '173' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '174' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '175' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '176' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '177' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '178' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '179' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '180' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '227' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '182' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '183' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '184' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '185' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '186' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '187' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '188' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '189' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '190' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '191' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '228' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '229' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '192' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '193' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '230' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '194' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '195' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '196' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '197' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '198' from 'int' to 'char' inside { } [-Wnarrowing]

    C:\Users\Пользователь\Documents\Arduino\libraries\LiquidCrystalRus-master\LiquidCrystalRus.cpp:21:9: warning: narrowing conversion of '199' from 'int' to 'char' inside { } [-Wnarrowing]

    Скетч использует 8330 байт (25%) памяти устройства. Всего доступно 32256 байт.
    Глобальные переменные используют 307 байт (14%) динамической памяти, оставляя 1741 байт для локальных переменных. Максимум: 2048 байт.
     
    Последнее редактирование: 27 янв 2019
  6. parovoZZ

    parovoZZ Гуру

    Очень большое заблуждение думать, что варнинги компилятора никак не влияют на программу. Ещё большее заблуждение думать, что если компилятор ничего не сообщает, то Программа будет работать так, как задумывалось программистом.
     
    Un_ka, mikiii и Airbus нравится это.
  7. mikiii

    mikiii Нерд

    Спасибо. LiquidCrystalRus заменил на LiquidCrystal (и изменил программу под неё разумеется) и последовал совету ZAZ-965. Про char(b): Я просто в один момент предположил, что экран просто не хочет int выводить и поставил программе менять у переменной b тип int на char. После "фиаско" это убрал, но одну строчку пропустил:D Саму переменную b ввожу в строке № 10 для вывода количества баллов. А resume поставил после if изначально, не подумал, что так я постоянно перезапускаю ИК- приёмник и принять он следовательно ничего не может. За это ОТДЕЛЬНОЕ спасибо!
    А так прога заработала, только получил баг с очисткой экрана, но он был устранён.
     
    ZAZ-965 нравится это.
  8. ZAZ-965

    ZAZ-965 Гуру

    Заработала - хорошо. Спрячьте, пожалуйста, под спойлер длинный список предупреждений компилятора.