void setup() и подпрограммы

BlackWarrior
Offline
Зарегистрирован: 07.09.2013

Добрый день! Я начинающий пользователь 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();
  }
 }

 

BlackWarrior
Offline
Зарегистрирован: 07.09.2013

Пардон. Ошибся:

#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)?   

faraddin
Offline
Зарегистрирован: 11.08.2013

У вас какой то неверный подход. Вы попробуйте сперва, а если не получится, тогда и спрашивайте. Или вы думаете что программировать это вдумчиво набратьтекст программы и с первого раза ее откомпилировать? Нет. Отладка, отладка и еще раз отладка.

BlackWarrior
Offline
Зарегистрирован: 07.09.2013

faraddin пишет:
У вас какой то неверный подход. Вы попробуйте сперва, а если не получится, тогда и спрашивайте. Или вы думаете что программировать это вдумчиво набратьтекст программы и с первого раза ее откомпилировать?

Моя ардуинка еще едет. Пытаюсь код писать заранее. Простите за вопрос(

Пример кода в ArduinoIDE скомпилился без ошибок.

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

http://arduino.ru/Reference/Setup

http://arduino.ru/Reference/Loop

Прочитайте про это: setup выполняется один раз, а затеи loop  до посинения....

BlackWarrior
Offline
Зарегистрирован: 07.09.2013

trembo пишет:
Прочитайте про это: setup выполняется один раз, а затеи loop  до посинения....

А мне и надо один раз при старте

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

BlackWarrior пишет:

И можно ли в строке  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);
....

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

можно

компилировать без ардуины никто не запрещал

 

leshak
Offline
Зарегистрирован: 29.09.2011

можно. setup() и loop() - с точки зрения компилятора это обычные функции. Все что можно с обычными - можно с ними. Можно и другие функции вызывать, и переменные объявлять и проч.
Их "особость" только в одном: setup() вызовется один раз, при старте, а loop() - будет до посинения дергаться. Других отличий - нет.

Вообщем, на самом деле, в любом скетче, у вас есть еще одна функция, вы ее не видите, но она есть, вот типа такой:

void main(){
  setup();
  while(true)loop();
}

Вот эта функция и вызывается при старте контроллера. А уж она дергает setup(), а потом в бесконечном цикле loop();