Помогите с пользовательским кодом. Пожалуйста!!!

Evgeniy23
Evgeniy23 аватар
Offline
Зарегистрирован: 29.05.2015

Нужно написать пользовательский код, который сначала в setup включает 3 светодиоида(это понятно)

и затем с помощью функции пользовательской по очереди мигает светодиоидом(один вкл/выкл в это время другие горят и так по очереди)

Очень нужно. Но я абсолютно не соображаю с какой стороны подойти.

Могу написать длинный код(пример ниже) но как через пользовательскую функцию?

void loop() {
  delay(1000);
  digitalWrite(x, LOW);    
  delay(1000);
digitalWrite(x, HIGH);    
  delay(1000);
digitalWrite(y, LOW);    
  delay(1000);
digitalWrite(y, HIGH);    
  delay(1000); 
digitalWrite(z, LOW);    
  delay(1000);
digitalWrite(z, HIGH);    
  delay(1000);   
JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

вынести digitalWrite в функцию и передавать в нее параметры

Evgeniy23
Evgeniy23 аватар
Offline
Зарегистрирован: 29.05.2015

а можно пождробнее? пожалуйста

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Куда подробнее? Это 3 строчки кода.

Вы не знаете что такое функция и как она работает?

 

Evgeniy23
Evgeniy23 аватар
Offline
Зарегистрирован: 29.05.2015

я девоочка и я только учусь,напишите,пожалуйста

 

Evgeniy23
Evgeniy23 аватар
Offline
Зарегистрирован: 29.05.2015

и как вы впихнёте условие мигания 1 светодиоида из трёх по очереди

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Evgeniy23 пишет:

я девоочка и я только учусь,напишите,пожалуйста

Девочка с ником Евгений23? :-)  Курсач горит? ;-)

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Evgeniy23 пишет:

и как вы впихнёте условие мигания 1 светодиоида из трёх по очереди

Используем для этого флаг. Теперь спросите ещё, что такое "флаг".

Evgeniy23
Evgeniy23 аватар
Offline
Зарегистрирован: 29.05.2015

ЕВГЕНИЯ Я БЛИН ЕВГЕНИЯ. Неправильно написала и все предираются! И не курсач,я вообще в другоц области учусь и вполне успешно. Я сама занимаюсь ардуино, помогите вы,что вам жалко? Я умную одежду делать собираюсь.

Evgeniy23
Evgeniy23 аватар
Offline
Зарегистрирован: 29.05.2015

вы тоже новичколм были, не умничайте.

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Прочитайте что такое функции и как ими пользоваться. Я могу помочь разобраться, но не писать Вам код.

Evgeniy23
Evgeniy23 аватар
Offline
Зарегистрирован: 29.05.2015

прочла и давно уже пытаюсь сама написать, но не выходит

Evgeniy23
Evgeniy23 аватар
Offline
Зарегистрирован: 29.05.2015

я понимаю, что код писать совсем нехорошо,но не догоняю я

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Не бойтесь, мы не кусаемся. Вы хоть начните с чего-нибудь. Объявите для начала функцию.

Evgeniy23
Evgeniy23 аватар
Offline
Зарегистрирован: 29.05.2015

я так понимаю вот начало

int x = 13;
int y = 9;
int z = 6;
void setup(){
  pinMode(x, OUTPUT);
  pinMode(y, OUTPUT);
  pinMode(z, OUTPUT);
}
 
void loop() {
digitalWrite(x,HIGH);
digitalWrite(y,HIGH);
digitalWrite(z,HIGH);
delay(500);
}
 
а дальше должна идти моя функция,которая по очереди какждый x,y,z вкл/выкл
и тут ступор?
JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Правильно. У Вас сейчас есть 2 функции. По их подобию напишите третью.

Evgeniy23
Evgeniy23 аватар
Offline
Зарегистрирован: 29.05.2015

это будет к каждой перепменной отдельно

Evgeniy23
Evgeniy23 аватар
Offline
Зарегистрирован: 29.05.2015

это я понимаю, а как не писать 300 раз одно и тоже

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

написать функцию как я Вам и сказал.

Evgeniy23
Evgeniy23 аватар
Offline
Зарегистрирован: 29.05.2015

я так понимаю это начало int R(int x, int y, int z)

венрно?

и что далее?

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

нет. это объявление и инициализация переменных.

maksim
Offline
Зарегистрирован: 12.02.2012
void loop() {
  Function(x);    
  Function(y);    
  Function(z);    
}

void Function(int argument)
{
  digitalWrite(argument, LOW);    
  delay(1000);
  digitalWrite(argument, HIGH);    
  delay(1000);
}

 

int array[] = {x, y, z};

void setup(){
  for(int i = 0; i < 3; i++) pinMode(array[i], OUTPUT);  
}

void loop() {
  for(int i = 0; i < 3; i++) Function(array[i]);      
}

void Function(int argument)
{
  digitalWrite(argument, LOW);    
  delay(1000);
  digitalWrite(argument, HIGH);    
  delay(1000);
}

 

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013
// назначаем пины для светодиодов
const byte pinX = 13;
const byte pinY = 9;
const byte pinZ = 6;

void setup()
{
  pinMode(pinX, OUTPUT);
  pinMode(pinY, OUTPUT);
  pinMode(pinZ, OUTPUT);
}
 
// основной цикл
void loop() 
{
ledFlash(HIGH, HIGH, LOW);
delay(200);

ledFlash(LOW, HIGH, HIGH);
delay(200);
}

// функция, где 3 аргумента, каждый из которых может принимать значение HIGH или LOW
void ledFlash(boolean x, boolean y, boolean z) 
{
digitalWrite(pinX, x);  // устанавливаем для pinX состояние, взятое из переменной X
digitalWrite(pinY, y);
digitalWrite(pinZ, z);
}

Evgeniy23, для вас задание: написать комментарии для всех строк, которые в loop. Пока вы не поймете, как это происходит, дальнейшие навороты бесмысленны.

Evgeniy23
Evgeniy23 аватар
Offline
Зарегистрирован: 29.05.2015

Спасибо большое! я сама уже справилась через for. Загвостка в том, что я ПОНИМАЮ ваш код и другие готовые коды мне тяжело самой сообразить

Arhat109
Offline
Зарегистрирован: 26.05.2015

Спокойствие, только спосокйствие. Дело - житейское. На самом деле, будучи девочкой, вы чаще мальчиков пользуетесь "функциями" в жизни. :)

Это объявление функции (КАК её пользовать):

int myGoRestoraunt(long money, uint8_t boy);

Это "тело" функции (что надо сделать):

int myGoRestoraunt(long money, uint8_t boy)
{
    if(money >1000) return true;
    else{
         if( boy ) return true;
    }
    return false;
}

А это, то КАК это использовать в другом "действии" (функции):

uint8_t    is_boy_present;
long        my_money_now;

void setup()
{
    uint8_t    is_boy_present = true;
    long        my_money_now = 0UL;
}

void loop()
{
    if( myGoRestoraunt(my_money_now, is_boy_present) )
    {
        /*тут код "подготовки к походу в ресторан */
    } else {
        /* тут действия по созданию условий */
    }
}

Так - понятнее? :)

Evgeniy23
Evgeniy23 аватар
Offline
Зарегистрирован: 29.05.2015

ахха,спасибо большое) Было приятно,что кто-то отнёсся с юмором :) хотя я этой функией в жизни и не пользуюсь)

ну а если серьёзно,да,я поняла смысл. 

Evgeniy23
Evgeniy23 аватар
Offline
Зарегистрирован: 29.05.2015

вот этот момент непонятен

if(money >1000) return true;
4     else{
5          if( boy ) return true;
6     }
7     return false;

if внутри else как воспринимается компиллятором? логически не понимаю смысла и с return true не соображаю,что значит

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Расставьте там фигурные скобки и все встанет на свои места.

Считается некошерным экономить на фигурных скобках - читать неудобно

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Evgeniy23 пишет:

Я умную одежду делать собираюсь.

для мальчиков или для девочек ?
.....просто код будет разный :)
"почему я должен знать где лежат мои чистые носки ?" - это не прописать ни одним кодом , компилятор сразу закомпилится :(
:)-

Arhat109
Offline
Зарегистрирован: 26.05.2015

С конца:

return true - вернуть значение "истина" или "да". По "умолчанию", это 1, точнее "не ноль". Соответственно false - "нет" или 0.

if внутри if понимается точно также как и извне: проверяется условие, и если оно не ноль (истинно), то исполняется блок/оператор тот, который после круглой скобки, если условие ложно (равно 0), то блок пропускается, и при наличии волшебного слова else  - исполняется тот оператор/блок, который написан после него.

Фигурные скобки - {} это просто блок (группа) операторов.

Каждый оператор завершается точкой с запятой.

... лет 17 не глядел в мануал ... посмотрите лучше правильный синтаксис в гугле. Могу ошибиться с толкованием символов. :)