Управление коллекторным мотором
- Войдите на сайт для отправки комментариев
Втр, 07/02/2017 - 00:10
//управление мотором с индикацией (индикатор с общим анодом)
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 миллисекунд.
}
Ребята подскажите , где ошибка в скетче ? индикатор не работает как нужно. как его засинхронизировать с выходом ШИМ ?
Сам индикатор в порядке , подключён верно , запускал тест (перебор цифр в цикле , работает ) в скетче не получается заставить работать снхронно с кнопками (
а что вообще будет нормально работать с такими делеями)))
а где борьба с дребезгом кнопки ?
строчка 39 "антидребезг" ))
да вроде работает, только индикатор ведёт себя неадекватно
Не проверял Здесь скетч https://yadi.sk/d/WctzWY7T3DFDdf
Головной файл выкладываю
qwone , спасибо ! опробовал уже , ШИМ регулируется , индикатор при однократных нажатиях переходит сразу из 1 в 9(по циклу пребирает эти два значения) и обратно , (кнопка не имеет значения ), при удержании кнопки btn_plus идикатор переходит в циклический перебор символов (на ШИМ по осцилографу не влияет ) btn_minus при возвращении в 0 останавливает цикл .
поменял в строке 15 и 19 значение с 24-х на 17 , начал считать до 9-ти , но нужно что то делать с ШИМ ...
в общем пытаюсь разобратся )
немого изменил скетч , так работает , но
после цифры 9 счёт идёт дальше и переполняет регистр ...
в общем верхнее ограничение счёта нужно допилить , нижнее отлично работает
/*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); }qwon , огромное спасибо !!! немного подшаманил ваш скетч и всё заработало !))