Стробоскопирование с помощью осциллографа, лазера и камеры

Всем доброго времени суток, в работе с ардуино я новичок, но просмотрел множество уроков на ютубе. Перед мною стоит задача - по команде с осциллографа необходимо чтобы лазер испускал энергетический импульс, который бы нагревал исследуемый объект, лазер параллельно дает команду камере снимать изображение объекта. Но из-за высокой энергии весь импульс отснять не получиться, поэтому необходимо его принимать частями, чтобы камера с каждым новым импульсом от лазера снимала, к примеру, 1/10 от длительности самого импульса, а также постоянно сдвигала этот промежуток времени с целью отсканировать у нового следующего импульса следующую 1/10 часть. Так вот мною был написан следующий код:

int laser=11;
int camera=12;
int durationimp=1000;

#include "GyverTimers.h"

boolean flag = 0;
boolean imp; //наличие импульса
boolean laser_flag = 0;
boolean camera_flag = 0;
unsigned long timer;
unsigned int impnumber = 0; //порядковый номер импульса
unsigned int stepp = durationimp / 10;  //шаг, на который разбивается импульс

void setup() {
  pinMode(laser, OUTPUT);
  pinMode(camera, OUTPUT);
  pinMode(oscillographser, INPUT);
  Serial.begin(9600);
}

void loop() {
  imp = digitalRead(oscillographser);
  while (impnumber <= 10) {
    if (imp == 1 && flag == 0) { // можно добавить millis()-timer>длительностьимпульса
      flag = 1;
      laser_flag = !laser_flag;
      impnumber++;
      digitalWrite(laser; laser_flag);
      while (millis() - timer > impnumber * stepp && millis() - timer < (impnumber + 1)*stepp && camera_flag == 0 ) {
        camera_flag = !camera_flag;
        digitalWrite(camera; camera_flag);
        timer = millis();
      }
    }
  }
  if (imp == 0 && flag == 1) {
    flag = 0;
    laser_flag = !laser_flag;
    digitalWrite(laser; laser_flag);
  }

На что мне выдается ошибка:

sketch_oct19b:30:25: error: expected ‘)’ before ‘;’ token

sketch_oct19b:30:37: error: expected ‘;’ before ‘)’ token

sketch_oct19b:33:28: error: expected ‘)’ before ‘;’ token

sketch_oct19b:33:41: error: expected ‘;’ before ‘)’ token

sketch_oct19b:41:24: error: expected ‘)’ before ‘;’ token

sketch_oct19b:41:36: error: expected ‘;’ before ‘)’ token

sketch_oct19b:42:3: error: expected ‘}’ at end of input

exit status 1

expected ‘)’ before ‘;’ token

Подскажите, пожалуйста, как решить проблему

А как по английски будет слово “Пока” (в значении - “В то время как”, “до тех пор пока”)? И сравни с тем словом, что у тебя в 24 строке написано )))

Это сколько в секундах?

Главное в 30 строке написал правильно )))
А еще у петли нет закрывающейся скопки…

Что Вам непонятно в этом сообщении? В 25-ой (по Вашему коду в 24-ой) строке Вы используете функцию wlile, которая нигде не определена. Никто не знает что и куда Вы там влили, вот Вас и попросили определить её.

1 лайк

От 100 мкс до 100 мс

Спасибо за помощь, не заметил ._. со скобкой вопрос решаю. А по реализации кода есть какие-то советы/дополнения?

совет - исправить ошибки и попробовать скомпилировать снова

Этим и занимаюсь, спасибо)

а что за камера будет это дело снимать?

Monochrome Industrial Camera DMK 23UP1300

Отредактировал пост, подскажите, пожалуйста, почему выскакивает ошибка “expected ‘)’ before ‘;’ token”?

У тебя там даже номер строки есть, где что-то “expected”

Да, он жалуется на digitalWrite, но там стоит скобка перед ;

А после? А количество открывающих и закрывающих совпадает?

Насколько я могу судить - совпадает, строка 40, там вроде все хватает. Если коменчу эту строчку начинает жаловаться на 32.

digitalWrite(laser >>> ; <<< laser_flag);

Опщем, пока программирование не подтянешь, держись подальше от лазеров

1 лайк

Спасибо!

Да, классный совет, спасибо) Преисполнился познанием, удачи в жизни