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

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11
    Модератор
    Регистрация
    06.07.2008
    Возраст
    47
    Сообщений
    414
    Вес репутации
    455

    По умолчанию Re: Как точно вычислить температуру со штатного датчика двигателя?

    порядок такой:
    сначала объявляешь константу, потом массив (массив использует константу). И то и другое - вне функций, если собираешься использовать их более чем в одной функции.

    Код:
    #include <avr/pgmspace.h>  
         
    #define Temp1Count 5 
    uint16_t Temp1[Temp1Count][2] PROGMEM = {{0,40}, {5,80}, {26,200}, {42,300}, {70,400}}; 
    
    void setup() { 
    }
    
    void loop() {
    ...
    // тут располагать что угодно, в том числе - аппроксимацию.
    }
    Еще, мой тебе совет - не объявляй лишних глобальных переменных. И уж точно - не используй глобальные переменные в качестве переменных цикла без большой необходимости.

    У каждого идентификатора (переменной, функции...) есть область видимости. Это область, в которой этот идентификатор можно использовать.
    К примеру:
    ...
    {
    int i;
    // тут можно использовать переменную i
    }
    // а вот тут ее уже нет, ибо скобка закрыта и область видимости вместе с ней.

    собственно то, что ты пишешь именно на область видимости и указывает.

    In function 'void loop()': error: 'Temp1' was not declared in this scope

    Массив Temp1 объявлен в твоем коде внутри функции Setup(), как следствие, вне Setup() этот массив недоступен.

    (добавлено)
    Ты когда написал после #define и #include (вне функций)
    int i;
    сделал переменную глобальной. Это означает, что эта переменная существует везде внутри этого модуля. Соответственно, изменение этой переменной в любой функции поменяет ее значение. Такое можно делать, если переменная хранит какое-то текущее состояние системы, к примеру, но тогда переменной дают какое-то разумное название:
    int CurrentState;

    Если же сделать как у тебя написано, то это может привести к ошибке. Нижеприведенный цикл будет выполняться вечно, поскольку переменная i одна и та же для цикла и в функции cаlc:
    Код:
        
    int i;
    
    void setup() { 
    }
    
    void calc(){
     i=5;
    }
    
    void loop() {
     for (i=0;i<10;i++)
     calc();
    }
    Последний раз редактировалось SBorovkov; 09.08.2010 в 22:45.

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

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

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

Ваши права

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