1. Уважаемый Гость! При написании вопросов в раздел форума [ArduCopter] Вопросы, проблемы и решения обязательно придерживаться шаблона сообщения, оговоренного в правилах раздела! Если сообщение не будет оформлено должным образом, то и ответ на вопрос будет с наименьшим приоритетом. Старайтесь дать максимально полную информацию по вашей проблеме, чтобы можно было более детально рассматривать вопрос!
    Скрыть объявление
  2. Уважаемый Гость! Хотите получать кэшбэк с покупок в online-магазинах? Сервис "Zozi.ru" дает такую возможность!
    Скрыть объявление
  3. Друзья! Для нашего ресурса необходим дополнительный объем пространства в облаке Dropbox. Подробнее.
    Скрыть объявление

ArduPlane. Управление затвором камеры

Тема в разделе "[ArduPlane] Вопросы, проблемы и решения", создана пользователем Palladian, 14 июл 2016.

Реклама. Купить это место.
  1. 5yoda5

    5yoda5 Master Команда форума

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    У Андрея проблема в том, что в лог должны записываться только "успешные" шоты. А у него записались все.
     
  2. Alexey Kozin

    Alexey Kozin APM Guru Команда форума

    Регистрация:
    26 янв 2015
    Сообщения:
    927
    Город:
    Москва
    Имя:
    Алексей Козин
    я попробую покопаться в коде, возможно как то специфично должно записывать фидбэк может запись в логе другая может вообще тип лога
     
  3. Palladian

    Palladian Абитуриент

    Регистрация:
    8 июл 2016
    Сообщения:
    24
    Город:
    Симферополь
    Имя:
    Андрей
    Я немного покапался, и нашёл вот это:


    static void log_picture_feedback( bool newshot )
    {
    static bool piclogged = true;
    if (newshot) piclogged = false;
    if (!piclogged)
    if ( hal.gpio->read(camerafeedbackpin) == 0)
    {
    piclogged = true;
    log_picture();
    }

    }

    По идее он будет писать лог, если на пине будет не 1, как я думал, а 0. Я правильно понял?
     
  4. Alexey Kozin

    Alexey Kozin APM Guru Команда форума

    Регистрация:
    26 янв 2015
    Сообщения:
    927
    Город:
    Москва
    Имя:
    Алексей Козин
    if ( hal.gpio->read(camerafeedbackpin) == 0)
    да ноль - активное состояние. типовое состояние срабвтывания башмака - замыкание контакта
     
  5. raefa

    raefa Главнокомандующий Команда форума

    Регистрация:
    3 янв 2015
    Сообщения:
    4.324
    Город:
    Zhigulevsk
    Имя:
    Александр
    А про подтяжку там случайно не забыли?
     
  6. Palladian

    Palladian Абитуриент

    Регистрация:
    8 июл 2016
    Сообщения:
    24
    Город:
    Симферополь
    Имя:
    Андрей
    Ага.. а в описании было написано, что для сработки фидбэка требуется минимум 2 мс высокого уровня на соответствующем входе.
     
  7. Palladian

    Palladian Абитуриент

    Регистрация:
    8 июл 2016
    Сообщения:
    24
    Город:
    Симферополь
    Имя:
    Андрей
    Перепаял кнопку таким образом, что в отпущенном состоянии на пин через резистор подаётся 5в а при нажатии кнопки - земля. Результат не изменился. В логи пишется всё подряд.
     
  8. Palladian

    Palladian Абитуриент

    Регистрация:
    8 июл 2016
    Сообщения:
    24
    Город:
    Симферополь
    Имя:
    Андрей
    Решил немного по экспериментировать с кодом.


    // do_take_picture - take a picture with the camera library
    static void do_take_picture()
    {
    #if CAMERA == ENABLED
    camera.trigger_pic(true);

    //if (camerafeedbackpin == -1)
    // log_picture();
    //else
    // log_picture_feedback(1);
    #endif
    }

    Я закомментировал все строки, которые отвечают за запись лога. Однако даже с такой прошивкой АПМ всё равно писал логи от камеры.
     
  9. 5yoda5

    5yoda5 Master Команда форума

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    Может тут и порылась собака? Возможно ему вообще пофигу этот фидбэк... Может ранее когда-то это работало, а потом отвалилось. Код валяется, а его вызов не проходит...

    Опенсорс, фига ли? ....
     
  10. Alexey Kozin

    Alexey Kozin APM Guru Команда форума

    Регистрация:
    26 янв 2015
    Сообщения:
    927
    Город:
    Москва
    Имя:
    Алексей Козин
    странно, гляну.
    возможно в классе камеры какое логирование еще осталось.

    может не тот хекс залили?
     
  11. Palladian

    Palladian Абитуриент

    Регистрация:
    8 июл 2016
    Сообщения:
    24
    Город:
    Симферополь
    Имя:
    Андрей
    Да нет, хекс тот я залил )
     
  12. Alexey Kozin

    Alexey Kozin APM Guru Команда форума

    Регистрация:
    26 янв 2015
    Сообщения:
    927
    Город:
    Москва
    Имя:
    Алексей Козин
    кажись нашел.
    в CGS_mavlink.ino

    case MAVLINK_MSG_ID_DIGICAM_CONTROL:
    {
    camera.control_msg(msg);
    log_picture();
    break;
    }

    при команде на снимок с мавлинка он безусловно логирует снимок.
    тем не менее если команда на снимок вызвана другим событием - автоматической съемкой или спуском затвора по команде пульта должен работать эксеперментальный участок кода
     
    Последнее редактирование: 21 июл 2016
  13. Palladian

    Palladian Абитуриент

    Регистрация:
    8 июл 2016
    Сообщения:
    24
    Город:
    Симферополь
    Имя:
    Андрей
    Дописал:

    #if CAMERA == ENABLED
    case MAVLINK_MSG_ID_DIGICAM_CONFIGURE:
    {
    break;
    }

    case MAVLINK_MSG_ID_DIGICAM_CONTROL:
    {
    camera.control_msg(msg);
    if (camerafeedbackpin == -1)
    log_picture();
    else
    log_picture_feedback(1);
    break;
    }
    #endif // CAMERA == ENABLED

    Всё равно пишет логи. Хекс перезаливал 2 раза.
     
  14. Alexey Kozin

    Alexey Kozin APM Guru Команда форума

    Регистрация:
    26 янв 2015
    Сообщения:
    927
    Город:
    Москва
    Имя:
    Алексей Козин
    какой пин выбран для фидбэка - какое значение в параметре,
    какой контакт фидбэка замыкаете на апм,
    есть ли на нем подтяг ? проверьте тестером напряжение

    учли это?
    int8_t apin = camera.get_feedback_pin();


    camerafeedbackpin = hal.gpio->analogPinToDigitalPin(apin);

    тоесть задается номер аналогового входа а0 = 0 а1 =1 итд сам вход не должен быть задействован под сонар аирспид или датчик напряжения или тока
     
    Последнее редактирование: 21 июл 2016
  15. Palladian

    Palladian Абитуриент

    Регистрация:
    8 июл 2016
    Сообщения:
    24
    Город:
    Симферополь
    Имя:
    Андрей
    Настройки камере в Missio Planere такие:
    upload_2016-7-21_15-39-44.png

    Собственно и в логе эти настройки правильно отображаются:

    PARM, GPS_FILTERSPD, 0
    PARM, CAM_TRIGG_TYPE, 1
    PARM, CAM_DURATION, 3
    PARM, CAM_SERVO_ON, 1300
    PARM, CAM_SERVO_OFF, 1100
    PARM, CAM_TRIGG_DIST, 0
    PARM, CAM_FEEDBACK_PIN, 1

    Значит в АПМ они записались верно.


    Кнопка подключена таким образом:
    upload_2016-7-21_15-52-32.png

    Напряжение на всех входах 1,61 вольт
    upload_2016-7-21_15-54-21.png

    кроме третьего
    upload_2016-7-21_15-54-50.png

    Дальше я ещё немного "поигрался" с кодом:


    case MAVLINK_MSG_ID_DIGICAM_CONTROL:
    {
    camera.control_msg(msg);
    //if (camerafeedbackpin == -1)
    //log_picture();
    //else
    log_picture_feedback(1);
    break;
    }

    Результат - пишет все логи.
    Я подумал, что это может означать, что переменная camerafeedbackpin равна -1 вне зависимости от настроек.
    Тогда я попытался вручную назначить первый вход для башмака:

    static void log_picture_feedback( bool newshot )
    {
    static bool piclogged = true;
    if (newshot) piclogged = false;
    if (!piclogged)
    if ( hal.gpio->read(1) == 0)
    {
    piclogged = true;
    log_picture();
    }

    }

    Результат: пишет все логи как и раньше.
     
  16. Alexey Kozin

    Alexey Kozin APM Guru Команда форума

    Регистрация:
    26 янв 2015
    Сообщения:
    927
    Город:
    Москва
    Имя:
    Алексей Козин
    попробуйте резистором подтянуть вход на +5
     
  17. Palladian

    Palladian Абитуриент

    Регистрация:
    8 июл 2016
    Сообщения:
    24
    Город:
    Симферополь
    Имя:
    Андрей
    Я так и делаю. На первой фотографии на водно, что на вход (оранжевый) приходит через 10ком питание.
    --- Сообщения объединены, 21 июл 2016 ---
    *видно
     
  18. Alexey Kozin

    Alexey Kozin APM Guru Команда форума

    Регистрация:
    26 янв 2015
    Сообщения:
    927
    Город:
    Москва
    Имя:
    Алексей Козин
    с тем чтобы увидеть состояния переменных можно выводить их значения в окно messages которое под горизонтом в мишен планере на последней закладке

    пример использования в system.ino

    cliSerial->printf_P(PSTR("\n\nInit " FIRMWARE_STRING
    "\n\nFree RAM: %u\n"),
    hal.util->available_memory());

    единственное что не следует злоупотреблять в высокоскоростных циклах иначе вывод может забить буфер и код зависнет
     
  19. Palladian

    Palladian Абитуриент

    Регистрация:
    8 июл 2016
    Сообщения:
    24
    Город:
    Симферополь
    Имя:
    Андрей
    Я так понимаю, что этот код выполняет отправку строки, которая переопределена макросом FIRMWARE_STRING. А как послать переменную camerafeedbackpin к примеру?
     
  20. Alexey Kozin

    Alexey Kozin APM Guru Команда форума

    Регистрация:
    26 янв 2015
    Сообщения:
    927
    Город:
    Москва
    Имя:
    Алексей Козин
Реклама. Купить это место.