Устройство подачи проволоки для Tig

dies

✩✩✩✩✩✩✩
21 Апр 2024
1
0
Здравствуйте, меня зовут Евгений, хочу создать устройство подачи проволоки для аргоно-дуговой сварки, из старого подающего устройства от полуавтомата. Снял со старого устройства электро мотор постоянного тока, принес его домой и начал свой путь ардуинщика.
Задумка следующая, мотор должен крутится в нескольких режимах. Их будет 3 или 4, но для старта достаточно 2-х, о них пойдет речь дальше.
Всего будет две кнопки, одна на подающем устройстве с проволокой(она будет выбирать режим работы мотора) , вторая на аргоновой горелке что б подавать проволоку когда нужно в соответствии с выбранным режимом. Еще на самом устройстве будет потенциометр, который будет давать ШИМ на мотор.
1. Режим 2-х тактный(кнопку на горелке нажал - мотор крутится с заданной скоростью, отпустил - не крутится).
2. Режим 4-х тактный (кнопку на горелке нажал отпусти - мотор крутится, нажал отпустил - не крутится, в процессе нужно иметь возможность регулировки вращения мотором).
Выбор режима хотел сделать следующим образом, кнопка на подающем устройстве, одиночное нажатие 2Т режим, двойное нажатие 4Т режим.(и тройное и четверное нажатие, следующие режимы, но пока без них...)
По отдельности режимы работают, но когда я хочу их объединить в одну программу ничего не работает, мне кажется из за опроса кнопок. когда кнопка выбора программы нажата, кнопка на горелке не работает. Как сделать так чтоб работала?
Подскажите ... или какой нибудь пример с подобной работой мотора может есть.

C++:
#define BTN_PIN 4   //кнопка на горелке
#define BTN_PIN 3   //кнопка на подающем устройстве
#include <GyverMotor.h>
#include <GyverButton.h>

GButton butt1(3);
GButton butt2(4);
int value = 0;
GMotor motor(DRIVER2WIRE, 2, 9); 
void setup() {
  Serial.begin(9600);
  attachInterrupt(1, isr, CHANGE);
  butt1.setDebounce(90);        // настройка антидребезга (по умолчанию 80 мс)
  butt1.setTimeout(300);        // настройка таймаута на удержание (по умолчанию 500 мс)
  butt1.setTickMode(AUTO);
  butt2.setDebounce(90);        // настройка антидребезга (по умолчанию 80 мс)
  butt2.setTimeout(300);        // настройка таймаута на удержание (по умолчанию 500 мс)
  butt2.setTickMode(AUTO);
  // Пины D9 и D10 - 15.6 кГц 10bit
  TCCR1A = 0b00000011;  // 10bit
  TCCR1B = 0b00001001;  // x1 fast pwm
  motor.setResolution(10);
  motor.setMode(AUTO);
  motor.setMinDuty(0);
}
void isr() {
  butt1.tick();
  butt2.tick();
}
void loop() {
  butt1.tick();
  butt2.tick();
  if (butt1.hasClicks()){
    Serial.println(butt1.getClicks());
    switch (butt1.getClicks()){              //выбор режима
     case 0:
     break;
     case 1:                                                          // режим 2-х тактный
        if (butt2.isHold()) {
        unsigned int speed = map(analogRead(0), 0, 1023, 0, 1023);   
        motor.setSpeed(speed);
        Serial.print("Holding ");
        }
        if (butt2.isRelease()){
        motor.setSpeed(STOP);
        Serial.println("Release");
        }
        break;
        
    case 2:                                                          // режим 4-х тактный   
      if (butt2.isSingle()){
      Serial.println("Single");
      unsigned int speed = map(analogRead(0), 0, 1023, 0, 1023);
      motor.setSpeed(speed);
    }
      if (butt2.isRelease()){
      Serial.println("Release");
      motor.setSpeed(STOP);
    break;
 }
 }
  }
}
 

Bruzzer

★★★✩✩✩✩
23 Май 2020
340
105
@dies,
При использовании библиотек подобных GyverButton часто приходится смотреть код в библиотека, чтобы понять, как она работает.
butt1.hasClicks() могла бы работать по разным алгоритмам
  • вернуть число кликов только при первом вызове
  • возвращать число кликов при любом количестве вызовов ДО следующего tick
  • возвращать число кликов при любом количестве вызовов пока пауза между кликами не превысит Т
  • ......

Я так понял, что по butt1.getClicks() вы хотите задавать режим работы (на продолжительный период). Тогда по butt1.getClicks() должно устанавливаться значение переменной "номер_режима". Например 1 клик - 1 режим; 2 клика - 2 режим; 3 клика - 3 режим; причем какой то их них соответствует состоянию "Выключено". Или "Выключено" по удержанию, или по другим условиям.

Два одинаковых BTN_PIN хотя и не используются, но лучше удалить, чтобы не вызывало вопросов.
#define BTN_PIN 4 //кнопка на горелке
#define BTN_PIN 3 //кнопка на подающем устройстве