Шаговый двигатель и Serial.print

Oleg_Go
Offline
Зарегистрирован: 09.03.2019

У меня почему-то шаговый двигатель и Serial.print, работать вместе не хотят, а точнее когда есть  Serial.print то двигатель не работает. Как это пофиксить?

Двигатель: 28BYJ-48.
Драйвер: ULN2003.
Библиотека: #include <CustomStepper.h>.

mixail844
Offline
Зарегистрирован: 30.04.2012
этические правила форума гласят : 
 
 
1. зайдите с компа.
2. разместите ВАШУ схему подхключения ( включая модели или ссылки одтуда покупали модули)
3. выложите ВАШ код с которым пытаетесь работать с номерами строк(еще лучше минимальный код в котором проявляеться проблема) , так что бы любой желающий мог его у себя скомпилировать и проверить
4. ссылкку откуда скачали используемую библиотеку (CustomStepper.h ниочем не говорит)
Oleg_Go
Offline
Зарегистрирован: 09.03.2019

mixail844 пишет:

этические правила форума гласят : 
 
 
1. зайдите с компа.
2. разместите ВАШУ схему подхключения ( включая модели или ссылки одтуда покупали модули)
3. выложите ВАШ код с которым пытаетесь работать с номерами строк(еще лучше минимальный код в котором проявляеться проблема) , так что бы любой желающий мог его у себя скомпилировать и проверить
4. ссылкку откуда скачали используемую библиотеку (CustomStepper.h ниочем не говорит)

 


#include <math.h>
#include <CustomStepper.h> 
#include "microDS3231.h"

CustomStepper stepper(8, 9, 10, 11); 
MicroDS3231 rtc;
DateTime NowDateTime;

#define M_PI 3.14159265358979323846 

int Day = 1, Date = 1, Month = 1, Year = 2021, Hour = 0, Minute = 0;
float timezone = 3, dolgota = 23.89;
float HRA = 1, HRA_old = 0,  LST = 0, time_correction = 0, LSTM = 0, EoT = 0, B = 0;
void setup() {
  Serial.begin(9600);
  stepper.setRPM(10);                 // Устанавливаем количество оборотов в минуту
  stepper.setSPR(4075.7728395);       // Устанавливаем колочество шагов на полный оборот. Максимальное значение 4075.7728395
                

  // put your setup code here, to run once:
    
}

void GetDateTime(){
   int i = 0;
   NowDateTime = rtc.getTime();
   Date = NowDateTime.date;
   Month = NowDateTime.month;
   Year = NowDateTime.year;
   Hour = NowDateTime.hour;
   Minute = NowDateTime.minute;

   if (Year % 4==0) i = 1;     //если високосный год то прибавляем 1
   switch (Month) 
    {   
        case 1:
            Day = Date;
            break;
        case 2:
            Day = 31 + Date;
            break;
        case 3:
            Day = 59 + Date + i;
            break;
        case 4:
            Day = 90 + Date + i;
            break;
        case 5:
            Day = 120 + Date + i;
            break;
        case 6:
            Day = 151 + Date + i;
            break;
        case 7:
            Day = 181 + Date + i;
            break; 
        case 8:
            Day = 212 + Date + i;
            break;   
        case 9:
            Day = 243 + Date + i;
            break;
        case 10:
            Day = 273 + Date + i;
            break;    
        case 11:
            Day = 304 + Date + i;
            break;   
        case 12:
            Day = 334 + Date + i;
            break;           
    }  
  Serial.println(); 
  Serial.print(Day); 
  Serial.print(" | ");
  Serial.print(Date); 
  Serial.print(".");
  Serial.print(Month); 
  Serial.print(".");
  Serial.print(Year); 
  Serial.print(" ");
  Serial.print(Hour); 
  Serial.print(":");
  Serial.println(Minute); 
}

void Deduction(){
  GetDateTime();
  HRA_old = HRA;
  B = 360.0 / 365.0 * (Date - 81) * M_PI / 180;
  EoT = 9.87 * sin(2 * B) - 7.53 * cos(B) - 1.5 * sin(B);
  LSTM = 15 * timezone;
  time_correction = EoT + 4 * (dolgota - LSTM);
  LST = Hour + time_correction / 60 + Minute / 60;
  HRA = 15 * LST;
   HRA = abs((int)round(HRA));
  Serial.print("HRA = ");
  Serial.println(HRA);
  Serial.print("HRA_old = ");
  Serial.println(HRA_old);

}

void loop() {
  //delay(1000);
  if (stepper.isDone())  
  {
  
    stepper.setDirection(CCW);        
    stepper.rotateDegrees(4);                
  }
    stepper.run();                      
Deduction();

}

 

Скачивал тут: https://robotchip.ru/obzor-28byj-48-s-drayverom-uln2003/

 

mixail844
Offline
Зарегистрирован: 30.04.2012
что в вашем понимании "не работает?"  a как должно ?
не крутиться вообще или крутиться иногда ,или крутиться всегда но не на правильные углы?
Порутчик
Offline
Зарегистрирован: 25.05.2021

Что бы нормально работал шаговый двигатель необходимо, что бы stepper.run(); вызывался через равные промежутки времени.
Поэтому одним из простых решений будет вынести обработку движения шаговика в прерывание. НО тут сама библиотека должна быть нормально спроектирована, т.к. в прерываниях millis() и прочие временные функции не работают (и ещё куча ограничений).