Управление коллекторным мотором

shurik2005a
Offline
Зарегистрирован: 05.02.2017
//управление мотором с индикацией (индикатор с общим анодом)
 int dataPin  = 11;   //Пин подключен к DS входу 74HC595
 int latchPin = 8;  //Пин подключен к ST_CP входу 74HC595
 int clockPin = 12;  //Пин подключен к SH_CP входу 74HC595
 int motor = 9;         //  Номер Pin к которому подключен мотор
 int Speed_motor =0;    //  Переменная в которой хранится уровень motor (От 0 до 254) 
 int buttonPlus=A0;     //  Номер Pin к которому подключена кнопка +
 int buttonMinus=A1;   //  Номер Pin к которому подключена кнопка -
 byte ind [10] = {0b00000011,0b10011111,0b00100101,0b00001101,0b10011001,0b01001001,0b01000001,0b00011111,0b00000001,0b00001001 };
    //матрица для индикатора
 
void setup() {
  //устанавливаем режим OUTPUT
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(motor, OUTPUT); // Порт 11 (motor) 
 } 

void loop() {
   if (digitalRead(buttonPlus) == HIGH ) { 
      Speed_motor   +=  24  ;// Увеличиваем значение переменной motor на 25 единиц.
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, LSBFIRST, ind[+1]);
      digitalWrite(latchPin, HIGH);
      delay(250);
   } 
  if (digitalRead(buttonMinus) == HIGH) { 
    Speed_motor -=24;                      //Уменьшаем значение переменной motor на 25 единиц.
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, ind[-1]);
    digitalWrite(latchPin, HIGH);
   delay(250);
  }   
   Speed_motor = constrain(Speed_motor,0, 254); // Эта функция контролирует, что бы переменная Speed_motor не стала больше 254 и меньше 0, если значение вылазит за границу то функция 0 или 254
 
  analogWrite(motor,Speed_motor);    // Устанавливаем состояние скорости для motor 
 
  delay(250);                         // Пауза 250 миллисекунд.  
                      
}

 

shurik2005a
Offline
Зарегистрирован: 05.02.2017

Ребята подскажите , где ошибка в скетче ? индикатор не работает как нужно. как его засинхронизировать с выходом ШИМ ? 

Сам индикатор в порядке , подключён верно , запускал тест (перебор цифр в цикле , работает ) в скетче не получается заставить работать снхронно с кнопками (

vvadim
Offline
Зарегистрирован: 23.05.2012

а что вообще будет нормально работать с такими делеями)))

а где борьба с дребезгом кнопки ?

shurik2005a
Offline
Зарегистрирован: 05.02.2017

строчка 39 "антидребезг" ))

да вроде работает, только индикатор ведёт себя неадекватно 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Не проверял Здесь скетч https://yadi.sk/d/WctzWY7T3DFDdf

Головной файл выкладываю

/*shurik2005a.ino https://yadi.sk/d/WctzWY7T3DFDdf
  #1 коллекторный мотор ШИМ ->9 (motor_pin)
  #2 индикатор 74HC595
              Data  -> 11 (Data_pin)
              Clock -> 12 (Clock_pin)
              Latch -> 8 (Latch_pin)
  #3 кнопки + -> A0 (btn_plus_pin)
            - -> A1 (btn_minus_pin)
*/
//#1 коллекторный мотор
const byte motor_pin = 9; 
int Speed = 0;   
int Speed_old = 0; 
void Speed_UP() {
  Speed += 24;
  if (Speed > 255) Speed = 255;
}
void Speed_DOWN() {
  Speed -= 24;
  if (Speed < 0) Speed = 0;
}
//#2 индикатор
#include "Cl_is_7x1_74HC595.h"
Cl_is_7x1_74HC595 Display;
const byte Data_pin  = 11;   //Пин подключен к DS входу 74HC595
const byte Clock_pin = 12;  //Пин подключен к SH_CP входу 74HC595
const byte Latch_pin = 8;  //Пин подключен к ST_CP входу 74HC595
byte aaa;
//#3 кнопки
#include "Cl_do_btn.h"
Cl_do_btn Btn_Plus, Btn_Minus;
const byte btn_plus_pin = A0;   //  Номер Pin к которому подключена кнопка +
const byte btn_minus_pin = A1; //  Номер Pin к которому подключена кнопка -
void setup() {
  //#1 коллекторный мотор
  Speed = 0;
  analogWrite(motor_pin, Speed_old = Speed);
  //#2 индикатор
  Display.setup(Data_pin, Clock_pin, Latch_pin);
  //#3 кнопки
  Btn_Plus.setup(btn_plus_pin);
  Btn_Minus.setup(btn_minus_pin);
}

void loop() {
  //#1 коллекторный мотор
  if (Speed_old != Speed) {
    analogWrite(motor_pin, Speed_old = Speed);
  }
  //#2 индикатор
  aaa = Speed_old % 16;
  Display.loop(&aaa);
  //#3 кнопки
  Btn_Plus.loop( & Speed_UP);
  Btn_Minus.loop( & Speed_DOWN);
}

 

shurik2005a
Offline
Зарегистрирован: 05.02.2017

qwone , спасибо ! опробовал уже , ШИМ регулируется , индикатор при однократных нажатиях переходит сразу из 1 в 9(по циклу пребирает эти два значения) и обратно , (кнопка не имеет значения ), при удержании кнопки btn_plus идикатор переходит в циклический перебор символов  (на ШИМ по осцилографу не влияет ) btn_minus при возвращении в 0 останавливает цикл . 

поменял в строке 15 и 19 значение с 24-х на 17 , начал считать до 9-ти , но нужно что то делать с ШИМ ... 

в общем пытаюсь разобратся )

shurik2005a
Offline
Зарегистрирован: 05.02.2017
/*shurik2005a.ino
  #1 коллекторный мотор ШИМ ->9 (motor_pin)
  #2 индикатор 74HC595
              Data  -> 11 (Data_pin)
              Clock -> 12 (Clock_pin)
              Latch -> 8 (Latch_pin)
  #3 кнопки + -> A0 (btn_plus_pin)
            - -> A1 (btn_minus_pin)
*/
//#1 коллекторный мотор
const byte motor_pin = 9; 
int Speed = 0; 
byte aaa=0;  
int Speed_old = 0; 
void Speed_UP() {
  Speed += 25;
    aaa +=1; 
  if (Speed > 255){ 
    Speed = 255;
    aaa<=9;
    }
}
void Speed_DOWN() {
  Speed -=25;
  aaa -=1; 
  if (Speed < 0)
  {Speed = 0;
  aaa=0;
  }
}
//#2 индикатор
#include "Cl_is_7x1_74HC595.h"
Cl_is_7x1_74HC595 Display;
const byte Data_pin  = 11;   //Пин подключен к DS входу 74HC595
const byte Clock_pin = 12;  //Пин подключен к SH_CP входу 74HC595
const byte Latch_pin = 8;  //Пин подключен к ST_CP входу 74HC595
 
//#3 кнопки
#include "Cl_do_btn.h"
Cl_do_btn Btn_Plus, Btn_Minus;
const byte btn_plus_pin = A0;   //  Номер Pin к которому подключена кнопка +
const byte btn_minus_pin = A1; //  Номер Pin к которому подключена кнопка -
void setup() {
  //#1 коллекторный мотор
  Speed = 0;
 aaa = 0;
  analogWrite(motor_pin, Speed_old = Speed);
  //#2 индикатор
  Display.setup(Data_pin, Clock_pin, Latch_pin);
  //#3 кнопки
  Btn_Plus.setup(btn_plus_pin);
  Btn_Minus.setup(btn_minus_pin);
}
 
void loop() {
  //#1 коллекторный мотор
  if (Speed_old != Speed) {
    analogWrite(motor_pin, Speed_old = Speed);
  }
  //#2 индикатор
//  aaa = Speed_old %16;
  Display.loop(&aaa);
  //#3 кнопки
  Btn_Plus.loop( & Speed_UP);
  Btn_Minus.loop( & Speed_DOWN);
}

 

 

shurik2005a
Offline
Зарегистрирован: 05.02.2017

немого изменил скетч , так работает , но 

после цифры 9 счёт идёт дальше и переполняет регистр ... 

в общем верхнее ограничение счёта нужно допилить , нижнее отлично работает 

shurik2005a
Offline
Зарегистрирован: 05.02.2017
/*shurik2005a.ino
  #1 коллекторный мотор ШИМ ->9 (motor_pin)
  #2 индикатор 74HC595
              Data  -> 11 (Data_pin)
              Clock -> 12 (Clock_pin)
              Latch -> 8 (Latch_pin)
  #3 кнопки + -> A0 (btn_plus_pin)
            - -> A1 (btn_minus_pin)
*/
//#1 коллекторный мотор
const byte motor_pin = 9; 
int Speed = 0; 
byte aaa=0;  
int Speed_old = 0; 
void Speed_UP() {
  Speed += 25;
    aaa +=1; 
  if (Speed > 255){ 
    Speed = 255;
    aaa =9;
    }
}
void Speed_DOWN() {
  Speed -=25;
  aaa -=1; 
  if (Speed < 0)
  {Speed = 0;
  aaa=0;
  }
}
//#2 индикатор
#include "Cl_is_7x1_74HC595.h"
Cl_is_7x1_74HC595 Display;
const byte Data_pin  = 11;   //Пин подключен к DS входу 74HC595
const byte Clock_pin = 12;  //Пин подключен к SH_CP входу 74HC595
const byte Latch_pin = 8;  //Пин подключен к ST_CP входу 74HC595

//#3 кнопки
#include "Cl_do_btn.h"
Cl_do_btn Btn_Plus, Btn_Minus;
const byte btn_plus_pin = A0;   //  Номер Pin к которому подключена кнопка +
const byte btn_minus_pin = A1; //  Номер Pin к которому подключена кнопка -
void setup() {
  //#1 коллекторный мотор
  Speed = 0;
 aaa = 0;
  analogWrite(motor_pin, Speed_old = Speed);
  //#2 индикатор
  Display.setup(Data_pin, Clock_pin, Latch_pin);
  //#3 кнопки
  Btn_Plus.setup(btn_plus_pin);
  Btn_Minus.setup(btn_minus_pin);
}

void loop() {
  //#1 коллекторный мотор
  if (Speed_old != Speed) {
    analogWrite(motor_pin, Speed_old = Speed);
  }
  //#2 индикатор
//  aaa = Speed_old %16;
  Display.loop(&aaa);
  //#3 кнопки
  Btn_Plus.loop( & Speed_UP);
  Btn_Minus.loop( & Speed_DOWN);
}

 

shurik2005a
Offline
Зарегистрирован: 05.02.2017

qwon , огромное спасибо !!! немного подшаманил ваш скетч и всё заработало !))