Запуск сервопривода при захвате изображения

python opencv

Я пытаюсь создать программу, когда камера захватывает сервопривод, который будет непрерывно вращаться на 90 градусов, но мой код остановится в выводе на печать 2. Любая идея для непрерывного запуска сервопривода?

Вот код

import numpy as np
import cv2
import serial
import struct
import time


ser = serial.Serial('COM11',9600)

x=0

while(True):


 # Capture frame-by-frame
    cap = cv2.VideoCapture(0)
    #framerate = cap.get(5)
    ret, frame = cap.read()
    cap.release()
    # Our operations on the frame come here



    filename = 'C:/Users/DELVO/Desktop/tryTest/bruises/main/images' +  str(int(x)) + ".png"
    x=x+1
    cv2.imwrite(filename, frame)
    print(ser.write(x))
    time.sleep(5)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

Код Arduino

#include <Servo.h>
int data_x = 0;
int data_y = 0;
int data[1];
Servo myservo_x;
Servo myservo_y;// создаем сервообъект для управления сервоприводом
// на большинстве плат можно создать двенадцать сервообъектов

int pos = 0;    // переменная для хранения положения сервопривода

void setup() {
  Serial.begin(9600);
  myservo_x.attach(7);  // присоединяем сервопривод к контакту 9 к объекту сервопривода
  myservo_y.attach(10);
  myservo_x.write(90);
  myservo_y.write(90);
}

void loop() {
  while (Serial.available() >= 2) {
    // data_x=Serial.read();
    // data_y=Serial .read();
    for (int i = 0; i < 2; i++) {
      data[i] = Serial.read();
    }

    myservo_x.write(data[0]);
    myservo_y.write(data[1]);

    Serial.println(data[0]);
    Serial.println(data[1]);
  }

}

, 👍-1

Обсуждение

«код остановится в выводе на печать 2». Где именно находится «выход на печать 2»? Я не понимаю вашей проблемы. Пожалуйста, опишите его подробнее. Что на самом деле делает код и чего вы от него ожидали?, @chrisl

вы использовали мою программу? когда вывод 2 печатает сервопривод остановится, @TrialAndError

Нет, я не делал. Сначала мы пытаемся найти ошибку, глядя на код. Кроме того, у меня нет бесплатного пи с камерой, поэтому я не могу проверить ваш код. То есть вы имеете в виду, что когда «2» печатается на Pi, @chrisl

нет, нет, я просто использую arduino, в любом случае, моя главная проблема в том, что когда печатается 2, сервопривод останавливается., @TrialAndError


1 ответ


0

является кодом Arduino, выдающим ошибку, потому что вы инициализировали данные массива с длиной 1 (int data[1];), а в цикле for длина превышает выделенную длину строки : for (int i = 0; i < 2; i++) { данные[i] = Serial.read();

,

Как это сделать? что мой сервопривод не остановится, если я не закрою программу., @TrialAndError

@TrialAndError Пробовали ли вы писать int data[2]; вместо int data[1];? Это ваш первый шаг, так как это очевидная ошибка, @chrisl

Я понимаю. Спасибо., @TrialAndError