#define POT1 A1 //Пин A1 подключеие потенциометра
#define POT A0 //Пин A0 подключеие датчика углового положения
const uint8_t DIR = 11; //Пин 11 направление вращения
const uint8_t STEP = 12;//Пин 12 импульсов для шагового двигателя
const uint8_t ENA = 13; //Пин 13 разрешение вращения
int b1 = 10;//пин 10 - подключение кнопки пуск-зажим
int b2 = 9;//пин 9 - подключение кнопки стоп-разжим
int b3 = 8;//пин 8 - подключение кнопки пуск- сварки
int b4 = 7;//Пин 7 - подключение тумблера левая/правая стойка
int led1 = 5;//пин 5 - подключение опт.реле зажим - разжим
int led2 = 4;//пин 4 - подключение опт.реле подвод горелок
int led3 = 3;//пин 3 - подключение опт.реле сварка
int led4 = 2;//пин 2 - подключение опт.реле сварка
int knopka=0;
int sensorValue; //Значения с датчика
int sensorValue1; //Значения с потенциометра
int beginning = 0;//Начльное положение двигателя
int n_svarka = 205; // Число шагов сварки
//Логический флаг для рабочего режима
bool flag = 0;
uint32_t t;
void setup() {
Serial.begin(115200);
pinMode(POT1, INPUT); // Конфигурируем вывод Arduino как вход
pinMode(POT, INPUT); // Конфигурируем вывод Arduino как вход.
pinMode(DIR, OUTPUT); // Конфигурируем вывод Arduino как выход.
pinMode(STEP, OUTPUT); // Конфигурируем вывод Arduino как выход.
pinMode(ENA, OUTPUT); // Конфигурируем вывод Arduino как выход.
pinMode(led1, OUTPUT); // Конфигурируем вывод Arduino как выход.
pinMode(led2, OUTPUT); // Конфигурируем вывод Arduino как выход.
pinMode(led3, OUTPUT); // Конфигурируем вывод Arduino как выход.
pinMode(led4, OUTPUT); // Конфигурируем вывод Arduino как выход.
pinMode(b1, INPUT); // Конфигурируем вывод Arduino как вход.
pinMode(b2, INPUT); // Конфигурируем вывод Arduino как вход.
pinMode(b3, INPUT); // Конфигурируем вывод Arduino как вход.
digitalWrite(led1, HIGH);// установка на выходе высокого уровня т.к. реле включается нулём
digitalWrite(led2, HIGH);// установка на выходе высокого уровня т.к. реле включается нулём
digitalWrite(led3, HIGH);// установка на выходе высокого уровня т.к. реле включается нулём
digitalWrite(led4, HIGH);// установка на выходе высокого уровня т.к. реле включается нулём
digitalWrite(DIR, LOW); // Устанавливаем начальные уровни на выходе.
digitalWrite(STEP, LOW); // Устанавливаем начальные уровни на выходе.
digitalWrite(ENA, HIGH); //Выключаем мотор, чтобы не грелся
Serial.println("Start ok!");
}
void loop() {
flag = 0;
if (flag == 0){
if (digitalRead(b1) == 0){
digitalWrite(led1, LOW);
}
if (digitalRead(b2) == 1)
{
digitalWrite(led1, HIGH);
}
if (digitalRead(b4) == 0){
beginning = 100; //Начало
}
else
{
beginning = 0;
}
int sensorValue = analogRead(POT); //Получение данных от датчика
sensorValue = map(sensorValue, 0, 1023, 0, 200);
Serial.println(sensorValue);
int steps = sensorValue - beginning; //Расчёт шагов для поворота двигателя
if (steps >= 0)digitalWrite(DIR,HIGH);
else digitalWrite(DIR,LOW);
if (abs(steps) > 0 && abs(steps) < 4){
digitalWrite(ENA, HIGH);}
else
for(int i = 0; i < abs(steps); i++)
{
digitalWrite(ENA , LOW);
digitalWrite(STEP, HIGH);
delayMicroseconds(50);
digitalWrite(STEP, LOW);
delayMicroseconds(50);
}
}
{digitalWrite(ENA, 1);}
if (digitalRead(b3)==0&&knopka==0)
{
delay(100);
knopka++;
digitalWrite(led2, LOW);
delay(2000);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay(2000);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
}
if (digitalRead(b3)==LOW&&knopka==1)
{
delay(100);
knopka--;
flag = 1;
if (flag){
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(ENA, LOW);
digitalWrite(DIR, LOW);
for(int i = 0; i < n_svarka; i++)
{
uint32_t t = analogRead(POT1); //Получение данных от задатчика
t = map(t, 0, 1023, 1000, 100);
digitalWrite(STEP, HIGH);
delayMicroseconds(t);
digitalWrite(STEP, LOW);
delayMicroseconds(t);
}
flag = 0;
digitalWrite(STEP, LOW);
digitalWrite(ENA, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led2, HIGH);
}
if (digitalRead(b3)==HIGH&&knopka==0){
knopka=0;
}
}
}