Нужна помощь.

DiM3NT0R
Offline
Зарегистрирован: 12.08.2020
#include<AccelStepper.h>

#define PIN_PHOTO_SENSOR A0

 #define IN1 8

 #define IN2 9

 #define IN3 10

 #define IN4 11

AccelStepper s28BYJ48(8, IN1, IN3, IN2, IN4);
int timer;
int timer1;
 
void setup() {
  Serial.begin(9600);           
  
  s28BYJ48.setMaxSpeed(6000);                   //Настройки двигателя

  s28BYJ48.setAcceleration(1000);

  s28BYJ48.setSpeed(1000);


}
void loop() {
  int val = analogRead(PIN_PHOTO_SENSOR);           // Переменная, которя хранит уровень освещённости
  if (val > 500){                                   
    timer=millis();                                 // Запоминаем сремя, которое прошло с запуска
    for ( ; ; ){
      val = analogRead(PIN_PHOTO_SENSOR);
      if (millis() - timer > 3000){                  // Если 3 секунды нет света, то крутим моторчик
        s28BYJ48.moveTo(2000);
        s28BYJ48.run();}
      if (val < 500){                               // Если свет появился, то сбрасываем таймер
        timer1 = millis();
        break;        
        }
      }
   }
  if (val < 500){                                   
    timer1=millis();
    for ( ; ; ){
      val = analogRead(PIN_PHOTO_SENSOR);
      if (millis() - timer1 > 3000){
        s28BYJ48.moveTo(-2000);
        s28BYJ48.run();}
      if (val > 500){
        timer = millis();
        break;        
        }
      }
   }
     s28BYJ48.run();
}

Суть в том, что после где-то 5 нормальных циклов двигатель начинает крутится без учета таймера. Т.е. как только на резистор попадает или исчезает свет.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DiM3NT0R пишет:

Суть в том, что после где-то 5 нормальных циклов

Рискну предположить, что дело не 5 циклах, а в 33 секундах работы.

Приведите типы переменных timer и timer1 в соответствие с их использованием (т.е. если Вы присваиваете им millis(), то сделайте, чтобы их тип соответствовал тому, что присваивается).

Bruzzer
Offline
Зарегистрирован: 17.03.2020

DEL

DiM3NT0R
Offline
Зарегистрирован: 12.08.2020

Немного не понял. Мне стоит использовать long или вы говорите о чём-то другом?

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Не long, а похлеще.

DiM3NT0R
Offline
Зарегистрирован: 12.08.2020

sadman41 пишет:

Не long, а похлеще.

Например?

DiM3NT0R
Offline
Зарегистрирован: 12.08.2020

Попробую делить millis() на 1000 и тем самым записывать кол-во секунд, а не милисекунд.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DiM3NT0R пишет:

Немного не понял. Мне стоит использовать long или вы говорите о чём-то другом?

Вы в строка №№ 31, 38, 44 и 51 этим переменным присваиваете значение millis(). Так или нет?

Вам стоит использовать для них тот же самый тип, который возвращает millis.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

ТС, для таких как ты , люди старались описание команд/функций писали, а ты сразу на форум....
Читай:http://arduino.ru/Reference/Millis

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

sadman41 пишет:

Не long, а похлеще.

А вообще красиво звучит! Unsigned long - это как сгущенка, только сама банку открывает и в рот льётся. (Люблю сгущенку с детства, кстати, тогда она была вкуснее (да и я моложе на много лет)).