Помогите с кодом

26.10.2018
31
0
6
#1
Добрый вечер)
Чем выражение
C++:
float T =  sensors.getTempCByIndex(0);
которое компилится, отличается от
C++:
float T = sensor.temperature(0);
которое выдает ошибку
expression cannot be used as a function
При этом монитор порта исправно показывает, если переменные направить к нему.
Хочу вывести на часы WS2812B?, в первом случае вывод удался, но сенсор не меняет показания, пробую через другой датчик.
 
Последнее редактирование:
26.10.2018
31
0
6
#3
@Wan-Derer,
обращение к датчику, выводит 28.56
C++:
Serial.println((String)sensor.temperature);
как привести к виду, для вывода на часы
C++:
 String T = sensor.temperature(0);
 convert(T);
Результаты измерений доступны для чтения из переменных: temperature, pressure, altitude, после вызова функции read(). Все переменные имеют тип float.
// temperature - хранит значение текущей температуры в °С, pressure - хранит текущее значение атмосферного давления в мм. рт. ст., altitude - хранит высоту в метрах относительно начальной.
 
26.10.2018
31
0
6
#4
C++:
#include <iarduino_Pressure_BMP.h>   // Подключаем библиотеку для работы с датчиками BMP180 или BMP280
iarduino_Pressure_BMP sensor(0x76);        // Создаём объект sensor для работы с датчиком адрес которого на шине I2C установлен по умолчанию.
#include "FastLED.h"

#define NUM_LEDS 114 // 4*7*4 +2  Количество светодиодов
#define COLOR_ORDER BRG  // Порядок цвета для ленты
#define DATA_PIN 6  // Вывод для данных
#define BRI_PIN 3  // Вывод сенсора

CRGB leds[NUM_LEDS]; // Определение СД ленты
                    // 0,0,0,0
                    // 1,1,1,1
                    //  1 2 3 4 5 6 7 8 9 10111213141516171819202122232425262728
byte digits[12][28] = {{0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},  // Digit 0
                       {0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1},   // Digit 1
                       {1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0},   // Digit 2
                       {1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1},   // Digit 3
                       {1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1},   // Digit 4
                       {1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1},   // Digit 5
                       {1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},   // Digit 6
                       {0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1},   // Digit 7
                       {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},   // Digit 8
                       {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1},   // Digit 9 | Массив числе на 7 сегментах
                       {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0},   // Digit *0
                       {0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0}};  // Digit C
// сигнальный провод подключен к 2 пину на Arduino
bool Dot = false;  //состояние точек
int last_digit = 0;
// int ledColor = 0x0000FF; // Используемый цвет (in hex)
long ledColor = CRGB::DarkOrchid; // Используемый цвет (in hex)
//long ledColor = CRGB::MediumVioletRed;
//Случайные цвета
long ColorTable[16] = {
  CRGB::Amethyst,
  CRGB::Aqua,
  CRGB::Blue,
  CRGB::Chartreuse,
  CRGB::DarkGreen,
  CRGB::DarkMagenta,
  CRGB::DarkOrange,
  CRGB::DeepPink,
  CRGB::Fuchsia,
  CRGB::Gold,
  CRGB::GreenYellow,
  CRGB::LightCoral,
  CRGB::Tomato,
  CRGB::Salmon,
  CRGB::Red,
  CRGB::Orchid
};                       
void setup(){
    Serial.begin(9600);
    delay(1000);
    sensor.begin();                  // Инициируем работу с датчиком (начальная высота по умолчанию = 0 метров)
 LEDS.addLeds<WS2812B, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS); // Выбор типа ленты
 LEDS.setBrightness(55); // Установка яркости
}

// Convert temp to array needet for display
void TempToArray(){
//  tmElements_t tm;
//  RTC.read(tm);

//  if (tm.Second != 27) {
//    TempShow = false;
//    return;
//  }
/*
 if  (time.seconds !=20||time.seconds !=50){
    TempShow = false;
    return;
    }
*/
/*
//  TempShow = true;
//  int t = RTC.temperature();
   int t = sensor.temperature;
//  int celsius = (t / 4.0) * 100;
   int celsius = t;
*/
    int celsius = sensor.temperature;
    
//  Serial.print("Temp is: ");Serial.println(celsius);
//  Serial.println(sensor.temperature);
  Serial.println(celsius);
 
  int cursor = 114; // last led number
    
    leds[57]=0x000000;
    leds[56]=0x000000;
      
  for(int i=1;i<=4;i++){
    int digit = celsius % 10; // get last digit in time
    if (i==1){
      Serial.print("Digit 4 is : ");Serial.print(digit);Serial.print(" ");

      cursor = 86;
      
      for(int k=0; k<=27;k++){
        Serial.print(digits[11][k]);
        if (digits[11][k]== 1){leds[cursor]=ledColor;}
         else if (digits[11][k]==0){leds[cursor]=0x000000;};
         cursor ++;
        };
      Serial.println();
    }
    else if (i==2){
      Serial.print("Digit 3 is : ");Serial.print(digit);Serial.print(" ");

      cursor =58;
      
      for(int k=0; k<=27;k++){
        Serial.print(digits[10][k]);
        if (digits[10][k]== 1){leds[cursor]=ledColor;}
         else if (digits[10][k]==0){leds[cursor]=0x000000;};
         cursor ++;
        };
      Serial.println();
      }
    else if (i==3){
      Serial.print("Digit 2 is : ");Serial.print(digit);Serial.print(" ");
      cursor =28;
      for(int k=0; k<=27;k++){
        Serial.print(digits[digit][k]);
        if (digits[digit][k]== 1){leds[cursor]=ledColor;}
         else if (digits[digit][k]==0){leds[cursor]=0x000000;};
         cursor ++;
        };
      Serial.println();
      }
    else if (i==4){
      Serial.print("Digit 1 is : ");Serial.print(digit);Serial.print(" ");
      cursor =0;
      for(int k=0; k<=27;k++){
        Serial.print(digits[digit][k]);
        if (digits[digit][k]== 1){leds[cursor]=ledColor;}
         else if (digits[digit][k]==0){leds[cursor]=0x000000;};
         cursor ++;
        };
      Serial.println();
      }
    celsius /= 10;
  };
};

void loop (){
TempToArray();
FastLED.show();

}
не могу понять, почему на лед идет температура в виде 0026, а не 26'С, при этом отображается 00'C, надо как-то убрать нули и будет норм)
вроде было в старых скетчах описание про сдвиг, гляну завтра)
 
26.10.2018
31
0
6
#5
все, отладил))
только заметил один момент, что считывание температуры происходит в момент подачи питания или перезагрузки.
что можно предпринять, чтобы температура менялась в реальном времени?)