Голосование

Гимн :pozor:

И вновь продолжаем позор!
89 (20%)
И снова позорно в груди!
63 (14.2%)
Позор такой молодой
63 (14.2%)
И юный позор впереди!
82 (18.5%)
81 (18.2%)
перечитывать позор - это всё равно что следить за развитием рулона туалетной бумаги :pozor:
66 (14.9%)

Проголосовало пользователей: 256

Автор Тема: Клуб любителей смайлика :pozor: 2  (Прочитано 6671520 раз)

0 Пользователей и 4 Гостей просматривают эту тему.

Оффлайн akl

  • Живу на форуме
  • *******
  • Сообщений: 8114
  • не шарю ваще
Re: Клуб любителей смайлика :pozor: 2
« Ответ #246735 : Февраля 22, 2017, 15:49:06 »
Pitsot,


    boolean timer_z = (millis() - time_z > 500)?;

      switch (cmd)
     {
        case 'Z'
        if (!pin5 && timer_z) {
        digitalWrite (5, HIGH);
        time_z = millis();}
        else if (pin5 && timer_z) {
        digitalWrite (5, LOW);
        time_z = millis();}
        break;


по идее оно каждый цикл сверяет millis() - time_z с 500 и если оно меньше, то timer_z становится фальш, а если больше то тру ??? потом когда срабатывает кейс Z, если с запуска уже прошло 500мс (time_z впервые задается в самом начале вне лупа), то пин выключается или включается, при этом time_z засекается снова, кейс кончается, цикл снова проходит через boolean timer_z и тогда уже пол секунды кейс З ничего не делает :hmmm: :hmmm:

Оффлайн r3d0ut

  • Ветеран форума
  • ******
  • Сообщений: 3837
Re: Клуб любителей смайлика :pozor: 2
« Ответ #246736 : Февраля 22, 2017, 15:49:21 »
boolean timer_z = (millis() - time_z > 500);
не надо там вопр знака :pozor:

Оффлайн akl

  • Живу на форуме
  • *******
  • Сообщений: 8114
  • не шарю ваще
Re: Клуб любителей смайлика :pozor: 2
« Ответ #246737 : Февраля 22, 2017, 15:51:10 »

ты объявляешь переменную
значение которой приравниваешь к (millis() - time_z > 500)
соответственно, вычислененное (millis() - time_z > 500) со значением time_z на момент объявления и запишется в переменную
больше её значение меняться не будет пока ты не скажешь timer_z = blabla;
так я же ее внутри цикла объявляю, то есть каждый новый цикл она снова объявляется и ставит новое значение (тру или фальш) в зависимости от засечки в кейсе? :hmmm: :hmmm:

... и добавил:

r3d0ut, вроде полностью можно вот так
boolean timer_z = (millis() - time_z > 500) ? true : false;


... и добавил:

но она и так булевая так что видимо нах не нужен вопрос :hmmm:
« Последнее редактирование: Февраля 22, 2017, 15:52:43 от akl »

Оффлайн Pitsot

  • Эксперт
  • *****
  • Сообщений: 1229
  • unpozorable 8)
Re: Клуб любителей смайлика :pozor: 2
« Ответ #246738 : Февраля 22, 2017, 15:53:42 »
akl, тогда норм
я забыл что там бесконечный цикл

Оффлайн r3d0ut

  • Ветеран форума
  • ******
  • Сообщений: 3837
Re: Клуб любителей смайлика :pozor: 2
« Ответ #246739 : Февраля 22, 2017, 15:53:52 »
и я тебе не зря кинул статью про время жизни переменных. :pozor: timer_z должна быть либо объявлена в другом месте, либо быть static :pozor:

Оффлайн Pitsot

  • Эксперт
  • *****
  • Сообщений: 1229
  • unpozorable 8)
Re: Клуб любителей смайлика :pozor: 2
« Ответ #246740 : Февраля 22, 2017, 15:54:41 »
boolean timer_z = (millis() - time_z > 500) ? true : false;
пример индусского кода, где чем больше буков тем лучше

достаточно как рэдаут выше написал

Оффлайн akl

  • Живу на форуме
  • *******
  • Сообщений: 8114
  • не шарю ваще
Re: Клуб любителей смайлика :pozor: 2
« Ответ #246741 : Февраля 22, 2017, 15:55:55 »
и я тебе не зря кинул статью про время жизни переменных. :pozor: timer_z должна быть либо объявлена в другом месте, либо быть static :pozor:
то есть внутри цикла объявлять ее нельзя? :hmmm:

Оффлайн r3d0ut

  • Ветеран форума
  • ******
  • Сообщений: 3837
Re: Клуб любителей смайлика :pozor: 2
« Ответ #246742 : Февраля 22, 2017, 15:56:42 »
Я скоро ухожу бухать, но я еще вернусь :pozor: Я даже visual studio запустил устанавливаться :pozor:

Оффлайн Pitsot

  • Эксперт
  • *****
  • Сообщений: 1229
  • unpozorable 8)
Re: Клуб любителей смайлика :pozor: 2
« Ответ #246743 : Февраля 22, 2017, 15:56:55 »
то есть внутри цикла объявлять ее нельзя? :hmmm:

если честно я хз как это в си работает
возможно будет отжирать память, возможно компилятор ругнется даже
в сишарпе можно как ты написал

Оффлайн r3d0ut

  • Ветеран форума
  • ******
  • Сообщений: 3837
Re: Клуб любителей смайлика :pozor: 2
« Ответ #246744 : Февраля 22, 2017, 15:57:38 »
то есть внутри цикла объявлять ее нельзя? :hmmm:
можно, но она будет создаваться заново и разрушаться для каждой итерации, а значит, не будет сохранять значение :pozor:

Оффлайн Pitsot

  • Эксперт
  • *****
  • Сообщений: 1229
  • unpozorable 8)
Re: Клуб любителей смайлика :pozor: 2
« Ответ #246745 : Февраля 22, 2017, 15:58:22 »
можно, но она будет создаваться заного и разрушаться для каждой итерации, а значит, не будет сохранять значение :pozor:

кстати да, но я че то уже запутался, возможно аклу это и надо

Оффлайн akl

  • Живу на форуме
  • *******
  • Сообщений: 8114
  • не шарю ваще
Re: Клуб любителей смайлика :pozor: 2
« Ответ #246746 : Февраля 22, 2017, 15:59:14 »
в обучалках к ардуино вроде было написано так, что чуть ли не везде можно объявлять :pozor:

если например рассмотреть попроще

boolean pin5 = digitalRead(5); тупо следит за состоянием пина, и если где-то в цикле дальше состояние поменяется, то она тоже как бы должна поменяться


вот полностью если пицот не видел еще


#include <Servo.h>

Servo servoX;

unsigned long time_x = millis();
unsigned long time_z = millis();

void setup()
{
  servoX.attach(6);
  servoY.attach(7);
  servoX.write(90);
  servoY.write(90);
  Serial.begin(9600);
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
}



void loop()
{
  while (Serial.available() > 0)
   {
    int cmd = Serial.read();
    int x = servoX.read();
    boolean pin3 = digitalRead(3);
    boolean pin5 = digitalRead(5);
    boolean timer_z = (millis() - time_z > 500);


    if (millis() - time_x > 1000 && pin3) {
    digitalWrite(3, LOW); }

      switch (cmd)
     {
        case 'Z'
        if (!pin5 && timer_z) {
        digitalWrite (5, HIGH);
        time_z = millis();}
        else if (pin5 && timer_z) {
        digitalWrite (5, LOW);
        time_z = millis();}
        break;


        case 'X':
        time_x = millis();
        digitalWrite(3, HIGH);
        break;

        case 'R':
        if (x < 180) { servoX.write(x + 1); }
        break;

        case 'L':
        if (x > 0) { servoX.write(x - 1); }
        break;
      }
     delay (20)
   }
}

Оффлайн Pitsot

  • Эксперт
  • *****
  • Сообщений: 1229
  • unpozorable 8)
Re: Клуб любителей смайлика :pozor: 2
« Ответ #246747 : Февраля 22, 2017, 16:01:32 »
Цитировать
boolean pin5 = digitalRead(5); тупо следит за состоянием пина, и если где-то в цикле дальше состояние поменяется, то она тоже как бы должна поменяться

нет  :pozor:
не будет следить ни за чем
запомнит состояние пина на момент выполнения кода и всё

Оффлайн akl

  • Живу на форуме
  • *******
  • Сообщений: 8114
  • не шарю ваще
Re: Клуб любителей смайлика :pozor: 2
« Ответ #246748 : Февраля 22, 2017, 16:02:11 »
и я тебе не зря кинул статью про время жизни переменных. :pozor:
ну это скажем так не статья, а глава из учебника, и походу чтобы понять что там написано,я должен не просто прочитать все предыдущие главы, но и разобрать и понять все упражнения и примеры и возможно не из одного этого учебника :pozor: :pozor: :pozor: :pozor: :pozor: :pozor: :pozor: :pozor: :pozor: :pozor:

Оффлайн r3d0ut

  • Ветеран форума
  • ******
  • Сообщений: 3837
Re: Клуб любителей смайлика :pozor: 2
« Ответ #246749 : Февраля 22, 2017, 16:02:34 »
Это, конечно, если тебе надо, чтобы значение сохзранялось :pozor: Я не разбирался в логике, а вообще так называть переменные нельзя :pozor:
Если она живет дольше, чем несколько строк кода, то ее название должно давать понять, для чего она нужна. Поищи рекомендации по наименованию переменных :pozor: