Arduino Mega2560, Ethernet Shield & OV0706: "Камера не найдена"

Я хочу сделать снимок с помощью OV0706, который сохранит изображение на SD-карту. Я использую Arduino Mega2560, Ethernet Shield (с SD-слотом) и OV0706 (вот этот: http://www.aliexpress.com/item/NEW-RS232-TTL-JPEG-Digital-Serial-Camera-Module-SCB-1-with-video-out-Support-VIMICRO-VC0706/1975852463.html). Я попробовал учебник для этой камеры от Adafruit, но все еще получаю ошибку "Камера не найдена?".

Думал, что это как-то связано с назначением контактов, но если я подключу RX от OV0706 с A15 на Mega (см. рисунок), он все равно выдаст ту же ошибку.

// On Mega: камера TX подключена к контакту 69 (A15), камера RX-к контакту 3:
SoftwareSerial cameraconnection = SoftwareSerial(69, 3);

Код (важная часть):

// Это базовый скетч моментального снимка с использованием библиотеки VC0706.
// При запуске Arduino найдет камеру и SD-карту и
// затем сделайте снимок, сохранив его на SD-карту.
// Общественное достояние.

// При использовании Arduino Mega (1280, 2560 или ADK) в сочетании
// с экраном SD-карты, предназначенным для обычных Arduino
// (Uno и т. Д.), необходимо отредактировать файл библиотеки:
// библиотеки/SD/утилита/Sd2Card.h
// Ищите эту строку:
// #define MEGA_SOFT_SPI 0
// изменить на:
// #define MEGA_SOFT_SPI 1
// Это НЕ требуется при использовании интерфейса прорыва SD-карты
// непосредственно к шине SPI Mega (контакты 50-53), или при использовании
// не Мега-плата в стиле Уно.

#include <Adafruit_VC0706.h>
#include <SPI.h>
#include <SD.h>

// закомментируйте эту строку, если вы используете Arduino V23 или более раннюю версию
#include <SoftwareSerial.h>         

// раскомментируйте эту строку, если вы используете Arduino V23 или более раннюю версию
// #include <NewSoftSerial.h>       

// SD card chip select line varies among boards/shields:
// Adafruit SD shields and modules: pin 10
// Arduino Ethernet shield: pin 4
// Sparkfun SD shield: pin 8
// Arduino Mega w/hardware SPI: pin 53
// Teensy 2.0: pin 0
// Teensy++ 2.0: pin 20
#define chipSelect 4

// Контакты для подключения камеры настраиваются.
// С Arduino Uno и т. Д. Можно использовать большинство контактов, за исключением
// те, которые уже используются для SD-карты (от 10 до 13 плюс
// ChipSelect, если он отличается от pin 10).
// С Arduino Mega выбор немного сложнее:
// 1) Вы все еще можете использовать SoftwareSerial и подключить камеру к
// множество контактов...НО выбор ограничен.  TX
// контакт от камеры (RX на Arduino и первый
// аргумент SoftwareSerial()) ДОЛЖЕН быть одним из следующих: 62, 63, 64,
// 65, 66, 67, 68, или 69.  Если установлен MEGA_SOFT_SPI (и с помощью
// обычный Arduino SD shield), контакты 50, 51, 52 и 53
// также доступны.  Вывод RX от камеры (TX вкл.
// Arduino, второй аргумент SoftwareSerial()) может быть любым
// pin, опять же за исключением тех, которые используются SD-картой.
// 2) Вы можете использовать любой из трех дополнительных аппаратных UART на
// Мега-плата (маркированная как RX1/TX1, RX2/TX2, RX3,TX3),
// но должна специально использовать два контакта, определенные этим
// UART; они не настраиваются.  В этом случае передайте
// желаемый последовательный объект (а не SoftwareSerial
// object) в конструктор VC0706.

// Использование SoftwareSerial (Arduino 1.0+) или NewSoftSerial (Arduino 0023 & prior):
#if ARDUINO >= 100
// On Uno: camera TX connected to pin 2, camera RX to pin 3:
//SoftwareSerial cameraconnection = SoftwareSerial(2, 3);
// On Mega: camera TX connected to pin 69 (A15), camera RX to pin 3:
SoftwareSerial cameraconnection = SoftwareSerial(69, 3);
#else
NewSoftSerial cameraconnection = NewSoftSerial(2, 3);
#endif

Adafruit_VC0706 cam = Adafruit_VC0706(&cameraconnection);

// Использование аппаратного последовательного порта на Mega: camera TX conn. к RX1,
// camera RX to TX1, никакой объект SoftwareSerial не требуется:
//Adafruit_VC0706 cam = Adafruit_VC0706(&Serial1);

void setup() {

  // При использовании аппаратного SPI вывод SS ДОЛЖЕН быть установлен в
  // выход (даже если он не подключен или не используется).  Если оставить его как
плавающий вход
  // с включенным SPI, это может привести к блокировке.

#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  if(chipSelect != 53) pinMode(53, OUTPUT); // SS on Mega
#else
  if(chipSelect != 10) pinMode(10, OUTPUT); // SS on Uno, etc.
#endif
#endif

  Serial.begin(9600);
  Serial.println("Тест моментального снимка камеры VC0706");

  // посмотрите, присутствует ли карта и может ли она быть инициализирована:
  if (!SD.begin(chipSelect)) {
    Serial.println("Карта вышла из строя или отсутствует");
    // больше ничего не делай:
    return;
  }  

  // Попробуем найти камеру
  if (cam.begin()) {
    Serial.println("Камера найдена:");
  } else {
    Serial.println("Камера не найдена?");
    return;
  }

Заранее спасибо.

(Фотографии: http://prntscr.com/apdvi9 )

, 👍2


1 ответ


0

Поскольку, по крайней мере,моей камере требуется до 2 секунд для инициализации, я думаю, что

if (cam.begin()) {
Serial.println("Камера найдена:");
} else {
Serial.println("Камера не найдена?");

немедленно возвращает то, что, по его мнению, камера не найдена

попробуйте это с

    unsigned long timer = millis();
    Serial.println("Инициализация камеры:");
    while (!cam.begin()) {
    Serial.print(".");
    if (millis()-timer>3000) {
      Serial.println("Камера не найдена?");
      break;
      }
    } 
,