Универсальный фототригер

Тема в разделе "Arduino & Shields", создана пользователем sanik, 22 мар 2014.

  1. sanik

    sanik Гик

    Вот например как сдесь Вроде бы по логике должно работать но как организовать переключение чтоб контролер понимал с какого режима стартовать.
     
  2. sanik

    sanik Гик

    Может должно быть как то так?
    Код (Text):
    if (debounce(BTN_PLUS))
          {
            mode = ACTIVElaser;
            lcd.setCursor(0, 0);lcd.print("  Laser        ");
          }
          break;
          case ACTIVElaser:
          if ((mode == ACTIVElaser) && ((debounce (START_PIN))))
          {
            laser();
          }
          else if((mode == ACTIVElaser) &&((debounce(BTN_PLUS))))
          {
            lcd.setCursor(0, 0);lcd.print("  Sound        ");
            mode = ACTIVEsound;
          }
          break;
          case ACTIVEsound:
     
  3. Unixon

    Unixon Оракул Модератор

    Есть же справочники по языку. В бумажном варианте тот же Герберт Шилдт например.
    Да и прямо тут можно спросить такие детали... и лучше до того, как писать код.
     
    Megakoteyka нравится это.
  4. Unixon

    Unixon Оракул Модератор

    Код (Text):
    if (debounce(BTN_PLUS))
          {
            mode = ACTIVE_LASER;
            lcd.setCursor(0, 0);lcd.print("  Laser        ");
          }
          break;
          case ACTIVE_LASER:
          {
            if (debounce (START_PIN))
            {
              laser();
             }
             else if (debounce(BTN_PLUS))
             {
              lcd.setCursor(0, 0);lcd.print("  Sound        ");
              mode = ACTIVE_SOUND;
             }
             break;
            }
          case ACTIVE_SOUND:
     
  5. sanik

    sanik Гик

    Спасибо Большое наконец то 1 часть заработала А не подскажите почему нет выхода из настроек задержки и порога в коде( эта касса закомментирована)? Как сделать чтоб при нажатии BTN_Set по кругу переключались MODE_SETUP и THRESHHOLDdist а при нажатии START_PIN был выход в STANDBY?
    Код (Text):
    void loop()
    {
      switch (mode)
      {
        case STANDBY:
      {
        if (debounce(BTN_Set))
        {
          mode = MODE_SETUP; // установки задержки и порога датчиков
        }
        else if (debounce(BTN_PLUS))
        {
          mode = STANDBYset; // переключение режимов
        }
        break;
      }
      case MODE_SETUP:
      {
        lcd.setCursor(0, 0);lcd.print(" Delay setting  ");
        lcd.setCursor(0,1);lcd.print("  Set Flash");
        if (debounce(BTN_PLUS)) // чтение кнопки +
        {
          if (flashDelayMS < 1000) flashDelayMS ++; // установка задержки +
          lcd.setCursor(0,1);lcd.print("  Set Flash"); lcd.print(flashDelayMS);
        }
        if (debounce(BTN_MINUS))// чтение кнопки -
        {
          if (flashDelayMS > 0) flashDelayMS --; // установка задержки-
          lcd.setCursor(0,1); lcd.print("  Set Flash"); lcd.print(flashDelayMS);
        }
        if (debounce(BTN_Set))
        {
          mode = THRESHHOLDdist; // установка порога срабатывания
        }
        break;
      }
      case THRESHHOLDdist:
      {
        lcd.setCursor(0, 0);lcd.print(" Delay setting  ");
        lcd.setCursor(0,1);lcd.print(" sensitivity");
        if (debounce(BTN_PLUS)) // чтение кнопки +
        {
          if (DISTsetup < 1000) DISTsetup ++; // установка чуствительности +
          lcd.setCursor(0,1);lcd.print(" sensitivity"); lcd.print(DISTsetup);
        }
        if (debounce(BTN_MINUS))// чтение кнопки -
        {
          if (DISTsetup > 0) DISTsetup --; // установка чуствительности -
          lcd.setCursor(0,1);lcd.print(" sensitivity"); lcd.print(DISTsetup);
        }
        if (debounce(START_PIN))
        {
          mode = STANDBY;
        }
        break;
      }

      case STANDBYset:
        if (debounce(BTN_PLUS))
        {
          mode = STANDBYlaser;
          lcd.setCursor(0, 0);lcd.print("  Laser        ");
          lcd.setCursor(0, 1);lcd.print("              ");
        }
        break;
        case STANDBYlaser:
        {
          if (debounce (START_PIN))
          {
            laser();
          }
          else if (debounce(BTN_PLUS))
          {
            mode = STANDBYsound;
            lcd.setCursor(0, 0);lcd.print("  Sound        ");
            lcd.setCursor(0, 1);lcd.print("              ");
          }
          break;
        }
        case STANDBYsound:
        {
          if (debounce (START_PIN))
          {
            sound();
          }
          else if (debounce(BTN_PLUS))
          {
            mode = STANDBYdist;
            lcd.setCursor(0, 0);lcd.print("  Universal  ");
            lcd.setCursor(0, 1);lcd.print("              ");
          }
          break;
        }
        case STANDBYdist:
        {
          if (debounce (START_PIN))
          {
            dist();
          }
          else if (debounce(BTN_PLUS))
          {
            mode = STANDBYlaser;
            lcd.setCursor(0, 0);lcd.print("  Laser        ");
            lcd.setCursor(0, 1);lcd.print("              ");
          }
          break;
        }
      }
    }
     
     
  6. Unixon

    Unixon Оракул Модератор

    Код (Text):

    void loop()
    {
      switch (mode)
      {
      case MODE_STANDBY:
      {
      if (debounce(PIN_BTN_SET))
      {
      mode = MODE_SETUP; // установки задержки и порога датчиков
      }
      else if (debounce(PIN_BTN_PLUS))
      {
      mode = MODE_SELECT_LASER; // переключение режимов
      }
      break;
      }
      case MODE_SETUP:
      {
      lcd.setCursor(0, 0);
      lcd.print(" Delay setting  ");
      lcd.setCursor(0,1);
      lcd.print("  Set Flash");
      if (debounce(PIN_BTN_PLUS)) // чтение кнопки +
      {
      if (flashDelayMS < 1000) flashDelayMS ++; // установка задержки +
      lcd.setCursor(0,1);
      lcd.print("  Set Flash");
      lcd.print(flashDelayMS);
      }
      if (debounce(PIN_BTN_MINUS))// чтение кнопки -
      {
      if (flashDelayMS > 0) flashDelayMS --; // установка задержки-
      lcd.setCursor(0,1);
      lcd.print("  Set Flash");
      lcd.print(flashDelayMS);
      }
      if (debounce(PIN_BTN_SET))
      {
      mode = MODE_SET_THRESHHOLD; // установка порога срабатывания
      }
      break;
      }
      case MODE_SET_THRESHHOLD:
      {
      lcd.setCursor(0, 0);
      lcd.print(" Delay setting  ");
      lcd.setCursor(0,1);
      lcd.print(" sensitivity");
      if (debounce(PIN_BTN_PLUS)) // чтение кнопки +
      {
      if (sensetivity < 1000) sensetivity++; // установка чуствительности +
      lcd.setCursor(0,1);
      lcd.print(" sensitivity");
      lcd.print(sensetivity);
      }
      if (debounce(PIN_BTN_MINUS))// чтение кнопки -
      {
      if (sensetivity > 0) sensetivity--; // установка чуствительности -
      lcd.setCursor(0,1);
      lcd.print(" sensitivity");
      lcd.print(sensetivity);
      }
      if (debounce(PIN_BTN_START))
      {
      mode = MODE_STANDBY;
      }
      break;
      }
      case MODE_SELECT_LASER:
      if (debounce (PIN_BTN_START))
      {
      laser();
      }
      else if (debounce(PIN_BTN_PLUS))
      {
      mode = MODE_SELECT_SOUND;
      }
      else if (debounce(PIN_BTN_SET))
      {
      mode = MODE_STANDBY;
      }
      else
      {
      lcd.setCursor(0, 0);
      lcd.print("  Laser  ");
      lcd.setCursor(0, 1);
      lcd.print("  ");
      }
      break;
      case MODE_SELECT_SOUND:
      {
      if (debounce (PIN_BTN_START))
      {
      sound();
      }
      else if (debounce(PIN_BTN_PLUS))
      {
      mode = MODE_SELECT_UNIVERSAL;
      }
      else if (debounce(PIN_BTN_SET))
      {
      mode = MODE_STANDBY;
      }
      else
      {
      lcd.setCursor(0, 0);
      lcd.print("  Sound  ");
      lcd.setCursor(0, 1);
      lcd.print("  ");
      }
      break;
      }
      case MODE_SELECT_UNIVERSAL:
      {
      if (debounce (PIN_BTN_START))
      {
      dist();
      }
      else if (debounce(PIN_BTN_PLUS))
      {
      mode = MODE_SELECT_LASER;
      }
      else if (debounce(PIN_BTN_SET))
      {
      mode = MODE_STANDBY;
      }
      else if (debounce(PIN_BTN_PLUS))
      {
      lcd.setCursor(0, 0);
      lcd.print("  Universal  ");
      lcd.setCursor(0, 1);
      lcd.print("  ");
      }
      break;
      }
    }

     
     
  7. sanik

    sanik Гик

    Спасибо!!! Выход появился из case MODE_SETUP :) ,но по прежнему нет переключения между MODE_SET_THRESHHOLD и MODE_SETUP при нажатии кнопки PIN_BTN_SET просто проходит один раз и нет возможности вернуться на установку задержки в MODE_SETUP :confused:
     
  8. Unixon

    Unixon Оракул Модератор

    Ну вы полную диаграмму состояний так и не изобразили...
     
  9. zsm

    zsm Гик

    Не поверите , про Arduino узнал как раз из статьи ) чем приведённый код не нравится?
     
  10. sanik

    sanik Гик

    Все сам разобрался Спасибо за помощь! А срабатывания кнопок тормозят это из за debounce ?
     
  11. sanik

    sanik Гик

    Дело в том что я захотел разделить работу лазера и работу звука добавить еще несколько режимов добавить вторую вспышку и сделать автономным что бы менять настройки добавив LSD.
     
  12. zsm

    zsm Гик

    Понятно, а какие вспышки будете использовать? Чтобы качественно воду например заморозить короткий импульс нужен вроде, с обычной вспышкой даже на минимальной мощности не очень получается..

    [​IMG]
     
  13. sanik

    sanik Гик

    Приходилось мне тестировать вспышку от сони по скорости и по многим функиям никон и канон отдыхают, есть у меня на примете пара хороших вспышек самый быстрый режим у них 80гц. у сони была настраиваемая частота 100гц.Вот эту штуку погонял в свое время http://www.sony.ru/electronics/interchangeable-lens-cameras-flashes-lights/hvl-f60m