К содержимому
  1. Главная
  2. Документация
  3. Камеры для Arduino и MCU
  4. Быстрый старт с Arducam Mega в Arduino IDE

Быстрый старт с Arducam Mega в Arduino IDE

Документация Arducam · перевод arducam-russia.ru

Оборудование

Схема подключения Arducam Mega к Arduino UNO

Программное обеспечение

Настройка среды и работа в Arduino IDE.

Шаг 1. Скачайте библиотеку

git clone https://github.com/ArduCAM/Arducam_Mega.git

Шаг 2. Загрузите прошивку на устройство

ПримечаниеПример приведён для отладочной платы Arduino UNO.

Скопируйте скачанную библиотеку в папку libraries.

Библиотека Arducam_Mega в папке libraries

Как это работает

ПримечаниеArducam выпустила полнофункциональный скрипт, с помощью которого можно проверить все функции Arducam Mega. Ниже описан порядок его работы на платформе Arduino UNO.

setup()

myUart.arducamUartBegin(921600);
myCAM.begin();
myCAM.registerCallBack(readBuffer,200);

Инициализация последовательного порта

Сначала инициализируется последовательный порт — через него скрипт связывается с программой Arducam Mega.

Инициализация камеры

Функция begin() инициализирует настройки камеры. После её выполнения камера выдаёт данные в формате JPEG с максимальным разрешением.

Прототип функции:

CamStatus begin(ArducamCamera* camera);

Регистрация функции обратного вызова

Затем регистрируется функция обратного вызова — она вызывается в потоковом режиме.

Прототип функции:

void registerCallback(ArducamCamera* camera, BUFFER_CALLBACK function, uint8_t blockSize);
ВниманиеДлина передачи должна быть меньше 255.

loop()

В цикле скрипт по протоколу, определённому Arducam, разбирает команды от хост-программы Arducam Mega и в ответ на каждую команду выполняет нужное действие. Подробный код:

Приём данных по последовательному порту

if (myUart.arducamUartAvailable())
{
    temp = myUart.arducamUartRead();
    arducamDelayMs(5);
    if (temp == 0x55)
    {
        while (myUart.arducamUartAvailable())
        {
        commandBuff[commandLength] = myUart.arducamUartRead();
        if (commandBuff[commandLength] == 0xAA)
        {
            break;
        }
        commandLength++;
        }
        myUart.uartCommandProcessing(&(myCAM.cameraInfo),commandBuff,commandLength);
        commandLength = 0;
    }
}

Разбор протокола

uint8_t ArducamLink::uartCommandProcessing(Arducam* myCAM,uint8_t* commandBuff)
{
    ArducamCamera* cameraInstance = myCAM->getCameraInstance();
    CamStatus state;
    uint16_t gainValue = 0;
    uint32_t exposureValue = 0;
    uint32_t exposureLen1 = 0;
    uint32_t exposureLen2 = 0;
    uint32_t exposureLen3 = 0;

    uint8_t cameraResolution = cameraInstance->currentPictureMode;
    uint8_t cameraFarmat = cameraInstance->currentPixelFormat;
    switch (commandBuff[0])
    {
        case SET_PICTURE_RESOLUTION:                                                                                                                                //Set Camera Resolution
            cameraResolution = commandBuff[1] & 0x0f;
            cameraFarmat = (commandBuff[1] & 0x70) >> 4;
            myCAM->takePicture((CAM_IMAGE_MODE)cameraResolution,(CAM_IMAGE_PIX_FMT)cameraFarmat);
            break;
        case SET_VIDEO_RESOLUTION:                                                                                                                          //Set Video Resolution
            cameraResolution = commandBuff[1] & 0x0f;
            state = myCAM->startPreview((CAM_VIDEO_MODE)cameraResolution);
            if (state == CAM_ERR_NO_CALLBACK)
            {
                Serial.println("callback function is not registered");
            }
            break;
        case SET_BRIGHTNESS:                                                                                                                                //Set brightness
            myCAM->setBrightness((CAM_BRIGHTNESS_LEVEL)commandBuff[1]);
            break;
        case SET_CONTRAST:                                                                                                                          //Set Contrast
            myCAM->setContrast((CAM_CONTRAST_LEVEL)commandBuff[1]);
            break;

Блок-схемы

Съёмка фото

Блок-схема съёмки фото

Потоковый режим

Блок-схема потокового режима

Запросить цену

Укажите количество — пришлём коммерческое предложение.