void setup() и подпрограммы
- Войдите на сайт для отправки комментариев
Ср, 17/09/2014 - 12:01
Добрый день! Я начинающий пользователь arduino, посему прошу не ругать за вопрос. Возможно ли из void setup() вызывать свою подпрограмму? К примеру так:
#include <EEPROM.h>
int mstate;
int addr = 0; // адрес ячейки
int mon = 1; // матрас включен
int moff = 0; // матрас выключен
int mled = 13; // светодиод матраса
int tled = 14; // светодиод передачи
int relay = 7; // Определяем на каком пине находятся реле
void setup()
{
pinMode(mled, OUTPUT);
pinMode(tled, OUTPUT);
pinMode(relay, OUTPUT);
void reststate();
}
void loop()
{
...
}
void reststate()
{
mstate = EEPROM.read(addr);
if (mstate == 1)
{
matresson();
}
else if (mstate == 0)
{
matressoff();
}
}
Пардон. Ошибся:
#include <EEPROM.h> int mstate; int addr = 0; // адрес ячейки int mon = 1; // матрас включен int moff = 0; // матрас выключен int mled = 13; // светодиод матраса int tled = 14; // светодиод передачи int relay = 7; // Определяем на каком пине находятся реле void setup() { pinMode(mled, OUTPUT); pinMode(tled, OUTPUT); pinMode(relay, OUTPUT); reststate(); } void loop() { ... } void reststate() { mstate = EEPROM.read(addr); if (mstate == 1) { matresson(); } else if (mstate == 0) { matressoff(); } }И можно ли в строке pinMode указать несколько пинов (mled, tled, relay)?
У вас какой то неверный подход. Вы попробуйте сперва, а если не получится, тогда и спрашивайте. Или вы думаете что программировать это вдумчиво набратьтекст программы и с первого раза ее откомпилировать? Нет. Отладка, отладка и еще раз отладка.
Моя ардуинка еще едет. Пытаюсь код писать заранее. Простите за вопрос(
Пример кода в ArduinoIDE скомпилился без ошибок.
http://arduino.ru/Reference/Setup
http://arduino.ru/Reference/Loop
Прочитайте про это: setup выполняется один раз, а затеи loop до посинения....
А мне и надо один раз при старте
И можно ли в строке pinMode указать несколько пинов (mled, tled, relay)?
# define mled 13 // светодиод матраса # define tled 14 // светодиод передачи # define relay 7 // Определяем на каком пине находятся реле void setup() { byte pins[] = {mled, tled, 7}; for(byte i = 0; i < sizeof(pins); i++) pinMode(pins[i], OUTPUT); ....можно
компилировать без ардуины никто не запрещал
можно. setup() и loop() - с точки зрения компилятора это обычные функции. Все что можно с обычными - можно с ними. Можно и другие функции вызывать, и переменные объявлять и проч.
Их "особость" только в одном: setup() вызовется один раз, при старте, а loop() - будет до посинения дергаться. Других отличий - нет.
Вообщем, на самом деле, в любом скетче, у вас есть еще одна функция, вы ее не видите, но она есть, вот типа такой:
void main(){ setup(); while(true)loop(); }Вот эта функция и вызывается при старте контроллера. А уж она дергает setup(), а потом в бесконечном цикле loop();