Контроллер аттракциона вейкбординга
- Войдите на сайт для отправки комментариев
Чт, 07/03/2019 - 18:46
Доброго всем времени суток!
В програмировании только начинаю, по примерах чото както получается и то не всегда), примера подобного не отыскал, потому прошу помощи!
Имеется: 3х-фазный движок, частотник, сейчас ручное управление.
Нужно: на контроллере сделать автоматическое вращение двигателя в заданных областях с помощу энкодера (увы концевики не подходяк). Например от 0 до 100 - вращение по часовой; и обратно от 100 к 0 - вращение против часовой; а также повторения данного цикла сколько то раз.
Ошиблись разделом, нужно - в "Ищу исполнителя".
Когда будете размещать, постарайтесь сформулировать задачу как можно подробнее и желательно сразу указать бюджет.
Ошиблись разделом, нужно - в "Ищу исполнителя".
Вот какраз и не ошибся, хочу научится и сделать сам, прошу всего то подсказать правильное направление или пример подобного проекта.
Без "исполнителей" делал например управление релюхами из компа самонаписанной прогамкой в процесинге.
Для прояснения вопросов перемещаю в песочницу. Прочитайте начало первой темы в разделе.
Вот что имеется сейчас, движок доезжает до установленной точки и удерживает её.
#define CLK 6 #define DT 5 #define SW 4 #include "GyverEncoder.h" Encoder enc1(CLK, DT, SW); int value = 0; int Rotor = 10; void setup() { Serial.begin(9600); pinMode(11, OUTPUT); pinMode(12, OUTPUT); enc1.setType(TYPE1); // тип энкодера TYPE1 одношаговый, TYPE2 двухшаговый. Если ваш энкодер работает странно, смените тип } void loop() { // обязательная функция отработки. Должна постоянно опрашиваться enc1.tick(); if (enc1.isRight()) value++; // если был поворот направо, увеличиваем на 1 if (enc1.isLeft()) value--; // если был поворот налево, уменьшаем на 1 if (enc1.isRightH()) value += 5; // если было удержание + поворот направо, увеличиваем на 5 if (enc1.isLeftH()) value -= 5; // если было удержание + поворот налево, уменьшаем на 5 if (enc1.isTurn()) { // если был совершён поворот (индикатор поворота в любую сторону) Serial.println(value); // выводим значение при повороте } if (value < Rotor) { digitalWrite(12, HIGH); digitalWrite(11, LOW); } else if (value > Rotor) { digitalWrite(12, LOW); digitalWrite(11, HIGH); } else if( (abs(value) - abs( Rotor)) == 0) { digitalWrite(12, LOW); digitalWrite(11, LOW); } }Для прояснения вопросов перемещаю в песочницу. Прочитайте начало первой темы в разделе.
Да вероятно погорячился сунувшысь в раздел программирование, извиняюсь.
Ошиблись разделом, нужно - в "Ищу исполнителя".
Вот какраз и не ошибся, хочу научится и сделать сам, прошу всего то подсказать правильное направление или пример подобного проекта.
- то, что я напсал в сообщении №1, - единственно возможная реакция на Ваш исходный пост,
- Вы напрасно проигнорировали мой намек на то, что Вам необходимо внятно изложить задачу: именно с этого нужно начинать люой проект. А у Вас, похоже, уже на этом этапе проблемы.
Пока получилось вот так, после нажатия вертим движком пока энкоднр не отсчитает до 100, потом возврат в 0. Код может и кривой, но хотяб начал работать. Дальше буду подключать экран и делать ввод значений с клавиш.
Прошу при наличии грубых ошибок в коде подсказать. Буду дальше творить, может кому пригодятся результати.
#define CLK 6 #define DT 5 #define SW 4 #include "GyverEncoder.h" Encoder enc1(CLK, DT, SW); int value = 0; int Rotor = 100; int Rotor0 = 0; int encoder; int var=0; void setup() { Serial.begin(9600); pinMode(11, OUTPUT); pinMode(12, OUTPUT); enc1.setType(TYPE1); // тип энкодера TYPE1 одношаговый, TYPE2 двухшаговый. Если ваш энкодер работает странно, смените тип } void loop() { // обязательная функция отработки. Должна постоянно опрашиваться enc1.tick(); if (enc1.isRight()) value++; // если был поворот направо, увеличиваем на 1 if (enc1.isLeft()) value--; // если был поворот налево, уменьшаем на 1 if (enc1.isRightH()) value += 5; // если было удержание + поворот направо, увеличиваем на 5 if (enc1.isLeftH()) value -= 5; // если было удержание + поворот налево, уменьшаем на 5 if (enc1.isTurn()) { // если был совершён поворот (индикатор поворота в любую сторону) Serial.println(value); // выводим значение при повороте } if (enc1.isPress()) { var=1; Serial.println(var); } int encoder = value; while (var==1){ if (encoder < Rotor) { digitalWrite(12, HIGH); digitalWrite(11, LOW); } else if (value > Rotor) { digitalWrite(12, LOW); digitalWrite(11, HIGH); } else if( (abs(value) - abs( Rotor)) == 0) { digitalWrite(12, LOW); digitalWrite(11, LOW); var++; delay(1000); } break; } while (var==2){ if (encoder > Rotor0) { digitalWrite(11, HIGH); digitalWrite(12, LOW); } else if (value > Rotor0) { digitalWrite(11, LOW); digitalWrite(12, HIGH); } else if( (abs(value) - abs( Rotor0)) == 0) { digitalWrite(11, LOW); digitalWrite(12, LOW); var=0; delay(1000); } break; } }схема?