Missing fqbn fully qualified board name compilation error missing fqbn fully qualified board name

Ошибки компиляции Arduino Nano, Uno возникают при проверке или загрузке скетча ► рассмотрим, как исправить основные ошибки программы Ардуино

СОДЕРЖАНИЕ ►

  • Произошла ошибка при загрузке скетча в Ардуино
    • programmer is not responding
    • a function-definition is not allowed arduino ошибка
    • expected initializer before ‘}’ token arduino ошибка
    • ‘что-то’ was not declared in this scope arduino ошибка
    • No such file or directory arduino ошибка
  • Compilation error: Missing FQBN (Fully Qualified Board Name)

Ошибки компиляции Arduino IDE возникают при проверке или загрузке скетча в плату, если код программы содержит ошибки, компилятор не может найти библиотеки или переменные. На самом деле, сообщение об ошибке при загрузке скетча связано с невнимательностью самого программиста. Рассмотрим в этой статье все возможные ошибки компиляции для платы Ардуино UNO R3, NANO, MEGA и пути их решения.

Произошла ошибка при загрузке скетча Ардуино

Самые простые ошибки возникают у новичков, кто только начинает разбираться с языком программирования Ардуино и делает первые попытки загрузить скетч. Если вы не нашли решение своей проблемы в статье, то напишите свой вопрос в комментариях к этой записи и мы поможем решить вашу проблему с загрузкой (бесплатно!).

avrdude: stk500_recv(): programmer is not responding

Что делать в этом случае? Первым делом обратите внимание какую плату вы используете и к какому порту она подключена (смотри на скриншоте в правом нижнем углу). Необходимо сообщить Arduino IDE, какая плата используется и к какому порту она подключена. Если вы загружаете скетч в Ардуино Nano V3, но при этом в настройках указана плата Uno или Mega 2560, то вы увидите ошибку, как на скриншоте ниже.

Ошибка: programmer is not responding

Ошибка Ардуино: programmer is not responding

Такая же ошибка будет возникать, если вы не укажите порт к которому подключена плата (это может быть любой COM-порт, кроме COM1). В обоих случаях вы получите сообщение — плата не отвечает (programmer is not responding). Для исправления ошибки надо на панели инструментов Arduino IDE в меню «Сервис» выбрать нужную плату и там же, через «Сервис» → «Последовательный порт» выбрать порт «COM7».

a function-definition is not allowed here before ‘{‘ token

Это значит, что в скетче вы забыли где-то закрыть фигурную скобку. Синтаксические ошибки IDE тоже распространены и связаны они просто с невнимательностью. Такие проблемы легко решаются, так как Arduino IDE даст вам подсказку, стараясь отметить номер строки, где обнаружена ошибка. На скриншоте видно, что строка с ошибкой подсвечена, а в нижнем левом углу приложения указан номер строки.

Ошибка: a function-definition is not allowed

Ошибка: a function-definition is not allowed here before ‘{‘ token

expected initializer before ‘}’ token   expected ‘;’ before ‘}’ token

Сообщение expected initializer before ‘}’ token говорит о том, что вы, наоборот где-то забыли открыть фигурную скобку. Arduino IDE даст вам подсказку, но если скетч довольно большой, то вам придется набраться терпения, чтобы найти неточность в коде. Ошибка при компиляции программы: expected ‘;’ before ‘}’ token говорит о том, что вы забыли поставить точку с запятой в конце командной строки.

‘что-то’ was not declared in this scope

Что за ошибка? Arduino IDE обнаружила в скетче слова, не являющиеся служебными или не были объявлены, как переменные. Например, вы забыли продекларировать переменную или задали переменную ‘DATA’, а затем по невнимательности используете ‘DAT’, которая не была продекларирована. Ошибка was not declared in this scope возникает при появлении в скетче случайных или лишних символов.

Ошибка Ардуино: was not declared in this scope

Ошибка Ардуино: was not declared in this scope

Например, на скриншоте выделено, что программист забыл продекларировать переменную ‘x’, а также неправильно написал функцию ‘analogRead’. Такая ошибка может возникнуть, если вы забудете поставить комментарий, написали функцию с ошибкой и т.д. Все ошибки также будут подсвечены, а при нескольких ошибках в скетче, сначала будет предложено исправить первую ошибку, расположенную выше.

exit status 1 ошибка компиляции для платы Arduino

Данная ошибка возникает, если вы подключаете в скетче библиотеку, которую не установили в папку libraries. Например, не установлена библиотека ИК приемника Ардуино: fatal error: IRremote.h: No such file or directory. Как исправить ошибку? Скачайте нужную библиотеку и распакуйте архив в папку C:Program FilesArduinolibraries. Если библиотека установлена, то попробуйте скачать и заменить библиотеку на новую.

exit status 1 Ошибка компиляции для Arduino Nano

exit status 1 Ошибка компиляции для платы Arduino Nano

Довольно часто у новичков выходит exit status 1 ошибка компиляции для платы arduino uno /genuino uno. Причин данного сообщения при загрузке скетча в плату Arduino Mega или Uno может быть огромное множество. Но все их легко исправить, достаточно внимательно перепроверить код программы. Если в этом обзоре вы не нашли решение своей проблемы, то напишите свой вопрос в комментариях к этой статье.

missing fqbn (fully qualified board name)

Ошибка возникает, если не была выбрана плата. Обратите внимание, что тип платы необходимо выбрать, даже если вы не загружаете, а, например, делаете компиляцию скетча. В Arduino IDE 2 вы можете использовать меню выбора:
— список плат, которые подключены и были идентифицированы Arduino IDE.
— или выбрать плату и порт вручную, без подключения микроконтроллера.

Содержание

  1. Make error message from compiling w/o board selected more user friendly #62
  2. Comments
  3. Describe the current behavior
  4. To reproduce
  5. Describe the request
  6. Desktop
  7. Additional context
  8. Related
  9. Compilation error: Error: 2 UNKNOWN: no FQBN provided while board is in and plugged #421
  10. Comments
  11. steps
  12. Compilation error: grpc: error while marshaling: proto: Marshal called with nil #1812
  13. Comments
  14. Describe the problem
  15. To reproduce
  16. Expected behavior
  17. Arduino IDE version
  18. Operating system
  19. Operating system version
  20. Additional context
  21. Issue checklist

Make error message from compiling w/o board selected more user friendly #62

Describe the current behavior

On the first use, no board is selected. A new user may not realize it is necessary to select one. If they attempt to compile a sketch without selecting one, they will receive only this cryptic error message:

and this notification:

This doesn’t mean anything to even very advanced IDE users, and the user will have difficulty understanding what they need to do to resolve it.

To reproduce

  1. Quit the IDE if it is running.
  2. Simulate a fresh install by deleting the configuration folder:
    • Windows:

Port defaults to first available com port with lowest number not the last used #180 ).

  • Start the Arduino IDE.
    The board/port selector menu should show » ❌ No board selected«.
  • Select Sketch > Verify/Compile from the Arduino IDE menus.
  • Describe the request

    Show a user friendly error message. Something like:

    No board selected. Please select your Arduino board from the Tools > Board menu.

    Desktop

    • OS: Windows 10
    • Version: 2.0.0-rc3-snapshot.1d88263
      Date: 2022-01-24T16:22:30.529Z
      CLI Version: 0.20.2 [13783819]

    Additional context

    Even among Arduino CLI users, I have found that the concept of «FQBN» is not widely known. IDE users are even less likely to be familiar with this acronym, and even less anxious to spend their time learning what it means, since the it is not otherwise a part of the IDE user experience.

    Note that the error message produced by the reproduction instructions above is currently different than described due to a recent regression in Arduino CLI: arduino/arduino-cli#1812

    The text was updated successfully, but these errors were encountered:

    Источник

    Compilation error: Error: 2 UNKNOWN: no FQBN provided while board is in and plugged #421

    This may be a duplicate of #151 in which case feel free to close. But it may be another issue (see the «greyed board problem lower down).

    host OS: Ubuntu 20.04

    ide version etc: installed today from your pages:

    steps

    • I installed a board (in my case, the sparkfun apollo3 boards, by adding their board manager url to the preferences URLs list, and then installing from the boards manager). The boards seem to be well present and installed, see the screenshot:

    • I plugged in the board inside my computer, it is recognized and shows up on the ttyUSB0; I choose the right board and port. One thing seems strange there though, the board name is greyed out. See screenshot:

    • From now on, I get the «message 2 FQBN» issue, see screenshot.

    Any idea what causes that?

    The text was updated successfully, but these errors were encountered:

    Hi @jerabaul29. Do you see the boards listed under the Arduino IDE’s Tools > Board > Sparkfun Apollo3 Boards menu?

    No, I do not see the boards there, see screenshot:

    However in the board manager these boards appear as installed:

    Please post the output you get in the Linux terminal after starting the Arduino IDE.

    (just launching as $ ./arduino-ide .

    I updated from beta.5 to beta.8 today and I am now experiencing the same problem (on Windows). The Generic ESP boards are now grayed out and the same message occurs Compilation error: Error: 2 UNKNOWN: no FQBN provided .

    UPDATE:

    It seems to be an problem with updating the Arduino IDE, onces the Arduino IDE is updated just uninstall and re-install the ESP boards library in the Boards Manager.

    I was not able to reproduce this issue of the SparkFun Apollo3 Boards platform not appearing under the IDE’s board menus until I finally spotted the essential clue:
    #421 (comment)

    Notice that version 1.2.2 was installed, but the latest version offered by the package index at that time was 2.1.0

    There was a bug where the IDE did not recognize outdated boards platforms. This was actually a bug in the Arduino CLI tool the Arduino IDE uses to handle all the non-GUI tasks: arduino/arduino-cli#1401

    That bug has already been fixed: arduino/arduino-cli#1410

    The fixed version of Arduino CLI is used starting with Arduino IDE 2.0.0-beta.12, so you should no longer experience this issue when using the latest version of the IDE.

    Источник

    Compilation error: grpc: error while marshaling: proto: Marshal called with nil #1812

    Describe the problem

    Sorry there is probably something screwy in this code, that I am hacking up.

    I tried to do a verify operation, and the build aborted with an error:

    That was all of the output, all in orangish color.

    I have no idea what that error is supposed to imply.

    To reproduce

    Not sure, but I included the code. Note: this code is not done yet, nor may never be used, but just an experiment on Teensy 3.2, to see if I can use FTM timer to capture pulse widths and maybe generate specific pulses.

    I simply clicked on verify with this sketch, which includes a header file, which is part of the sketch.

    Expected behavior

    I am guessing probably lots of error messages.

    Arduino IDE version

    Operating system

    Operating system version

    Additional context

    I am running with yesterdays IDE did not see any updates for today.

    Issue checklist

    • I searched for previous reports in the issue tracker
    • I verified the problem still occurs when using the latest nightly build
    • My report contains all necessary details

    The text was updated successfully, but these errors were encountered:

    I believe I figured it out what happened.

    Before this I had done a SaveAs operation to this new name. The code hung with spinning . So I closed out the window (and process). Restarted IDE. Browsed to the new saved file and tried to do the compile.

    But turned out it had forgotten I was building for T3.1/2 and had the simple chose board. in drop down list.
    Going back up and choose T3.1 now it behaves normal.

    Side note: Thought maybe had issue with the new sketch name. So I exited the IDE, used browser to rename the directory and sketch to different name. I then restarted the IDE. Looks like it had issue with not finding the last sketch that was last edited, and gave me a blank window. Also the Sketchbook tab area showed as empty, but was able to go up to File ->Sketchbook and open up the sketch with the new name.

    had the simple chose board. in drop down list.

    Do you mean the » ❌ No board selected» like this?

    I gave it a try but I only got the expected «Missing FQBN» message rather than the unexpected error you reported.

    I exited the IDE, used browser to rename the directory and sketch to different name. I then restarted the IDE. Looks like it had issue with not finding the last sketch that was last edited, and gave me a blank window.

    I guess it is the same issue you reported at arduino/arduino-ide#1089. That will be fixed by arduino/arduino-ide#1152

    Источник

    Describe the current behavior

    On the first use, no board is selected. A new user may not realize it is necessary to select one. If they attempt to compile a sketch without selecting one, they will receive only this cryptic error message:

    Compilation error: Missing FQBN (Fully Qualified Board Name)
    

    and this notification:

    Error: Request compile failed with message: Compilation error: Missing FQBN (Fully Qualified Board Name)
    

    This doesn’t mean anything to even very advanced IDE users, and the user will have difficulty understanding what they need to do to resolve it.

    To reproduce

    1. Quit the IDE if it is running.
    2. Simulate a fresh install by deleting the configuration folder:
      • Windows:
        C:Users<user name>AppDataRoamingarduino-ide
        
      • Linux:
      • macOS:
        ~/Library/Application Support/arduino-ide/
        

      This step is done because the IDE currently makes it otherwise difficult for those with internal serial ports to achieve the required state of having no port selected, due to the odd fallback port selection behavior (e.g., Port defaults to first available com port with lowest number not the last used #180).

    3. Start the Arduino IDE.
      The board/port selector menu should show «❌ No board selected«.
    4. Select Sketch > Verify/Compile from the Arduino IDE menus.

    Describe the request

    Show a user friendly error message. Something like:

    No board selected. Please select your Arduino board from the Tools > Board menu.

    Desktop

    • OS: Windows 10
    • Version: 2.0.0-rc3-snapshot.1d88263
      Date: 2022-01-24T16:22:30.529Z
      CLI Version: 0.20.2 [13783819]

    Additional context

    Even among Arduino CLI users, I have found that the concept of «FQBN» is not widely known. IDE users are even less likely to be familiar with this acronym, and even less anxious to spend their time learning what it means, since the it is not otherwise a part of the IDE user experience.


    Note that the error message produced by the reproduction instructions above is currently different than described due to a recent regression in Arduino CLI: arduino/arduino-cli#1812

    Related

    • ide-v2-uploading-a-sketch.md steps are out of order docs-content#300

    СОДЕРЖАНИЕ ►

    • Произошла ошибка при загрузке скетча в Ардуино
      • programmer is not responding
      • a function-definition is not allowed arduino ошибка
      • expected initializer before ‘}’ token arduino ошибка
      • ‘что-то’ was not declared in this scope arduino ошибка
      • No such file or directory arduino ошибка
    • Compilation error: Missing FQBN (Fully Qualified Board Name)

    Ошибки компиляции Arduino IDE возникают при проверке или загрузке скетча в плату, если код программы содержит ошибки, компилятор не может найти библиотеки или переменные. На самом деле, сообщение об ошибке при загрузке скетча связано с невнимательностью самого программиста. Рассмотрим в этой статье все возможные ошибки компиляции для платы Ардуино UNO R3, NANO, MEGA и пути их решения.

    Произошла ошибка при загрузке скетча Ардуино

    Самые простые ошибки возникают у новичков, кто только начинает разбираться с языком программирования Ардуино и делает первые попытки загрузить скетч. Если вы не нашли решение своей проблемы в статье, то напишите свой вопрос в комментариях к этой записи и мы поможем решить вашу проблему с загрузкой (бесплатно!).

    avrdude: stk500_recv(): programmer is not responding

    Что делать в этом случае? Первым делом обратите внимание какую плату вы используете и к какому порту она подключена (смотри на скриншоте в правом нижнем углу). Необходимо сообщить Arduino IDE, какая плата используется и к какому порту она подключена. Если вы загружаете скетч в Ардуино Nano V3, но при этом в настройках указана плата Uno или Mega 2560, то вы увидите ошибку, как на скриншоте ниже.

    Ошибка: programmer is not responding

    Ошибка Ардуино: programmer is not responding

    Такая же ошибка будет возникать, если вы не укажите порт к которому подключена плата (это может быть любой COM-порт, кроме COM1). В обоих случаях вы получите сообщение — плата не отвечает (programmer is not responding). Для исправления ошибки надо на панели инструментов Arduino IDE в меню «Сервис» выбрать нужную плату и там же, через «Сервис» → «Последовательный порт» выбрать порт «COM7».

    a function-definition is not allowed here before ‘{‘ token

    Это значит, что в скетче вы забыли где-то закрыть фигурную скобку. Синтаксические ошибки IDE тоже распространены и связаны они просто с невнимательностью. Такие проблемы легко решаются, так как Arduino IDE даст вам подсказку, стараясь отметить номер строки, где обнаружена ошибка. На скриншоте видно, что строка с ошибкой подсвечена, а в нижнем левом углу приложения указан номер строки.

    Ошибка: a function-definition is not allowed

    Ошибка: a function-definition is not allowed here before ‘{‘ token

    expected initializer before ‘}’ token   expected ‘;’ before ‘}’ token

    Сообщение expected initializer before ‘}’ token говорит о том, что вы, наоборот где-то забыли открыть фигурную скобку. Arduino IDE даст вам подсказку, но если скетч довольно большой, то вам придется набраться терпения, чтобы найти неточность в коде. Ошибка при компиляции программы: expected ‘;’ before ‘}’ token говорит о том, что вы забыли поставить точку с запятой в конце командной строки.

    ‘что-то’ was not declared in this scope

    Что за ошибка? Arduino IDE обнаружила в скетче слова, не являющиеся служебными или не были объявлены, как переменные. Например, вы забыли продекларировать переменную или задали переменную ‘DATA’, а затем по невнимательности используете ‘DAT’, которая не была продекларирована. Ошибка was not declared in this scope возникает при появлении в скетче случайных или лишних символов.

    Ошибка Ардуино: was not declared in this scope

    Ошибка Ардуино: was not declared in this scope

    Например, на скриншоте выделено, что программист забыл продекларировать переменную ‘x’, а также неправильно написал функцию ‘analogRead’. Такая ошибка может возникнуть, если вы забудете поставить комментарий, написали функцию с ошибкой и т.д. Все ошибки также будут подсвечены, а при нескольких ошибках в скетче, сначала будет предложено исправить первую ошибку, расположенную выше.

    exit status 1 ошибка компиляции для платы Arduino

    Данная ошибка возникает, если вы подключаете в скетче библиотеку, которую не установили в папку libraries. Например, не установлена библиотека ИК приемника Ардуино: fatal error: IRremote.h: No such file or directory. Как исправить ошибку? Скачайте нужную библиотеку и распакуйте архив в папку C:Program FilesArduinolibraries. Если библиотека установлена, то попробуйте скачать и заменить библиотеку на новую.

    exit status 1 Ошибка компиляции для Arduino Nano

    exit status 1 Ошибка компиляции для платы Arduino Nano

    Довольно часто у новичков выходит exit status 1 ошибка компиляции для платы arduino uno /genuino uno. Причин данного сообщения при загрузке скетча в плату Arduino Mega или Uno может быть огромное множество. Но все их легко исправить, достаточно внимательно перепроверить код программы. Если в этом обзоре вы не нашли решение своей проблемы, то напишите свой вопрос в комментариях к этой статье.

    missing fqbn (fully qualified board name)

    Ошибка возникает, если не была выбрана плата. Обратите внимание, что тип платы необходимо выбрать, даже если вы не загружаете, а, например, делаете компиляцию скетча. В Arduino IDE 2 вы можете использовать меню выбора:
    — список плат, которые подключены и были идентифицированы Arduino IDE.
    — или выбрать плату и порт вручную, без подключения микроконтроллера.

    
    
    #include <LCD5110_Graph.h> // Аналоговые входы (analog pins) могут быть использованы как цифровые вход/выходы (digital pins). // Обращение к ним идет по номерам от 14 (для аналогового входа 0) до 19 (для аналогового входа 5). #define EXT_FILTER_PIN 12 #define EXT_AIR_PIN 1 #define EXT_HEATER_PIN 13 #define EXT_COOLING_PIN 10 #define EXT_LIGHT_1_PIN 15 #define EXT_LIGHT_2_PIN 16 #define EXT_CO2_PIN 0 #define EXT_POWER_ON_PIN 20 #define EXT_LIGHT_LED_PIN 11 #define EXT_UDO_MICRO_PIN 17 #define EXT_UDO_MACRO_PIN 18 #define EXT_UDO_Fe_PIN 19 #define Key_PIN 7 #define DispLight_min 253 //минимальная подсветка в режиме часов #define CorrTime -3 // коррекция хода системных часов [Сек] выполняется каждый час //const int CorrTime = -23; // коррекция хода системных часов [Сек] // It is assumed that the LCD module is connected to // the following pins using a levelshifter to get the // correct voltage to the module. // SCK - Pin 8 // MOSI - Pin 9 // DC - Pin 10 // RST - Pin 11 // CS - Pin 12 // #include <LCD5110_Graph.h> #define LED_LIGHT_PIN 9 LCD5110 myGLCD(8,7,6,4,5); extern uint8_t SmallFont[]; extern uint8_t BigNumbers[]; //extern unsigned char TinyFont[]; byte ledContrast; byte ledLight; //подключаем заголовочный файл библиотеки EEPROM #include <EEPROM.h> #include <OneWire.h> OneWire temp(14); // on pin 10 (a 4.7K resistor is necessary) float cur_temp = -999; byte temp_type_s; byte temp_data[12]; byte temp_addr[8]; byte temp_cicle = 0; // I assume you know how to connect the DS1307. // DS1307: SDA pin -> Arduino Digital 4 // SCL pin -> Arduino Digital 5 #include <DS1307.h> // Init the DS1307 DS1307 rtc(3, 2); // Init a Time-data structure Time time; unsigned long currentTime; unsigned long loopTime; byte key = 0; byte prev_key = 0; byte idle_key = 0; //const int max_idle_key = 100; //цыклов не активности перед скринсейвером #define max_idle_key 100 //цыклов не активности перед скринсейвером int cur_menu = 0; int cur_item = 0; boolean cur_item_edit = false; byte aquaT; // Требуемая температура воды boolean CoolingEnabled; // Разрешено ли охлаждение куллером boolean light1 = false; boolean light2 = false; boolean air = false; boolean CO2 = false; byte kormMin = 0; // Остаток времени для кормления мин byte minCool = 0; // минимальные обороты кулера для вентиляции крышки и охлаждения ламп byte maxCool = 0; // максимальные обороты для охлаждения воды void setup() { pinMode(EXT_HEATER_PIN, OUTPUT); // устанавливает режим работы - выход digitalWrite(EXT_HEATER_PIN, LOW); // выключает pinMode(EXT_COOLING_PIN, OUTPUT); // устанавливает режим работы - выход digitalWrite(EXT_COOLING_PIN, LOW); // выключает pinMode(EXT_LIGHT_1_PIN, OUTPUT); // устанавливает режим работы - выход digitalWrite(EXT_LIGHT_1_PIN, HIGH); // выключает light1 = true; pinMode(EXT_LIGHT_2_PIN, OUTPUT); // устанавливает режим работы - выход digitalWrite(EXT_LIGHT_2_PIN, LOW); // выключает light2 = false; pinMode(EXT_FILTER_PIN, OUTPUT); // устанавливает режим работы - выход digitalWrite(EXT_FILTER_PIN, HIGH); // выключает pinMode(EXT_CO2_PIN, OUTPUT); // устанавливает режим работы - выход digitalWrite(EXT_CO2_PIN, LOW); // выключает CO2 = false; pinMode(EXT_AIR_PIN, OUTPUT); // устанавливает режим работы - выход digitalWrite(EXT_AIR_PIN, HIGH); // выключает air = true; CoolingEnabled = false; // Разрешено ли охлаждение куллером pinMode(EXT_POWER_ON_PIN, OUTPUT); // устанавливает режим работы - выход digitalWrite(EXT_POWER_ON_PIN, LOW); // выключает pinMode(EXT_LIGHT_LED_PIN, OUTPUT); // устанавливает режим работы - выход digitalWrite(EXT_LIGHT_LED_PIN, LOW); // выключает pinMode(EXT_UDO_MICRO_PIN, OUTPUT); // устанавливает режим работы - выход digitalWrite(EXT_UDO_MICRO_PIN, LOW); // выключает pinMode(EXT_UDO_MACRO_PIN, OUTPUT); // устанавливает режим работы - выход digitalWrite(EXT_UDO_MACRO_PIN, LOW); // выключает pinMode(EXT_UDO_Fe_PIN, OUTPUT); // устанавливает режим работы - выход digitalWrite(EXT_UDO_Fe_PIN, LOW); // выключает //включит pullup резистор для входа: // pinMode(Key_PIN, INPUT); // Init EEPROM // for(int e = 0; e < 2047; e++) EEPROM.write(e,0); // EEPROM.write(0,61); // ledContrast !!!!!!! Очень акуратно иначе белый либо черный экран // EEPROM.write(1,200); // ledLight // EEPROM.write(2,24); // Требуемая температура воды // EEPROM.write(3,1); // Разрешено ли охлаждение куллером ledContrast = EEPROM.read(0); // первичная установка контраста - иначе при первом запуске нихрена невидно if ((ledContrast==0)||(ledContrast==255)){ ledContrast = 65; } ledLight = EEPROM.read(1); myGLCD.InitLCD(ledContrast); pinMode(LED_LIGHT_PIN, OUTPUT); // устанавливает режим работы - выход analogWrite(LED_LIGHT_PIN,ledLight); aquaT = EEPROM.read(2); // Требуемая температура воды minCool = EEPROM.read(3); // минимальные обороты кулера для вентиляции крышки и охлаждения ламп maxCool = EEPROM.read(4); // максимальные обороты для охлаждения воды // Set the clock to run-mode rtc.halt(false); // rtc.setDOW(SUNDAY); // Set Day-of-Week to SUNDAY // rtc.setTime(12, 0, 0); // Set the time to 12:00:00 (24hr format) // rtc.setDate(3, 10, 2010); // Set the date to October 3th, 2010 myGLCD.setFont(SmallFont); myGLCD.clrScr(); myGLCD.update(); /* myGLCD.setFont(SmallFont); myGLCD.clrScr(); myGLCD.print("AQUA controll", CENTER, 3); myGLCD.print("ALEX", CENTER, 20); myGLCD.drawRect(28, 18, 56, 28); for (int i=0; i<6; i++) { myGLCD.drawLine(57, 18+(i*2), 83-(i*3), 18+(i*2)); myGLCD.drawLine((i*3), 28-(i*2), 28, 28-(i*2)); } // myGLCD.setFont(TinyFont); myGLCD.print("(C) AlexVOK", CENTER, 36); // myGLCD.print("[email protected]", CENTER, 42); myGLCD.update(); delay(1000); */ //------------------------------------------------------------------------------- byte b = 0; while ( (!temp.search(temp_addr))&&(b < 10)) { //Serial.println("Нет больше адресов."); temp.reset_search(); delay(250); b++; } // if (OneWire::crc8(temp_addr, 7) != temp_addr[7]) { // Serial.println("CRC не является действительным!"); // } // Первый байт ROM указывает, какой чип switch (temp_addr[0]) { case 0x10: // Serial.println(" Chip = DS18S20"); temp_type_s = 1; break; case 0x28: // Serial.println(" Chip = DS18B20"); temp_type_s = 0; break; case 0x22: // Serial.println(" Chip = DS1822"); temp_type_s = 0; break; // default: // Serial.println("Устройство не распознано"); } currentTime = millis(); loopTime = currentTime; } //----------------------------------------------------------------------------------- float getTemp(){ // temp.reset(); // temp.select(temp_addr); // temp.write(0x44, 1); // start conversion, with parasite power on at the end // delay(1000); // maybe 750ms is enough, maybe not // we might do a ds.depower() here, but the reset will take care of it. temp.reset(); temp.select(temp_addr); temp.write(0xBE); // Read Scratchpad for (byte i = 0; i < 9; i++) { // we need 9 bytes temp_data[i] = temp.read(); } // Serial.print(OneWire::crc8(data, 8), HEX); // Convert the data to actual temperature // because the result is a 16 bit signed integer, it should // be stored to an "int16_t" type, which is always 16 bits // even when compiled on a 32 bit processor. int16_t raw = (temp_data[1] << 8) | temp_data[0]; if (temp_type_s) { raw = raw << 3; // 9 bit resolution default if (temp_data[7] == 0x10) { // "count remain" gives full 12 bit resolution raw = (raw & 0xFFF0) + 12 - temp_data[6]; } } else { byte cfg = (temp_data[4] & 0x60); // at lower res, the low bits are undefined, so let's zero them if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms //// default is 12 bit resolution, 750 ms conversion time } return ((float)raw / 16.0); } //----------------------------------------------------------------------------------- // Нажатые кнопки //int button; const byte BUTTON_NONE = 0; const byte BUTTON_UP = 1; const byte BUTTON_DOWN = 2; const byte BUTTON_OK = 3; const byte BUTTON_CANCEL = 4; int getPressedButton() { byte KeyNum=0; int KeyValue1=0; int KeyValue2=0; //Читаем в цикле аналоговый вход, для подавления дребезга и нестабильности читаем по два раза подряд, пока значения не будут равны. //Если значения равны 1023 – значит не была нажата ни одна клавиша. do { // считываем значения с аналогового входа(A0) KeyValue1=analogRead(Key_PIN); delay(10); KeyValue2=analogRead(Key_PIN); delay(5); } while (KeyValue1!=KeyValue2); //Интерпретируем полученное значение и определяем код нажатой клавиши if (KeyValue2 > 900) {KeyNum = BUTTON_NONE;} else if (KeyValue2 > 450) {KeyNum = BUTTON_CANCEL;} else if (KeyValue2 > 250) {KeyNum = BUTTON_UP;} else if (KeyValue2 > 100) {KeyNum = BUTTON_DOWN;} else {KeyNum = BUTTON_OK;} //Возвращаем код нажатой клавиши return KeyNum; } //----------------------------------------------------------------------------------- void naviKey(byte maxItems){ if(key == BUTTON_UP){ cur_item--; if(cur_item < 1) cur_item = maxItems; } if(key == BUTTON_DOWN){ cur_item++; if(cur_item > maxItems) cur_item = 1; } } //----------------------------------------------------------------------------------- void drawMenu(String mName, String item1, String item2, String item3, String item4){ myGLCD.setFont(SmallFont); myGLCD.clrScr(); myGLCD.print(mName,1,0); myGLCD.print(rtc.getTimeStr(FORMAT_SHORT),RIGHT,0); myGLCD.drawLine(0,8,83,8); myGLCD.drawLine(0,9,83,9); if(cur_item == 1){ myGLCD.print(item1,3,12); myGLCD.drawRoundRect(0,11,83,20); }else myGLCD.print(item1,0,12); if(cur_item == 2){ myGLCD.print(item2,3,21); myGLCD.drawRoundRect(0,20,83,29); }else myGLCD.print(item2,0,21); if(cur_item == 3){ myGLCD.print(item3,3,30); myGLCD.drawRoundRect(0,29,83,38); }else myGLCD.print(item3,0,30); if(cur_item == 4){ myGLCD.print(item4,3,39); myGLCD.drawRoundRect(0,38,83,47); }else myGLCD.print(item4,0,39); myGLCD.update(); } byte menu_hh; byte menu_mi; byte menu_dd; byte menu_mm; int menu_yyyy; byte menu_dow; byte menu_off; byte menu_item_count; int alertAdr; byte curLoad; byte prMin = 0; //----------------------------------------------------------------------------------- void drawIntMenu(String mName, int minVal, int maxVal, int Val){ myGLCD.setFont(SmallFont); myGLCD.clrScr(); myGLCD.print(mName,1,0); // myGLCD.print(rtc.getTimeStr(FORMAT_SHORT),RIGHT,0); myGLCD.drawLine(0,8,83,8); myGLCD.drawLine(0,9,83,9); myGLCD.setFont(BigNumbers); myGLCD.printNumI(Val,CENTER,11); myGLCD.drawRoundRect(0,38,83,47); int k = 80*(Val-minVal)/(maxVal - minVal); for(int i = 2; i < k+2; i++) myGLCD.drawLine(i,40,i,46); myGLCD.update(); } boolean new_hour = true; byte secc = 0; byte LED_sunrise = 0; byte LED_cur_pos = 0; byte udo_tim = 0; byte bt; //***************************************************************************************** //***************************************************************************************** void loop() { currentTime = millis(); key = getPressedButton(); if((currentTime >= (loopTime + 250))||(key != prev_key)){ // проверяем каждые 5мс (20 Гц) if((prev_key != key)&&(key != 0)){ idle_key = 0; }else{ idle_key++; } prev_key = key; if (key == 0) // Измереяем температуру только в состоянии простоя { if(temp_cicle == 0){ temp.reset(); temp.select(temp_addr); temp.write(0x44, 1); // start conversion, with parasite power on at the end } if(temp_cicle == 4){ cur_temp = getTemp(); // Управление нагревом и охлаждением ---------------------------------------------- if(cur_temp < (float)aquaT){ digitalWrite(EXT_HEATER_PIN, HIGH); // включает нагреватель }else digitalWrite(EXT_HEATER_PIN, LOW); // выключает нагреватель if (CoolingEnabled) { if(cur_temp > ((float)aquaT+0.1)){ // Разрешено ли охлаждение куллером int coll_cur = minCool+(((float)(maxCool - minCool))/100)*(((float)(cur_temp-aquaT))/0.5)*100; if (coll_cur > maxCool) { coll_cur = maxCool;} analogWrite(EXT_COOLING_PIN, coll_cur); // включает куллер }else{ analogWrite(EXT_COOLING_PIN, minCool); // включаем режим проветривания } }else{ if (air||light1){ // if (air||light1||light2){ analogWrite(EXT_COOLING_PIN, minCool); // включаем режим проветривания }else{ digitalWrite(EXT_COOLING_PIN, LOW); // выключает куллер } } } if(temp_cicle > 51){ temp_cicle = 0; }else{ temp_cicle++; } } // -------------------------------------------------------------------------------- if(secc > 4){ secc = 0; }else{ secc++; } // Get data from the DS1307 time = rtc.getTime(); // коррекция хода системных часов [Сек] if (time.min == 0){ new_hour = true; } if ((time.min == 30)&&(new_hour)){ int corr_sec = time.sec + CorrTime; // коррекция хода системных часов [Сек] byte corr_min = time.min; if (corr_sec < 0){ corr_sec = corr_sec + 60; corr_min--; } if (corr_sec > 59){ corr_sec = corr_sec - 60; corr_min++; } rtc.setTime(time.hour, corr_min, corr_sec); // Set the time to 12:00:00 (24hr format) new_hour = false; } //----- // Новая минута ---------------------------------------------- if(prMin != time.min){ prMin = time.min; // Время для кормления мин if(kormMin > 0){ digitalWrite(EXT_FILTER_PIN, LOW); // выключает Фильтр kormMin--; }else{ digitalWrite(EXT_FILTER_PIN, HIGH); // включает Фильтр } // Восход / Закат if (LED_sunrise > 0){ byte led_val = (LED_sunrise&B01111111); byte led_tmp = 0; if (LED_cur_pos > led_val){ led_tmp = 255; LED_sunrise = 0; }else{ led_tmp = LED_cur_pos*255/led_val; } if(LED_sunrise&B10000000){ // Восход }else{ // Закат led_tmp = 255 - led_tmp; } // Управляем блоком питания if (led_tmp == 0){ digitalWrite(EXT_POWER_ON_PIN, LOW); }else{ digitalWrite(EXT_POWER_ON_PIN, HIGH); } analogWrite(EXT_LIGHT_LED_PIN, led_tmp); // LED LED_cur_pos++; } //-------ALARM------------------------------------------------------------------------- for(int a = 100; a < 1001; a = a + 4){ byte b1 = EEPROM.read(a); // if(((boolean)(b1&B10000000))&((boolean)(_BV(time.dow-1)&b1))){ // активная запись и день недели if(b1&B10000000){ if((1<<(time.dow-1))&b1){ // активная запись и день недели byte b2 = EEPROM.read(a+1); if(time.hour == (byte)(b2&B00011111)){ // сравниваем часы byte b3 = EEPROM.read(a+2); if(time.min == (byte)(b3&B00111111)){ // сравниваем минути byte b4 = EEPROM.read(a+3); switch((byte)((b2>>5)&B00000111)){ // определяем нагрузку case 0: // Разрешено ли охлаждение куллером if (b4&B00000001){ CoolingEnabled = true; analogWrite(EXT_COOLING_PIN, minCool); // включаем режим проветривания }else{ CoolingEnabled = false; digitalWrite(EXT_COOLING_PIN, LOW); } break; case 1: // Light1 if (b4&B00000001){ digitalWrite(EXT_LIGHT_1_PIN, HIGH); light1 = true; }else{ digitalWrite(EXT_LIGHT_1_PIN, LOW); light1 = false; } break; case 2: // Light2 if (b4&B00000001){ digitalWrite(EXT_LIGHT_2_PIN, HIGH); light2 = true; }else{ digitalWrite(EXT_LIGHT_2_PIN, LOW); light2 = false; } break; case 3: // Air if (b4&B00000001){ digitalWrite(EXT_AIR_PIN, HIGH); air = true; }else{ digitalWrite(EXT_AIR_PIN, LOW); air = false; } break; case 4: // CO2 if (b4&B00000001){ digitalWrite(EXT_CO2_PIN, HIGH); CO2 = true; }else{ digitalWrite(EXT_CO2_PIN, LOW); CO2 = false; } break; case 5: //LED // 8 бит 1 восход 0 закат остальные кол мин LED_sunrise = b4; LED_cur_pos = 0; break; // case 6: // UDO // udo_tim = (byte)(b4&B00111111); // digitalWrite(EXT_POWER_ON_PIN, HIGH); // delay(100); //Время на выход в режим БП // switch((byte)((b4>>6)&B00000011)){ // case 0: // digitalWrite(EXT_UDO_MICRO_PIN, HIGH); // delay(udo_tim*4.2); // digitalWrite(EXT_UDO_MICRO_PIN, LOW); // break; // case 1: // digitalWrite(EXT_UDO_MACRO_PIN, HIGH); // delay(udo_tim*4.2); // digitalWrite(EXT_UDO_MACRO_PIN, LOW); // break; // case 2: // digitalWrite(EXT_UDO_Fe_PIN, HIGH); // delay(udo_tim*4.2); // digitalWrite(EXT_UDO_Fe_PIN, LOW); // break; // case 3: // // break; // } // digitalWrite(EXT_POWER_ON_PIN, LOW); // break; case 7: break; } } } } } } } //------------------------------------------------------------------------------------ if((idle_key > max_idle_key)&&(cur_menu != 0)){ cur_menu = 0; cur_item = 0; cur_item_edit = false; } switch(cur_menu){ case 0: // Time { analogWrite(LED_LIGHT_PIN,DispLight_min); myGLCD.setFont(BigNumbers); myGLCD.clrScr(); myGLCD.printNumI(time.hour,7,2,2,'0'); myGLCD.drawCircle(42,9,3); myGLCD.drawCircle(42,19,3); if(secc < 2){ myGLCD.drawCircle(42,9,2); myGLCD.drawCircle(42,19,2); myGLCD.drawRect(41,8,43,10); myGLCD.drawRect(41,18,43,20); myGLCD.setPixel(42,9); myGLCD.setPixel(42,19); } myGLCD.printNumI(time.min,49,2,2,'0'); myGLCD.setFont(SmallFont); if(cur_temp < 1){ myGLCD.print("T: Error",3,38); }else{ myGLCD.print("T:",3,38); myGLCD.printNumF(cur_temp,2,15,38); } myGLCD.update(); if(key > 0) cur_menu = 1; cur_item = 0; cur_item_edit = false; // Включаем подсветку LED // analogWrite(LED_LIGHT_PIN,ledLight); break; } case 1: // Main ----------------------------------------------------------------- { analogWrite(LED_LIGHT_PIN,ledLight); String ll; if(light1||light2){ ll = "On"; }else ll ="Off"; String aa; if(air){ aa = "On"; }else aa ="Off"; if(cur_item_edit&&(cur_item == 1)) ll = "["+ll+"]"; if(cur_item_edit&&(cur_item == 2)) aa = "["+aa+"]"; String lk = ""; if(kormMin > 0){ lk = " ("+(String)kormMin+")"; } drawMenu("Main","Light "+ll,"Air "+aa,"Kormlenie"+lk,"Settings"); naviKey(4); switch(key){ case BUTTON_OK: switch(cur_item){ case 1: light1 = !light1; light2 = light1; if(light1){ digitalWrite(EXT_LIGHT_1_PIN, HIGH); // включает LED }else digitalWrite(EXT_LIGHT_1_PIN, LOW); // выключает LED if(light2){ digitalWrite(EXT_LIGHT_2_PIN, HIGH); // включает lightTUBE }else digitalWrite(EXT_LIGHT_2_PIN, LOW); // выключает lightTUBE break; case 2: air = !air; if(air){ digitalWrite(EXT_AIR_PIN, HIGH); // включает }else digitalWrite(EXT_AIR_PIN, LOW); // выключает break; case 3: kormMin = 20; digitalWrite(EXT_FILTER_PIN, LOW); // выключает Фильтр break; case 4: cur_menu = 13; cur_item = 0; break; } break; case BUTTON_CANCEL: cur_item_edit = false; cur_menu = 0; cur_item = 0; break; } break; } case 13: // Settings ----------------------------------------------------------------- { drawMenu("Settings", "System","Termostat","Tasker","Tasker"); naviKey(4); switch(key){ case BUTTON_OK: switch(cur_item){ case 1: cur_menu = 131; cur_item = 0; break; case 2: cur_menu = 132; cur_item = 0; break; case 3: cur_menu = 130; cur_item = 1; break; case 4: cur_menu = 130; // 134 UDO cur_item = 0; break; } break; case BUTTON_CANCEL: cur_menu = 1; cur_item = 3; break; } break; } // case 134: // UDO ----------------------------------------------------------------- // { String uu; // if (CO2){ // uu = "On"; // }else{ // uu = "Off"; // } // drawMenu("UDO", "CO2", "UDO","CO2 "+uu,""); // naviKey(3); // switch(key){ // case BUTTON_OK: // switch(cur_item){ // case 1: // cur_menu = 133; // cur_item = 1; // menu_off = 1; // menu_item_count = 25; // curLoad = 4; // break; // case 2: // cur_menu = 133; // cur_item = 1; // menu_off = 1; // menu_item_count = 25; // curLoad = 6; // break; // case 3: // CO2 = !CO2; // if (CO2){ // digitalWrite(EXT_CO2_PIN, HIGH); // }else{ // digitalWrite(EXT_CO2_PIN, LOW); // } // break; // case 4: //// cur_menu = 130; //// cur_item = 1; // break; // } // break; // case BUTTON_CANCEL: // cur_menu = 13; // cur_item = 4; // break; // } // break; // } case 130: // Tasker ----------------------------------------------------------------- { drawMenu("Tasker","Light 1","Light 2","LED","Air"); naviKey(4); switch(key){ case BUTTON_OK: switch(cur_item){ case 1: cur_menu = 133; cur_item = 1; menu_off = 1; menu_item_count = 25; curLoad = 1; break; case 2: cur_menu = 133; cur_item = 1; menu_off = 1; menu_item_count = 25; curLoad = 2; break; case 3: cur_menu = 133; cur_item = 1; menu_off = 1; menu_item_count = 25; curLoad = 5; break; case 4: cur_menu = 133; cur_item = 1; menu_off = 1; menu_item_count = 25; curLoad = 3; break; } break; case BUTTON_CANCEL: cur_menu = 13; cur_item = 3; break; } break; } case 133: // Tasker Menu List ----------------------------------------------------------------- { myGLCD.setFont(SmallFont); myGLCD.clrScr(); int offf; switch(curLoad){ case 0: myGLCD.print("CoolTime",1,0); offf = 400; break; case 1: myGLCD.print("Light 1",1,0); offf = 100; break; case 2: myGLCD.print("Light 2",1,0); offf = 200; break; case 3: myGLCD.print("Air",1,0); offf = 300; break; case 4: myGLCD.print("CO2",1,0); offf = 500; break; case 5: myGLCD.print("LED",1,0); offf = 600; break; case 6: myGLCD.print("UDO",1,0); offf = 700; break; } myGLCD.print(rtc.getTimeStr(FORMAT_SHORT),RIGHT,0); myGLCD.drawLine(0,8,83,8); myGLCD.drawLine(0,9,83,9); String tt; byte vy; for(byte j = menu_off; j <= min(menu_off+3,menu_item_count); j++){ vy = 3+9*(j-menu_off+1); alertAdr = offf+(j-1)*4; bt = EEPROM.read(alertAdr+1)&B00011111; tt = (String)(j) + " "; if(bt < 10){ tt = tt + "0"; } tt = tt + (String)bt + ":"; bt = EEPROM.read(alertAdr+2)&B00111111; if(bt < 10){ tt = tt + "0"; } tt = tt + (String)bt + " "; byte bt = EEPROM.read(alertAdr+3); switch(curLoad){ case 5: // "TimerLED" if (bt&B10000000){ tt = tt + "On"; }else{ tt = tt + "Off"; } break; case 6: // "TimerUDO" switch((byte)((bt>>6)&B00000011)){ case 0: // Micro tt = tt + "Micro"; break; case 1: // Macro tt = tt + "Macro"; break; case 2: // Fe+ tt = tt + "Fe+"; break; case 3: // Ka tt = tt + "Ka"; break; } break; default: if(bt > 0){ tt = tt + "On"; }else{ tt = tt + "Off"; } break; } // tt = "Time "+(String)(j); // if(EEPROM.read(offf+(j-1)*4)&B10000000){ // tt = tt+" Active"; // } if(cur_item == j){ myGLCD.print(tt,3,vy); myGLCD.drawRoundRect(0,vy-1,83,vy+8); }else myGLCD.print(tt,0,vy); // перечеркиваем не активные таймера if(!(EEPROM.read(offf+(j-1)*4)&B10000000)){ myGLCD.drawLine(0,vy+5,83,vy+5); } } switch(key){ case BUTTON_UP: if(cur_item == 1){ cur_item = menu_item_count; menu_off = menu_item_count - 3; }else{ cur_item--; if(cur_item < menu_off){ menu_off = cur_item; } } break; case BUTTON_DOWN: if(cur_item == menu_item_count){ cur_item = 1; menu_off = 1; }else{ cur_item++; if(cur_item > menu_off+3){ menu_off = cur_item-3; } } break; case BUTTON_OK: alertAdr = offf+(cur_item-1)*4; cur_menu = 1330; cur_item = 1; cur_item_edit = false; break; case BUTTON_CANCEL: switch(curLoad){ case 0: //"CoolTime" cur_menu = 132; cur_item = 2; break; case 1: //"Light1", cur_menu = 130; cur_item = 1; break; case 2: //"Light2" cur_menu = 130; cur_item = 2; break; case 3: //"Air" cur_menu = 130; cur_item = 4; break; case 4: //"CO2" cur_menu = 134; cur_item = 1; break; case 5: //"LED" cur_menu = 130; cur_item = 3; break; case 6: //"UDO" cur_menu = 134; cur_item = 2; break; } cur_item_edit = false; break; } myGLCD.update(); break; } case 1330: // Tasker Menu ----------------------------------------------------------------- { myGLCD.setFont(SmallFont); myGLCD.clrScr(); switch(curLoad){ case 0: myGLCD.print("CoolTime",1,0); break; case 1: myGLCD.print("Light1",1,0); break; case 2: myGLCD.print("Light2",1,0); break; case 3: myGLCD.print("Air",1,0); break; case 4: myGLCD.print("CO2",1,0); break; case 5: myGLCD.print("LED",1,0); break; case 6: myGLCD.print("UDO",1,0); break; } myGLCD.print(rtc.getTimeStr(FORMAT_SHORT),RIGHT,0); myGLCD.drawLine(0,8,83,8); myGLCD.drawLine(0,9,83,9); byte b1 = EEPROM.read(alertAdr); bt = b1; myGLCD.print("MoTuWeThFrSaSu",0,11); for(int j = 1; j < 8; j++){ // if((cur_item == j)&cur_item_edit){ if(cur_item == j){ myGLCD.drawRect(j*12-10,20,j*12-2,28); } myGLCD.drawCircle(j*12-6,24,3); if(bt&B00000001){ myGLCD.drawCircle(j*12-6,24,2); myGLCD.drawCircle(j*12-6,24,1); } bt = bt >> 1; } String stat = ""; if(cur_item == 8){ stat = stat + "["; } if(EEPROM.read(alertAdr)&B10000000){ stat = stat + "Act"; }else stat = stat + "Pas"; if(cur_item == 8){ stat = stat + "]"; } stat = stat + "."; if(cur_item == 9){ stat = stat + "["; } byte tmpb = EEPROM.read(alertAdr+3); switch(curLoad){ case 5: // "TimerLED" if (tmpb&B10000000){ stat = stat + "On"; }else{ stat = stat + "Off"; } stat = stat + " " + (tmpb&B01111111)+"min"; break; case 6: // "TimerUDO" switch((byte)((tmpb>>6)&B00000011)){ case 0: // Micro stat = stat + "Micro"; break; case 1: // Macro stat = stat + "Macro"; break; case 2: // Fe+ stat = stat + "Fe+"; break; case 3: // Ka stat = stat + "Ka"; break; } stat = stat + (tmpb&B00111111)+"mil"; break; default: if(tmpb > 0){ stat = stat + "On"; }else{ stat = stat + "Off"; } break; } if(cur_item == 9){ stat = stat + "]"; } myGLCD.print(stat,0,29); stat = "Time: "; if(cur_item == 10){ stat = stat + "["; } bt = EEPROM.read(alertAdr+1)&B00011111; if(bt < 10){ stat = stat + "0"; } stat = stat + (String)bt; if(cur_item == 10){ stat = stat + "]"; } stat = stat + ":"; if(cur_item == 11){ stat = stat + "["; } bt = EEPROM.read(alertAdr+2)&B00111111; if(bt < 10){ stat = stat + "0"; } stat = stat + (String)bt; if(cur_item == 11){ stat = stat + "]"; } myGLCD.print(stat,0,39); switch(key){ case BUTTON_UP: if(cur_item_edit){ if((cur_item == 9)&&(curLoad > 4)){ bt = EEPROM.read(alertAdr+3); //if(bt == 255){ // bt = 0; //}else bt++; EEPROM.write(alertAdr+3,bt); } if(cur_item == 10){ bt = (EEPROM.read(alertAdr+1)&B00011111); if(bt == 23){ bt = 0; }else bt++; EEPROM.write(alertAdr+1,bt^(curLoad<<5)); } if(cur_item == 11){ bt = EEPROM.read(alertAdr+2)&B00111111; if(bt == 59){ bt = 0; }else bt++; EEPROM.write(alertAdr+2,bt); } }else if(cur_item == 1){ cur_item = 11; }else cur_item--; break; case BUTTON_DOWN: if(cur_item_edit){ if((cur_item == 9)&&(curLoad > 4)){ bt = EEPROM.read(alertAdr+3); //if(bt == 0){ // bt = 255; //}else bt--; EEPROM.write(alertAdr+3,bt); } if(cur_item == 10){ bt = EEPROM.read(alertAdr+1)&B00011111; if(bt == 0){ bt = 23; }else bt--; EEPROM.write(alertAdr+1,bt^(curLoad<<5)); } if(cur_item == 11){ bt = EEPROM.read(alertAdr+2)&B00111111; if(bt == 0){ bt = 59; }else bt--; EEPROM.write(alertAdr+2,bt); } }else if(cur_item == 11){ cur_item = 1; }else cur_item++; break; case BUTTON_OK: EEPROM.write(alertAdr+1,((EEPROM.read(alertAdr+1)&B00011111)^(curLoad<<5))); // сохраняем номер нагрузки switch(cur_item){ case 8: EEPROM.write(alertAdr,(EEPROM.read(alertAdr)^B10000000)); break; case 9: if(curLoad < 5){ //EEPROM.write(alertAdr+3,(EEPROM.read(alertAdr+3)^B00000001)); EEPROM.write(alertAdr+3,((EEPROM.read(alertAdr+3)&B00000001)^B00000001)); }else{ cur_item_edit = !cur_item_edit; } break; case 10: cur_item_edit = !cur_item_edit; break; case 11: cur_item_edit = !cur_item_edit; break; default: EEPROM.write(alertAdr,(EEPROM.read(alertAdr)^(1<<(cur_item-1)))); break; } break; case BUTTON_CANCEL: switch(curLoad){ case 0: //CoolTime cur_menu = 132; cur_item = 2; break; case 1: //"Light1", cur_menu = 130; cur_item = 1; break; case 2: //"Light2" cur_menu = 130; cur_item = 2; break; case 3: //"Air" cur_menu = 130; cur_item = 4; break; case 4: //"CO2" cur_menu = 134; cur_item = 1; break; case 5: //"LED" cur_menu = 130; cur_item = 3; break; case 6: //"UDO" cur_menu = 134; cur_item = 2; break; } cur_item_edit = false; break; } myGLCD.update(); break; } case 132: // Termostat ----------------------------------------------------------------- { drawMenu("Termostat", "Aqua T ["+(String)aquaT+"]","CoolTime","minCool","maxCool"); naviKey(4); switch(key){ case BUTTON_OK: switch(cur_item){ case 1: cur_menu = 1321; cur_item = 0; break; case 2: //CoolTime cur_menu = 133; cur_item = 1; menu_off = 1; menu_item_count = 8; curLoad = 0; break; case 3: //minCool // минимальные обороты кулера для вентиляции крышки и охлаждения ламп cur_menu = 1323; break; case 4: //maxCool // максимальные обороты для охлаждения воды cur_menu = 1324; break; } break; case BUTTON_CANCEL: cur_menu = 13; cur_item = 2; cur_item_edit = false; break; } break; } case 1321: // Aqua Temperature ----------------------------------------------------------------- { drawIntMenu("Aqua Temperat",18,35,aquaT); switch(key){ case BUTTON_UP: aquaT++; aquaT = min(aquaT, 35); break; case BUTTON_DOWN: aquaT--; aquaT = max(aquaT, 18); break; case BUTTON_OK: EEPROM.write(2,aquaT); // Требуемая температура воды cur_menu = 132; cur_item = 1; break; case BUTTON_CANCEL: aquaT = EEPROM.read(2); // Требуемая температура воды cur_menu = 132; cur_item = 1; break; } break; } case 1323: // minCool // минимальные обороты кулера для вентиляции крышки и охлаждения ламп ------------------------------------------ { drawIntMenu("minCool",0,maxCool,minCool); switch(key){ case BUTTON_UP: minCool++; minCool = min(minCool, maxCool); analogWrite(EXT_COOLING_PIN, minCool); break; case BUTTON_DOWN: minCool--; minCool = max(minCool, 0); analogWrite(EXT_COOLING_PIN, minCool); break; case BUTTON_OK: EEPROM.write(3,minCool); // минимальные обороты кулера для вентиляции крышки и охлаждения ламп cur_menu = 132; cur_item = 3; break; case BUTTON_CANCEL: minCool = EEPROM.read(3); // минимальные обороты кулера для вентиляции крышки и охлаждения ламп cur_menu = 132; cur_item = 3; break; } break; } case 1324: // maxCool // максимальные обороты для охлаждения воды ------------------------------------------ { drawIntMenu("maxCool",0,255,maxCool); switch(key){ case BUTTON_UP: maxCool++; maxCool = min(maxCool, 255); analogWrite(EXT_COOLING_PIN, maxCool); break; case BUTTON_DOWN: maxCool--; maxCool = max(maxCool, minCool); analogWrite(EXT_COOLING_PIN, maxCool); break; case BUTTON_OK: EEPROM.write(4,maxCool); // максимальные обороты для охлаждения воды cur_menu = 132; cur_item = 4; break; case BUTTON_CANCEL: maxCool = EEPROM.read(4); // максимальные обороты для охлаждения воды cur_menu = 132; cur_item = 4; break; } break; } case 131: // System ----------------------------------------------------------------- { drawMenu("System", "Time","Date","LED Contrast","LED Light"); naviKey(4); switch(key){ case BUTTON_OK: switch(cur_item){ case 1: cur_menu = 1311; cur_item = 0; menu_hh = time.hour; menu_mi = time.min; break; case 2: cur_menu = 1312; cur_item = 0; menu_dd = time.date; menu_mm = time.mon; menu_yyyy = time.year; menu_dow = time.dow; break; case 3: cur_menu = 1313; cur_item = 0; break; case 4: cur_menu = 1314; cur_item = 0; break; } break; case BUTTON_CANCEL: cur_menu = 0; cur_item = 0; break; } break; } case 1311: // Time ----------------------------------------------------------------- { myGLCD.setFont(SmallFont); myGLCD.clrScr(); myGLCD.print("Time",1,0); myGLCD.print(rtc.getTimeStr(FORMAT_SHORT),RIGHT,0); myGLCD.drawLine(0,8,83,8); myGLCD.drawLine(0,9,83,9); if((cur_item == 1)&&cur_item_edit) myGLCD.invertText(true); myGLCD.printNumI(menu_hh,26,20,2,'0'); myGLCD.invertText(false); myGLCD.print(":",39,20); if((cur_item == 2)&&cur_item_edit) myGLCD.invertText(true); myGLCD.printNumI(menu_mi,46,20,2,'0'); myGLCD.invertText(false); if(cur_item == 1) myGLCD.drawRoundRect(25,18,39,28); if(cur_item == 2) myGLCD.drawRoundRect(45,18,59,28); switch(key){ case BUTTON_UP: if(!cur_item_edit){ cur_item--; if(cur_item < 1) cur_item = 2; }else{ if(cur_item == 1){ menu_hh++; if(menu_hh == 24) menu_hh = 0; } if(cur_item == 2){ menu_mi++; if(menu_mi == 60) menu_mi = 0; } } break; case BUTTON_DOWN: if(!cur_item_edit){ cur_item++; if(cur_item > 2) cur_item = 1; }else{ if(cur_item == 1){ if(menu_hh == 0) menu_hh = 23; else menu_hh--; } if(cur_item == 2){ if(menu_mi == 0) menu_mi = 59; else menu_mi--; } } break; case BUTTON_OK: if(cur_item_edit){ switch(cur_item){ case 1: rtc.setTime(menu_hh, time.min, 0); // Set the time to 12:00:00 (24hr format) break; case 2: rtc.setTime(time.hour, menu_mi, 0); // Set the time to 12:00:00 (24hr format) break; } cur_item_edit = false; }else cur_item_edit = true; break; case BUTTON_CANCEL: cur_item_edit = false; cur_menu = 131; cur_item = 1; break; } myGLCD.update(); break; } case 1312: // Date ----------------------------------------------------------------- { myGLCD.setFont(SmallFont); myGLCD.clrScr(); myGLCD.print("Date",1,0); myGLCD.print(rtc.getTimeStr(FORMAT_SHORT),RIGHT,0); myGLCD.drawLine(0,8,83,8); myGLCD.drawLine(0,9,83,9); if((cur_item == 1)&&cur_item_edit) myGLCD.invertText(true); myGLCD.printNumI(menu_dd,12,20,2,'0'); myGLCD.invertText(false); myGLCD.print(".",24,20); if((cur_item == 2)&&cur_item_edit) myGLCD.invertText(true); myGLCD.printNumI(menu_mm,30,20,2,'0'); myGLCD.invertText(false); myGLCD.print(".",42,20); if((cur_item == 3)&&cur_item_edit) myGLCD.invertText(true); myGLCD.printNumI(menu_yyyy,48,20,4,'0'); myGLCD.invertText(false); myGLCD.print("Day of week",0,32); if((cur_item == 4)&&cur_item_edit) myGLCD.invertText(true); myGLCD.printNumI(menu_dow,68,32); myGLCD.invertText(false); switch(cur_item){ case 1: myGLCD.drawRoundRect(11,18,25,28); break; case 2: myGLCD.drawRoundRect(29,18,44,28); break; case 3: myGLCD.drawRoundRect(47,18,73,28); break; case 4: myGLCD.drawRoundRect(67,30,75,40); break; } switch(key){ case BUTTON_UP: if(!cur_item_edit){ cur_item--; if(cur_item < 1) cur_item = 4; }else{ if(cur_item == 1){ menu_dd++; if(menu_dd > 31) menu_dd = 1; } if(cur_item == 2){ menu_mm++; if(menu_mm > 12) menu_mm = 1; } if(cur_item == 3){ menu_yyyy++; } if(cur_item == 4){ menu_dow++; if(menu_dow > 7) menu_dow = 1; } } break; case BUTTON_DOWN: if(!cur_item_edit){ cur_item++; if(cur_item > 4) cur_item = 1; }else{ if(cur_item == 1){ menu_dd--; if(menu_dd < 1) menu_dd = 31; } if(cur_item == 2){ menu_mm--; if(menu_mm < 1) menu_mm = 12; } if(cur_item == 3){ menu_yyyy--; menu_yyyy = max(menu_yyyy,2013); } if(cur_item == 4){ menu_dow--; if(menu_dow < 1) menu_dow = 7; } } break; case BUTTON_OK: if(cur_item_edit){ switch(cur_item){ case 1: rtc.setDate(menu_dd, time.mon, time.year); // Set the date break; case 2: rtc.setDate(time.date, menu_mm, time.year); // Set the date break; case 3: rtc.setDate(time.date, time.mon, menu_yyyy); // Set the date break; case 4: rtc.setDOW(menu_dow); // Set Day-of-Week break; } cur_item_edit = false; }else cur_item_edit = true; break; case BUTTON_CANCEL: cur_item_edit = false; cur_menu = 131; cur_item = 2; break; } myGLCD.update(); break; } case 1313: // LED Contrast ----------------------------------------------------------------- { drawIntMenu("LED Contrast",45,80,ledContrast); switch(key){ case BUTTON_UP: ledContrast++; ledContrast = min(ledContrast, 80); break; case BUTTON_DOWN: ledContrast--; ledContrast = max(ledContrast, 45); break; case BUTTON_OK: EEPROM.write(0,ledContrast); cur_menu = 131; cur_item = 3; break; case BUTTON_CANCEL: ledContrast = EEPROM.read(0); cur_menu = 131; cur_item = 3; break; } myGLCD.setContrast(ledContrast); break; } case 1314: // LED Light ----------------------------------------------------------------- { drawIntMenu("LED Light",0,255,ledLight); switch(key){ case BUTTON_UP: ledLight++; ledLight = min(ledLight, 255); break; case BUTTON_DOWN: ledLight--; ledLight = max(ledLight, 0); break; case BUTTON_OK: EEPROM.write(1,ledLight); cur_menu = 131; cur_item = 4; break; case BUTTON_CANCEL: ledLight = EEPROM.read(1); cur_menu = 131; cur_item = 4; break; } analogWrite(LED_LIGHT_PIN,ledLight); break; } default: cur_menu = 0; cur_item = 0; } loopTime = currentTime; } }

    Одна из самых неприятных ошибок — это ошибка компиляции для платы Аrduino Nano, с которой вам придется столкнуться не раз.

    Содержание

    • Синтаксические ошибки
    • Ошибки компиляции плат Arduino uno
    • Ошибка exit status 1 при компиляции для плат uno, mega и nano
    • Ошибки библиотек
    • Ошибки компилятора Ардуино
    • Основные ошибки
      • Ошибка: «avrdude: stk500_recv(): programmer is not responding»
      • Ошибка: «a function-definition is not allowed here before ‘{‘ token»
      • Ошибка: «No such file or directory  /  exit status 1»
      • Ошибка: «expected initializer before ‘}’ token  /  expected ‘;’ before ‘}’ token»
      • Ошибка: «… was not declared in this scope»

    Синтаксические ошибки

    Ардуино – одна из наиболее комфортных сред для начинающих инженеров, в особенности программистов, ведь им не приходится проектировать свои системы управления и делать множество других действий.

    Сразу же при покупке они получают готовый набор библиотек на С99 и возможность, по необходимости, подтянуть необходимые модули в опен-соурс источниках.

    Но и здесь не избежать множества проблем, с которыми знаком каждый программист, и одна из самых неприятных – ошибка компиляции для платы Аrduino nano, с которой вам придется столкнуться не раз. Что же эта строчка означает, какие у неё причины появления, и главное – как быстро решить данную проблему?

    Для начала стоит немного окунуться в теорию, чтобы вы понимали причину возникновения данной строчки с текстом и не грешили лишний раз, что Ардуино уно не видит компьютер.

    Как несложно догадаться, компиляция – приведение кода на языке Си к виду машинного (двоичного) и преобразование множественных функций в простые операции, чтобы те смогли выполняться через встроенные операнды процессора. Выглядит всё достаточно просто, но сам процесс компиляции происходит значительно сложнее, и поэтому ошибка во время проведения оной может возникать по десяткам причин.

    Все мы уже привыкли к тому, что код никогда не запускается с первого раза, и при попытке запустить его в интерпретаторе вылезает десяток ошибок, которые приходится оперативно править. Компилятор действует схожим образом, за исключением того, что причины ошибок указываются далеко не всегда. Именно поэтому рекомендуется протестировать код сначала в среде разработки, и лишь затем уже приступать к его компиляции в исполняемые файлы под Ардуино.

    Мы узнали, к чему приводит данный процесс, давайте разберёмся, как он происходит:

    1. Первое, что делает компилятор – подгружает все инклуднутые файлы, а также меняет объявленные дефайны на значения, которое для них указано. Это необходимо затем, чтобы не нужно было по нескольку раз проходиться синтаксическим парсером в пределах одного кода. Также, в зависимости от среды, компилятор может подставлять функции на место их объявления или делать это уже после прохода синтаксическим парсером. В случае с С99, используется второй вариант реализации, но это и не столь важно.
    2. Далее он проверяет первичный синтаксис. Этот процесс проводится в изначальном компилируемом файле, и своеобразный парсер ищет, были ли описаны приведенные функции ранее, подключены ли необходимые библиотеки и прочее. Также проверяется правильность приведения типов данных к определенным значениям. Не стоит забывать, что в С99 используется строгая явная типизация, и вы не можете засунуть в строку, объявленную integer, какие-то буквенные значения. Если такое замечается, сразу вылетает ошибка.
    3. В зависимости от среды разработки, иногда предоставляется возможность последний раз протестировать код, который сейчас будет компилироваться, с запуском интерпретатора соответственно.
    4. Последним идет стек из различных действий приведения функций, базовых операнд и прочего к двоичному коду, что может занять какое-то время. Также вся структура файлов переносится в исполняемые exe-шники, а затем происходит завершение компиляции.

    Как можно увидеть, процесс не так прост, как его рисуют, и на любом этапе может возникнуть какая-то ошибка, которая приведет к остановке компиляции. Проблема в том, что, в отличие от первых трех этапов, баги на последнем – зачастую неявные, но всё ещё не связанные с алгоритмом и логикой программы. Соответственно, их исправление и зачистка занимают значительно больше времени.

    А вот синтаксические ошибки – самая частая причина, почему на exit status 1 происходит ошибка компиляции для платы Аrduino nano. Зачастую процесс дебагинга в этом случае предельно простой.

    Вам высвечивают ошибку и строчку, а также подсказку от оператора EXCEPTION, что конкретно не понравилось парсеру. Будь то запятая или не закрытые скобки функции, проблема загрузки в плату Аrduino возникнет в любом случае.

    Решение предельно простое и логичное – найти и исправить непонравившийся машине синтаксис. Зачастую такие сообщения вылезают пачками, как на этапе тестирования, так и компилирования, поэтому вы можете таким образом «застопорить» разработку не один раз.

    Не стоит этого страшиться – этот процесс вполне нормален. Все претензии выводятся на английском, например, часто можно увидеть такое: was not declared in this scope. Что это за ошибка arduino – на самом деле ответ уже скрыт в сообщении. Функция или переменная просто не были задекларированы в области видимости.

    Ошибки компиляции плат Arduino uno

    Другая частая оплошность пользователя, которая порождает вопросы вроде, что делать, если Аrduino не видит порт, заключается в том, что вы попросту забываете настроить среду разработки. IDE Ардуино создана под все виды плат, но, как мы указывали, на каждом контроллере помещается лишь ограниченное количество библиотек, и их наполнение может быть различным.

    Соответственно, если в меню среды вы выбрали компиляцию не под тот МК, то вполне вероятно, что вызываемая вами функция или метод просто не будет найдена в постоянной памяти, вернув ошибку. Стандартно, в настройках указана плата Ардуино уно, поэтому не забывайте её менять. И обратная ситуация может стать причиной, по которой возникает проблема загрузки в плату на Аrduino uno.

    Ошибка exit status 1 при компиляции для плат uno, mega и nano

    И самое частое сообщение, для пользователей уно, которое выскакивает в среде разработки – exit 1. И оно же самое дискомфортное для отладки приложения, ведь тут необходимо учесть чуть ли не ядро системы, чтобы понять, где же кроется злополучный баг.

    В документации указано, что это сообщение указывает на то, что не запускается ide Аrduino в нужной конфигурации, но на деле есть ещё десяток случаев, при которых вы увидите данное сообщение. Однако, действительно, не забывайте проверять разрядность системы, IDE и просматривать, какие библиотеки вам доступны для обращения на текущий момент.

    Ошибки библиотек

    Если произошла ошибка при компиляции скетча Ардуино, но не выводилось ни одно из вышеописанных сообщений, то можете смело искать баг в библиотеках МК. Это наиболее неприятное занятие для большинства программистов, ведь приходится лазить в чужом коде, но без этого никак.

    Ведь банально причина может быть в устаревшем синтаксисе скачанного плагина и, чтобы он заработал, необходимо переписать его практически с нуля. Это единственный выход из сложившейся ситуации. Но бывают и более банальные ситуации, когда вы подключили библиотеку, функции из которой затем ни разу не вызвали, или просто перепутали название.

    Ошибки компилятора Ардуино

    Ранее упоминался финальный стек действий, при прогонке кода через компилятор, и в этот момент могут произойти наиболее страшные ошибки – баги самого IDE. Здесь конкретного решения быть не может. Вам никто не запрещает залезть в ядро системы и проверить там всё самостоятельно, но куда эффективнее будет откатиться до предыдущей версии программы или, наоборот, обновиться.

    Основные ошибки

    Ошибка: «avrdude: stk500_recv(): programmer is not responding»

    Смотрим какая у нас плата? Какой порт используем? Сообщаем ардуино о правильной плате и порте. Возможно, что используете Nano, а указана Mega. Возможно, что указали неверный порт. Всё это приводит к сообщению: «programmer is not responding».

    Решение:

    В Arduino IDE в меню «Сервис» выбираем плату. В меню «Сервис → Последовательный порт» выбираем порт.

    Ошибка: «a function-definition is not allowed here before ‘{‘ token»

    Забыли в коде программы (скетча) закрыть фигурную скобку }.

    Решение:

    Обычно в Ардуино IDE строка с ошибкой подсвечивается.

    Ошибка: «No such file or directory  /  exit status 1»

    Подключаемая библиотека отсутствует в папке libraries.

    Решение:

    Скачать нужную библиотеку и скопировать её в папку программы — как пример — C:Program FilesArduinolibraries. В случае наличия библиотеки — заменить файлы в папке.

    Ошибка: «expected initializer before ‘}’ token  /  expected ‘;’ before ‘}’ token»

    Забыли открыть фигурную скобку {, если видим «initializer before». Ошибка «expected ‘;’ before ‘}’ token» — забыли поставить точку с запятой в конце командной строки.

    Решение:

    Обычно в Ардуино IDE строка с ошибкой подсвечивается.

    Ошибка: «… was not declared in this scope»

    Arduino IDE видит в коде выражения или символы, которые не являются служебными или не были объявлены переменными.

    Решение:

    Проверить код на использование неизвестных выражений или лишних символов.

    17 июля 2018 в 13:23
    | Обновлено 7 ноября 2020 в 01:20 (редакция)
    Опубликовано:

    Статьи, Arduino

    Здравствуйте! Система K-workstation P10.
    Обнаружил проблему, что в среде Arduino перестала происходить проверка/компилляция скетчей. Сам редактор запускается.
    При попытке компилляции простейшего скетча даёт ошибку:

    Ошибка компиляции для платы Arduino Nano.

    Не пойму на каком этапе возникла проблема.
    Arduino устанавливал еще на системе p9 и пользовался в прошлом году — всё работало. В этом году уже достаточно давно — еще до официального сообщения о выходе K-workstation p10 — обновлялся с p9 на p10.

    Сегодня хотел загрузить скетч (простейший — Blink — мерцающий светодиод), попытался проверить работу — даёт ошибку с какой-то простынёй требований.

    Что это может быть?

    Ошибка компиляции для платы Arduino Nano.

    Arduino: 1.8.13 (Linux), Плата:»Arduino Nano, ATmega168″

    Parameter ‘tools’ is mandatory
    Usage of /usr/bin/arduino-builder:
      -build-cache string
           builds of ‘core.a’ are saved into this folder to be cached and reused
      -build-options-file string
           Instead of specifying —hardware, —tools etc every time, you can load all such options from a file
      -build-path string
           build path
      -built-in-libraries value
           Specify a built-in ‘libraries’ folder. These are low priority libraries. Can be added multiple times for specifying multiple built-in ‘libraries’ folders
      -compile
           compiles the given sketch
      -core-api-version string
           version of core APIs (used to populate ARDUINO #define) (default «10600»)
      -debug-level int
           Turns on debugging messages. The higher, the chattier (default 5)
      -dump-prefs
           dumps build properties used when compiling
      -fqbn string
           fully qualified board name
      -hardware value
           Specify a ‘hardware’ folder. Can be added multiple times for specifying multiple ‘hardware’ folders
      -ide-version string
           [deprecated] use ‘core-api-version’ instead (default «10600»)
      -libraries value
           Specify a ‘libraries’ folder. Can be added multiple times for specifying multiple ‘libraries’ folders
      -logger string
           Sets type of logger. Available values are ‘human’, ‘machine’ (default «human»)
      -prefs value
           Specify a custom preference. Can be added multiple times for specifying multiple custom preferences
      -preprocess
           preprocess the given sketch
      -quiet
           if ‘true’ doesn’t print any warnings or progress or whatever
      -tools value
           Specify a ‘tools’ folder. Can be added multiple times for specifying multiple ‘tools’ folders
      -verbose
           if ‘true’ prints lots of stuff
      -version
           prints version and exits
      -vid-pid string
           specify to use vid/pid specific build properties, as defined in boards.txt
      -warnings string
           Sets warnings level. Available values are ‘none’, ‘default’, ‘more’ and ‘all’


    Записан


    Parameter ‘tools’ is mandatory
    Usage of /usr/bin/arduino-builder:

    Среда разработки при сборке проекта запускает утилиту arduino-builder. Должен передаваться параметр -tools, но его нет.
    Вот тут https://forum.arduino.cc/t/new-user-w-linux-error-compiling-for-board-arduino-uno/692468/2 аналогичная проблема с той же версией Arduino 1.8.13 в ОС Fedora.

    Решили, насколько я понял, обновлением Явы в системе и переименовыванием каталога java в директории Ардуины. «Installing the latest java with sudo dnf install java-latest-openjdk (and setting it as default with sudo alternatives —config java), in addition to renaming the java folder inside the arduino directory solves the issue for now».

    У меня сейчас нет возможности проверить рецепт в P10.
    Как вариант, скачать пакет другой версии
    https://downloads.arduino.cc/arduino-1.8.19-linux64.tar.xz
    или отсюда https://github.com/arduino/Arduino/releases
    распаковать его в удобное место и запускать редактор оттуда. Там Ява-машина и всё необходимое сразу есть, обычно работает в любой Линукс, если есть права на /dev/ttyACM0.

    « Последнее редактирование: 29.05.2022 08:40:56 от trs »


    Записан


    « Последнее редактирование: 29.05.2022 15:43:59 от Shoemaker »


    Записан


    « Последнее редактирование: 25.12.2022 14:07:35 от ctpanic »


    Записан


    помог и первый, и второй советы

    Спасибо, действительно работает!

    Получается что ошибка https://bugzilla.altlinux.org/42586 может быть исправлена включением пустого каталога /usr/share/arduino/tools-builder в rpm-пакет.


    Записан


    1. От от рута создать каталог: sudo mkdir /usr/share/arduino/tools-builder
    2. От пользователя: mkdir ~/.arduino15/packages

    Помогло и мне в АльОразование 10.1


    Записан


    Arduino-cli — Uploading to Unknown Chinese Arduino Boards using the Arduino Command Line Interface

    In my further exploration of Arduino, today I decided to install the arduino-cli on my mac today.

    Code:

    https://github.com/arduino/arduino-cli

    I followed the instructions for macOS but when I got to this part:

    Code:

    arduino-cli board list

    I got the dreaded «Unknown» Fully Qualified Board Name (FQBN)

    Code:

    macos$ arduino-cli board list
    Port                            Type              Board Name FQBN Core
    /dev/cu.Bluetooth-Incoming-Port Serial Port       Unknown             
    /dev/cu.usbserial-40            Serial Port (USB) Unknown

    Because of this, I got the same related-error when I tried to upload to the Arduino after successfully complying a sketch, per instruction in the link above.

    Then, after an evening run next to the beach, I decided to look at the source code, so I downloaded the source and planned to modify the part of the upload / board code to bypass this error.

    However, after looking at the arduino-cli source code, I thought to myself «My Arduino code uploads fine using the Arduino IDE (the GUI), so there must be a cleaner way to fix this problem with the CLI».

    Then, I ran:

    Code:

    arduino-cli board listall

    … and found there were no entries from the Arduino Uno family of boards, strangely enough. So, I then ran this command:

    Code:

    macos$ arduino-cli core search  uno
    ID              Version Name                  
    arduino:avr     1.8.2   Arduino AVR Boards    
    arduino:megaavr 1.8.5   Arduino megaAVR Boards

    … and lo-and-behold, there are the Arduino boards, which seemed to match the name of my Chinese Arduino UNO with «Unknown» FQBN

    So, now that I found them, and they look like a possibility, I installed them for my «Unknown» FQBN Arduino clone:

    Code:

    arduino-cli core install arduino:avr

    and the mega stuff for fun:

    Code:

    arduino-cli core install arduino:megaavr

    After that, I listed the installed boards to make sure all was cool, and things were looking up (so I assumed):

    Code:

    macos$ arduino-cli board listall
    Board Name                          FQBN                                      
    Adafruit Circuit Playground         arduino:avr:circuitplay32u4cat            
    Adafruit Circuit Playground Express arduino:samd:adafruit_circuitplayground_m0
    Arduino BT                          arduino:avr:bt                            
    Arduino Duemilanove or Diecimila    arduino:avr:diecimila                     
    Arduino Esplora                     arduino:avr:esplora                       
    Arduino Ethernet                    arduino:avr:ethernet                      
    Arduino Fio                         arduino:avr:fio                           
    Arduino Gemma                       arduino:avr:gemma                         
    Arduino Industrial 101              arduino:avr:chiwawa                       
    Arduino Leonardo                    arduino:avr:leonardo                      
    Arduino Leonardo ETH                arduino:avr:leonardoeth                   
    Arduino M0                          arduino:samd:mzero_bl                     
    Arduino M0 Pro (Native USB Port)    arduino:samd:mzero_pro_bl                 
    Arduino M0 Pro (Programming Port)   arduino:samd:mzero_pro_bl_dbg             
    Arduino MKR FOX 1200                arduino:samd:mkrfox1200                   
    Arduino MKR GSM 1400                arduino:samd:mkrgsm1400                   
    Arduino MKR NB 1500                 arduino:samd:mkrnb1500                    
    Arduino MKR Vidor 4000              arduino:samd:mkrvidor4000                 
    Arduino MKR WAN 1300                arduino:samd:mkrwan1300                   
    Arduino MKR WAN 1310                arduino:samd:mkrwan1310                   
    Arduino MKR WiFi 1010               arduino:samd:mkrwifi1010                  
    Arduino MKR1000                     arduino:samd:mkr1000                      
    Arduino MKRZERO                     arduino:samd:mkrzero                      
    Arduino Mega ADK                    arduino:avr:megaADK                       
    Arduino Mega or Mega 2560           arduino:avr:mega                          
    Arduino Micro                       arduino:avr:micro                         
    Arduino Mini                        arduino:avr:mini                          
    Arduino NANO 33 IoT                 arduino:samd:nano_33_iot                  
    Arduino NG or older                 arduino:avr:atmegang                      
    Arduino Nano                        arduino:avr:nano                          
    Arduino Nano Every                  arduino:megaavr:nona4809                  
    Arduino Pro or Pro Mini             arduino:avr:pro                           
    Arduino Robot Control               arduino:avr:robotControl                  
    Arduino Robot Motor                 arduino:avr:robotMotor                    
    Arduino Tian                        arduino:samd:tian                         
    Arduino Tian (MIPS Console port)    arduino:samd:tian_cons                    
    Arduino Uno                         arduino:avr:uno                           
    Arduino Uno WiFi                    arduino:avr:unowifi                       
    Arduino Uno WiFi Rev2               arduino:megaavr:uno2018                   
    Arduino Yún                         arduino:avr:yun                           
    Arduino Yún Mini                    arduino:avr:yunmini                       
    Arduino Zero (Native USB Port)      arduino:samd:arduino_zero_native          
    Arduino Zero (Programming Port)     arduino:samd:arduino_zero_edbg            
    LilyPad Arduino                     arduino:avr:lilypad                       
    LilyPad Arduino USB                 arduino:avr:LilyPadUSB                    
    Linino One                          arduino:avr:one

    So, after realizing I had to recompile, I did:

    Code:

    arduino-cli compile -b arduino:avr:uno ArdUnixTime

    … and that worked OK. so I decided to upload:

    Code:

    arduino-cli upload -p /dev/cu.usbserial-40 --fqbn arduino:avr:uno  ArdUnixTime

    and it worked, the clone accepted the upload.

    Now, I have the arduino-cli working on my mac and can start to use my favorite IDE to develop Arduino sketches if I so choose and maybe can do other magical things with the Arduino now that I have the command line interface working.

    Merry Christmas Arduino CLI Smilie

    unix time synced to the Arduino via uploading using the cli:

    Code:

    https://github.com/arduino/arduino-cli

    Arduino-cli - Uploading to Unknown Chinese Arduino Boards using the Arduino Command Line Interface-img_8726jpg

    Yes, I know I should have changed the LCD on the Ardunio to display a Christmas message, but decided to pass on being too geeky and eat a chicken burger instead Smilie

    Понравилась статья? Поделить с друзьями:
  • Missing endcsname inserted как исправить
  • Missing easyanticheat launcher dlls как исправить watch dogs 2
  • Missing dll nxcharacter dll error 0x7e dragon age origins
  • Missing dll mfplat dll error 0x7e
  • Missing cover xbox 360 как исправить