16x2 Oregon THN

Тема в разделе "Arduino & Shields", создана пользователем Максим B, 26 янв 2016.

  1. Максим B

    Максим B Гуру

    Кто сможет помочь с выводом температуры с датчика орегон большими цифрами? Код есть сделал по этой статье https://geektimes.ru/post/255812/ , сам код просто очень большой получился - вот исходник https://cloud.mail.ru/public/KGdN/8QA7A3zx7 . В интернете ничего толкого не нашел. ((



    Компилятор ругается так:

    Big_LCD.ino: In function 'void reportSerial(const char*, DecodeOOK&)':
    Big_LCD:37: error: too few arguments to function 'void printDigits(int, int)'

    Big_LCD:491: error: at this point in file"
     
  2. lerik2703

    lerik2703 Гик

    Вы передаете один аргумент а надо 2!
    Код (C++):
    printDigits(temperature(data),0);
     
    Максим B нравится это.
  3. Максим B

    Максим B Гуру

    Код компилировался, но на экран ничего не выводится ((( Если оставить просто такую запись printDigits(1,0);, тогда выводится 1
     
  4. Максим B

    Максим B Гуру

    Если записать такой код
    Код (Text):

     printDigits(channel(data),2);
     printDigits(temperature(data),5);
     
    На дисплее появляется № канала , а дальше пусто(((( В этой переменной походу храниться число полностью например 25.70 - но как это вывести на экран???
     
  5. lerik2703

    lerik2703 Гик

    самый простой способ перевести float в строку (String) и разбить на знаки (правда требует памяти) .
    там в примере точки нет большой и минуса
     
    Максим B нравится это.
  6. Максим B

    Максим B Гуру

    Про точку и минус знаю ))) Добавлю, а вот пока со строкой буду разбираться - тоже уже об этом подумал.
     
  7. lerik2703

    lerik2703 Гик

    Код (C++):
    char charBuf[7];
    Код (C++):
      float dataTemp= temperature(data) ;
      String floatToString =  String(dataTemp);
      byte lenString=floatToString.length();
      floatToString.toCharArray(charBuf, (lenString)+1);

      for (int a = 0; lenString > a; a++){
           if (charBuf[a]=='-')
              printDigits(MINUS,1);
       else if (charBuf[a]=='.')
              printDigits(POINT,4);
       else
         printDigits((int)(charBuf[a]-'0'),a);
     
      }

    как вариант позиция курсора определенна случайно ну и
    как вариант для минуса ..byte UB[8].. а точку ..byte block[8]..
     
    Максим B нравится это.
  8. Максим B

    Максим B Гуру

    Big_LCD.ino: In function 'void reportSerial(const char*, DecodeOOK&)':
    Big_LCD:495: error: call of overloaded 'String(float&)' is ambiguous
    C:\arduino-1.0.5\hardware\arduino\cores\arduino/WString.h:70: note: candidates are: String::String(long unsigned int, unsigned char)
    C:\arduino-1.0.5\hardware\arduino\cores\arduino/WString.h:69: note: String::String(long int, unsigned char)
    C:\arduino-1.0.5\hardware\arduino\cores\arduino/WString.h:68: note: String::String(unsigned int, unsigned char)
    C:\arduino-1.0.5\hardware\arduino\cores\arduino/WString.h:67: note: String::String(int, unsigned char)
    C:\arduino-1.0.5\hardware\arduino\cores\arduino/WString.h:66: note: String::String(unsigned char, unsigned char)
    C:\arduino-1.0.5\hardware\arduino\cores\arduino/WString.h:65: note: String::String(char)
    Big_LCD:502: error: 'MINUS' was not declared in this scope
    Big_LCD:504: error: 'POINT' was not declared in this scope
    Big_LCD:506: error: 'a' was not declared in this scope
    Big_LCD.ino: At global scope:
    Big_LCD:530: error: expected unqualified-id before 'else'
    Big_LCD:548: error: expected constructor, destructor, or type conversion before '.' token
    Big_LCD:549: error: expected declaration before '}' token
     
  9. Максим B

    Максим B Гуру

    Функция PrintDigits
    Код (Text):

    void printDigits(int digits, int x){
      // utility function for digital clock display: prints preceding colon and leading 0

      switch (digits) {
      case 0:  
        custom0(x);
        break;
      case 1:  
        custom1(x);
        break;
      case 2:  

    .......
     
     
  10. lerik2703

    lerik2703 Гик

    Версия 1.0.5 не поддерживает преобразование в float ->String скачайте последнюю с оф сайта или просто заменить файлы WString.cpp WString.h
     
    Последнее редактирование: 27 янв 2016
    Максим B нравится это.
  11. lerik2703

    lerik2703 Гик

    это соответственно надо определить
     
    Максим B нравится это.
  12. Максим B

    Максим B Гуру

    С этим все ок
     
  13. Максим B

    Максим B Гуру

    С этим попробую. Спасибо
     
  14. Максим B

    Максим B Гуру

    В этом месте:
    Код (Text):

         if (charBuf[a]=='-')
              printDigits(MINUS,1);
     
    Скачал новую версию -- вот, что выдает
    Код (Text):

    error: initializing argument 1 of 'void printDigits(int, int)' [-fpermissive]

    exit status 1
    invalid conversion from 'void (*)(int)' to 'int' [-fpermissive]
     
    Функцию MINUS создал
     
    Последнее редактирование: 27 янв 2016
  15. lerik2703

    lerik2703 Гик

    функцию создавать не надо а просто из объявить вот так например
    Код (C++):
    #define POINT 11
    #define MINUS 10
     
    Максим B нравится это.
  16. lerik2703

    lerik2703 Гик

    и в конце функции void printDigits(int digits, int x) дописать
    Код (C++):
     case 10:
         // печатаем минус
        break;
      case 11:
          // печатаем точку
        break;
     
    Максим B нравится это.
  17. Максим B

    Максим B Гуру

    Сейчас попоробую
     
  18. Максим B

    Максим B Гуру

    Цифры вывел, правда все только все в кучу, но точку получилось вывести по середине экрана примерно. Что можно исправить? . Спасибо Вам за помощь.
     
  19. Максим B

    Максим B Гуру

    С утра тут надумал, но еще не проверял - так будет правильно printDigits((int)(charBuf[a]-'0'),a+2); ?
     
  20. lerik2703

    lerik2703 Гик

    не думаю что так получиться) как вы вообще хотите цифры размешать ?желательно фото со следующей индикацией -30.00, 30.00, -3.00, 3.00