Вынести свои функции из скетча в отдельные файлы

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013
Хочу разнести основное тело скетча и функции по разным файлам - мне так удобнее - одновременно на трех мониторах отлаживать код, чем постоянно скроллить туды-сюды.
 
Для примера кратенький рабочий скетч:
[code]#define PAUSE 100
int led1 = 13;
int led2 = 9;
 
void setup() {                
  pinMode(led1, OUTPUT);     
  pinMode(led2, OUTPUT);     
}
 
void loop() {
  blinkLed1();
  blinkLed2();
}
 
void blinkLed1() {
  digitalWrite(led1, HIGH); 
  delay(PAUSE);
  digitalWrite(led1, LOW);
  delay(PAUSE);
}
 
void blinkLed2() {
  digitalWrite(led2, HIGH); 
  delay(PAUSE);
  digitalWrite(led2, LOW);
  delay(PAUSE);
}[/code]
 
Делаю по [url=http://arduino.cc/en/Hacking/BuildProcess]этой статье[/url] (с английским не очень дружу, увы).
Т.е. в файле Sketch.ino оставляю инициализацию, setup() и loop():
[code]#define PAUSE 100
int led1 = 13;
int led2 = 9;
 
void setup() {                
  pinMode(led1, OUTPUT);     
  pinMode(led2, OUTPUT);     
}
 
void loop() {
  blinkLed1();
  blinkLed2();
}
 
// Подключаем BlinkLed1.c
#include "BlinkLed1.c"
 
// Подключаем BlinkLed2.c
#include "BlinkLed2.c"
[/code]
 
а каждую функцию сохраняю в отдельные файлы functionN.c, которые лежат там же, где и Sketch.ino
Пример файла с функцией:
[code]#include "Arduino.h"
 
void blinkLed1() {
  digitalWrite(led1, HIGH); 
  delay(PAUSE);
  digitalWrite(led1, LOW);
  delay(PAUSE);
}
[/code]
 
Но не выходит, где-то что-то пропущено - когда файл цельный, все компилируется, когда разделяю - выходит ошибка:
Цитата:
error: 'blinkLed1' was not declared in this scope
error: 'blinkLed2' was not declared in this scope
 
Где дальше копать?
trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Это ваш  первый файл, основной:

#define PAUSE 100
int led1 = 13;
int led2 = 9;
 
void setup() {                
  pinMode(led1, OUTPUT);     
  pinMode(led2, OUTPUT);     
}
 
void loop() {
  blinkLed1();
  blinkLed2();
}

Это первый  ТАВ:


void blinkLed1() {
  digitalWrite(led1, HIGH);
  delay(PAUSE);
  digitalWrite(led1, LOW);
  delay(PAUSE);
} 

А это второй ТАВ:


 
void blinkLed2() {
  digitalWrite(led2, HIGH); 
  delay(PAUSE);
  digitalWrite(led2, LOW);
  delay(PAUSE);
}

 

А что и где не работает?

ТАВ = это кнопка справа...

 
com
Offline
Зарегистрирован: 06.09.2013

кхм.... а у меня ТАБ слева..... :)

maksim
Offline
Зарегистрирован: 12.02.2012

А у меня вообще таба на телефоне нет.

std
Offline
Зарегистрирован: 05.01.2012

Значит ли это, что можно называть файлы вообще отфонарно типа fkgjdghd.ino, главное покидать в один каталог, и чтобы главный (содержащий функции loop и setup) назывался так же как каталог? Не дописывая в него #include fkgjdghd?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Почти так, только имена  файлов  не должны начинаться с цифры 

и их сортировка будет происходить по алфавиту.

Расширение ещё может быть и      *.h