vladzdsim писал(а): ↑Вт апр 06, 2021 8:21 pm
Делать один пульт или лучше сразу два, на каждую половину отдельно, чтобы избежать лишних соединений и длины проводов?
Тут нужно решить самому исходя из того, как удобно будет пользоваться.
Огромный недостаток пульта на ардуино - это множество выходящих из него проводов.
Это шлейф из +5V, -5V, управляющий сигнал на каждую стрелку, плюс провод в розетку для блока питания 5v.
Хорошо решается с помощью гребёнки, типа такого:
вот, в компе обнаружил скетч для управления 14-тью сервоприводами стрелок и 28-мью светодиодами положения для Arduino Mega (но не уверен, что это последний, закаченный в мою Мегу
, бывалые поправят):
____________________________________________________________________________
//подключаемые библиотеки
#include <EEPROM.h>
#include <Bounce2.h>
#include <Servo.h>
//переменные конфигурации
int servoAngles[][2]={{0,90},{0,90},{0,90},{0,90},{0,90},{0,90},{0,90},{0,90},{0,90},{0,90},{0,90},{0,90},{0,90},{0,90}}; // углы отклонения сервоприводов {"прямо", "в бок"}
byte servoReverce[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //реверс углов сервоприводов (если в положении "прямо" угол задан во втором элементе предыдущего массива, то поставить 1.)
int servoSpeed[]={6,6,6,6,6,6,6,6,6,6,6,6,6,6}; //скорость вращения сервопривода. указано количество миллисекунд поворота на 1 градус
//переменные определяюще ножки подключения
int normalLed[]={A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13}; //ножки подключения светодиода показывающего прямое положение стрелки
int routeLed[]={38,39,40,41,42,43,45,46,47,48,50,51,52,53}; //ножки подключения светодиода показывающего положение стрелки "в бок"
int servoPins[]={2,3,4,5,6,7,8,9,10,11,12,13,44,49}; //ножки подключения провода управления сервопривода
int buttonPins[]={22,23,24,25,26,27,28,29,30,31,32,33,34,35}; //ножки подключения кнопок переключения
//переменные используемые при повороте сервопривода
byte CurrentPosition[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //текущее положение сервопривода. 0=прямо, 1=в бок.
int currentAngle[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};//текущий угол поворота сервопривода
unsigned long nextTime[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};// время следующего поворота на 1 градус
unsigned long currentTime; //текущее время
byte dir;// направление поворота сервопривода
____________________________________________________________________________________