порядок такой:
сначала объявляешь константу, потом массив (массив использует константу). И то и другое - вне функций, если собираешься использовать их более чем в одной функции.
Еще, мой тебе совет - не объявляй лишних глобальных переменных. И уж точно - не используй глобальные переменные в качестве переменных цикла без большой необходимости.Код:#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(); }




Ответить с цитированием