Код Arduino не будет компилироваться после сохранения

Каждый раз, когда я запускаю приведенный ниже код без сохранения, он компилируется. При сохранении получаю ошибки:

C:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/main.cpp:11: неопределенная ссылка на `setup'

C:\Program Files (x86)\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino/main.cpp:14: неопределенная ссылка на `loop'

Я уже пытался удалить папку Arduino в C:\Program Files (x86), загрузить ее и обновить драйвер.

Другие программы вроде работают нормально. Как исправить и что не так?

#define m_pin1 13
#define m_pin2 12
#define sensorPin 0

int val1;
int val2;
int avg;
int threshold;
int flipTimer = 100;

void setup(){
    pinMode(m_pin1, OUTPUT);
    pinMode(m_pin2, OUTPUT);
    pinMode(sensorPin, INPUT);
    Serial.begin(9600);
    Serial.println("Sensor 1 Average:");
}

void loop(){
    moisture_val();
}

int moisture_val(){
    setSensorPolarity(true);
    delay(flipTimer);
    int val1 = analogRead(sensorPin);
    delay(flipTimer);
    setSensorPolarity(false);
    delay(flipTimer);
    int avg = reportLevels(val1,val2);
    int val2 = 1023 - analogRead(sensorPin);
}

void setSensorPolarity(boolean flip){
    if(flip){
        digitalWrite(m_pin1, HIGH);
        digitalWrite(m_pin2, LOW);
    }
    else{
        digitalWrite(m_pin1, LOW);
        digitalWrite(m_pin2, HIGH);
    }
}

int reportLevels(int val1,int val2){
    int avg = (val1 + val2) / 2;
    return(avg);
}

person Aaron    schedule 16.04.2013    source источник
comment
Я полагаю, вы выбрали правильную плату, программатор и т. д.? Кажется, что это далеко не так, но компилятор Arduino может выдавать странные сообщения...   -  person Eric Fossum    schedule 17.04.2013
comment
Да, я убедился, что все остальное было правильно. Я даже удалил драйвер и переустановил его. Я предполагаю, что в коде нет ничего плохого?   -  person Aaron    schedule 17.04.2013
comment
У вас какое-то странное имя для файла или что-то в этом роде? Потому что похоже, что он не связан с вашим файлом. Или, я должен сказать, когда он делает ссылку, он не находит функции setup() и loop(), которые кажутся четко определенными в вашем файле.   -  person bobwki    schedule 17.04.2013
comment
@ Аарон - я пока ничего не вижу. Вы говорите, что ошибки на 11 и 14. Какие это строки?   -  person Eric Fossum    schedule 17.04.2013
comment
Кроме того, что, если вы загрузите что-то, что работает (например, blink) и добавите к нему этот код?   -  person Eric Fossum    schedule 17.04.2013
comment
@everyone По какой-то причине это работает, когда я сохраняю его под новым именем   -  person Aaron    schedule 17.04.2013


Ответы (6)


Среда IDE ожидает найти файл в папке с таким же именем. Посмотрите на структуру файлов и папок, которые работают как надо. Как только имена совпадут, проблема должна исчезнуть. Если это не так, переключите IDE на "подробный" для компиляции. Это позволит вам найти временную папку, в которой обрабатывается фактический исходный код C. Затем вы можете взглянуть на программу, которая фактически компилируется и компонуется. Это имеет большое значение для выявления реальных проблем.

Вы также можете изучить подробности процесса сборки Arduino во время анализа подробного вывода компилятора. .

person Udo Klein    schedule 17.04.2013

У Arduino очень специфические требования к именам создаваемых вами скетчей. Если вы сохранили это как «Основной» или «основной», вам нужно сохранить его под другим именем в другом месте.

person Aaron    schedule 21.01.2014
comment
+1 за это, в моем проекте имя основного файла .ino с функциями настройки и цикла внутри него и вложенной в него папкой main вызвало эту проблему для меня. Обратите внимание, что это произошло только при сборке на моем Mac (OSX 10.10.5), построенном на Windows 8.1 с прикрепленной папкой и файлом .ino, называемым main, без проблем. - person The_Neo; 24.12.2015

Я обнаружил проблему: имя файла INO не должно совпадать с именем класса.

У меня три файла: DB1280.ino DB1280.cpp DB1280.h Вылезает ошибка компиляции. Поэтому я изменил имя DB1280.ino. Например, SimpleDB1280.ino. Ошибка исчезла.

person SimpleTeam    schedule 06.03.2014
comment
Если быть точным, если я правильно понимаю, файл .ino должен иметь то же имя, что и папка, в которой он содержится, и, в конечном итоге, другие файлы библиотеки (.h, .cpp) НЕ МОГУТ иметь такое же имя (независимо от другого расширения) - person swK; 30.10.2015

Та же проблема здесь. Исправил, удалив пробелы в названии проекта.

person Rene Munsch    schedule 19.04.2015
comment
Пожалуйста, предоставьте более подробную информацию о том, какой специальный символ был удален, что исправило проблему. Этот ответ слишком короткий и вряд ли будет полезен другим. - person Cliff Ribaudo; 19.04.2015

Упростите название проекта

Я изменил название своего проекта с помощью Сохранить как на my-project. Это вызвало ошибку, которую вы опубликовали.

Чтобы решить эту проблему, упростите название проекта, исключите специальные символы, такие как -, из названия проекта.

person Jossef Harush    schedule 25.10.2015

Вы должны просто выбрать вариант предпочтения для внешнего редактора. Объяснение: при выборе вашей страницы Arduino отображается серым цветом, и вы можете писать программу. Поэтому, когда вы хотите перенести с ardublock на arduino, ваш код не принимается, и это нормально, потому что ardublock не является внешним редактором для arduino. Отмените выбор, ваша страница Arduino станет белой, и вы сможете писать код и передавать код из ardublock. У меня была та же проблема, я использую ее, и она работает. Веселитесь :)

person user2549522    schedule 04.07.2013