Показано с 1 по 10 из 19

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    55
    Сообщений
    13,381
    Вес репутации
    10

    По умолчанию Re: Arduino и температурный сенсор

    Arduino поддерживает тип данных с плавающей точкой
    Диапазон значений — от -3.4028235E+38 до 3.4028235E+38.
    Переменная типа float занимает 32 бита (4 байта) в памяти.

    Пример
    float myfloat;
    float sensorCalbrate = 1.117;

    Синтаксис
    float var = val;

    var - имя переменной
    val - присваиваемое значение

    Пример использования в коде
    int x;
    int y;
    float z;

    x = 1;
    y = x / 2; // y теперь равен 0, тип int не может хранить дробные числа
    z = (float)x / 2.0; // z равна 0.5 (следует использовать 2.0, а не 2)
    Последний раз редактировалось Chip; 17.01.2011 в 12:25.

  2. #2
    Новичок
    Регистрация
    22.10.2010
    Сообщений
    11
    Вес репутации
    187

    По умолчанию Re: Arduino и температурный сенсор

    Сделал переменную RealTemp float. Заработало:
    Код:
    #define Temp1Count 13
    #include <avr/pgmspace.h> 
    uint16_t Temp1[Temp1Count][2] PROGMEM = 
    {
      {77.95155709,-25,}, //первое число на входе, второе температура
      {80.18392652,-24.5},
      {132.1470136,-15},
      {191.9567007,-7},
      {256.232939,0},
      {329.8167327,7},
      {421.0667973,15},
      {536.3809524,25},
      {643.5181429,35},
      {772.1414862,50},
      {903.0706326,75},
      {964.8461591,100},
      {993.3008629,125}
    };
      
    const int in = 0;
    int sensor = 0;
    int j;
    void setup()
    {
      Serial.begin(9600);
    }
    
    void loop() {
    	sensor = analogRead(in);
            Serial.print("Analog = ");
    	Serial.println(sensor);
            uint16_t InTemp; 
            float RealTemp; 
            uint16_t InLeftTemp; 
            InTemp= sensor; 
            j=Temp1Count; 
            do 
              { 
                j--; 
                InLeftTemp=pgm_read_word(&Temp1[j][0]); 
              } 
            while ((j>=0.0)&&(InTemp<InLeftTemp)); 
            float InRightTemp=pgm_read_word(&Temp1[j+1][0]); 
            float OutLeftTemp=pgm_read_word(&Temp1[j][1]); 
            float OutRightTemp=pgm_read_word(&Temp1[j+1][1]); 
            RealTemp=OutLeftTemp+(OutRightTemp-OutLeftTemp)*(InTemp-InLeftTemp)/(InRightTemp-InLeftTemp);//RealTemp=(uint16_t)RealTemp;
            Serial.print("temp = ");Serial.println((RealTemp));    
            delay(1000);
            
     }
    Всем спасибо!

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •