Вот например как сдесь Вроде бы по логике должно работать но как организовать переключение чтоб контролер понимал с какого режима стартовать.
Может должно быть как то так? Код (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:
Есть же справочники по языку. В бумажном варианте тот же Герберт Шилдт например. Да и прямо тут можно спросить такие детали... и лучше до того, как писать код.
Код (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:
Спасибо Большое наконец то 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; } } }
Код (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; } }
Спасибо!!! Выход появился из case MODE_SETUP ,но по прежнему нет переключения между MODE_SET_THRESHHOLD и MODE_SETUP при нажатии кнопки PIN_BTN_SET просто проходит один раз и нет возможности вернуться на установку задержки в MODE_SETUP
Дело в том что я захотел разделить работу лазера и работу звука добавить еще несколько режимов добавить вторую вспышку и сделать автономным что бы менять настройки добавив LSD.
Понятно, а какие вспышки будете использовать? Чтобы качественно воду например заморозить короткий импульс нужен вроде, с обычной вспышкой даже на минимальной мощности не очень получается..
Приходилось мне тестировать вспышку от сони по скорости и по многим функиям никон и канон отдыхают, есть у меня на примете пара хороших вспышек самый быстрый режим у них 80гц. у сони была настраиваемая частота 100гц.Вот эту штуку погонял в свое время http://www.sony.ru/electronics/interchangeable-lens-cameras-flashes-lights/hvl-f60m