Помогите разобраться с режимами манипулятора
- Войдите на сайт для отправки комментариев
Втр, 19/04/2016 - 17:20
#include <Servo.h>
int joyX=5;
int joyY=4;
int joyU=3;
int joyI=1;
int joyM=0;
int angl=90;
int angl2=90 ;
int angl3=90 ;
int angl4=90 ;
int angl5=90 ;
int pos1 = 0;
int pos2 = 0;
int pos3 = 90;
int pos4 = 90;
int ButPin = 7; // Подключаем кнопку к выходу 10
int flag = 0; // флаг состояния
int flag1 = 0;
int regim = 0; // Переключалка
Servo myservo1;
Servo myservo2;
Servo myservo3;
Servo myservo4;
Servo myservo5;
int ButPin1 = 5;
void setup()
{
myservo1.attach(9);
myservo2.attach(10);
myservo3.attach(6);
myservo4.attach(12);
myservo5.attach(11);
pinMode(joyX,INPUT);
pinMode(joyY,INPUT);
pinMode(joyU,INPUT);
pinMode(joyI,INPUT);
pinMode(joyM,INPUT);
Serial.begin(19200);
}
void loop()
{
if(digitalRead(ButPin) == HIGH && flag == 0)
{
regim ++;
flag = 1;
if(regim > 1)
{
regim = 0;
}
}
if(digitalRead(ButPin) == LOW && flag == 1)
{
flag = 0;
}
// ======= Вполняем задачу при выборе режима =======
// РЕЖИМ 0: OFF
if(regim == 0)
{
int val = (analogRead(joyX)/64)-8;
if (val > 0) {
angl=angl+abs(val);
}
else {
if (val < 0) {
angl=angl-abs(val);}
}
int val1 = (analogRead(joyY)/64)-8;
if (val1 > 0) {
angl2=angl2+abs(val1);
}
else {
if (val1 < 0) {
angl2=angl2-abs(val1);}
}
int val2 = (analogRead(joyU)/64)-8;
if (val2 > 0) {
angl3=angl3+abs(val2);
}
else {
if (val2 < 0) {
angl3=angl3-abs(val2);}
}
int val3 = (analogRead(joyI)/64)-8;
if (val3 > 0) {
angl4=angl4+abs(val3);
}
else {
if (val3 < 0) {
angl4=angl4-abs(val3);}
}
int val4 = (analogRead(joyM)/64)-8;
if (val4 > 0) {
angl5=angl5+abs(val4);
}
else {
if (val4 < 0) {
angl5=angl5-abs(val4);}
}
if (angl < 0) angl = 0;
if (angl > 180) angl = 180;
if (angl2 < 0) angl2 = 0;
if (angl2 > 180) angl2 = 180;
if (angl3 < 0) angl3 = 0;
if (angl3 > 180) angl3 = 180;
if (angl4 < 0) angl4 = 0;
if (angl4 > 180) angl4 = 180;
if (angl5 < 0) angl5 = 0;
if (angl5 > 180) angl5 = 180;
Serial.print("Power: ");
Serial.println(val);
Serial.println(val1);
Serial.println(val2);
Serial.println(val3);
Serial.println(val4);
Serial.print("Angle: ");
Serial.println(angl);
Serial.println(angl2);
Serial.println(angl3);
Serial.println(angl4);
Serial.println(angl5);
myservo1.write(angl);
myservo2.write(angl2);
myservo3.write(angl3);
myservo4.write(angl4);
myservo5.write(angl5);
int spd = 200;
if (val != 0) {
spd = 700/abs(val);
}
if (val1 != 0) {
spd = 700/abs(val1);
}
if (val2 != 0) {
spd = 700/abs(val2);
}
if (val3 != 0) {
spd = 700/abs(val3);
}
if (val4 != 0) {
spd = 700/abs(val4);
}
Serial.print("Speed: ");
Serial.println(spd);
Serial.println("-----------");
delay(spd);
}
// РЕЖИМ 1: R
if(regim == 1)
{
for (pos1 = 0; pos1 <= 180; pos1 += 1) {
myservo1.write(pos1);
delay(20);
}
delay(1000);
for (pos2 = 90; pos2 >= 30; pos2 -= 1) {
myservo2.write(pos2);
delay(25);
}
delay(1000);
for (pos4 = 90; pos4 >= 20; pos4 -= 1) {
myservo4.write(pos4);
delay(25);
}
delay(100);
for (pos3 = 60; pos3 >= 50; pos3 -= 1) {
myservo3.write(pos3);
delay(25);
}
delay(1000);
for (pos4 = 20; pos4 <= 120; pos4 += 1) {
myservo4.write(pos4);
delay(25);
}
delay(100);
for (pos3 = 50; pos3 <= 100; pos3 += 1) {
myservo3.write(pos3);
delay(25);
}
delay(1000);
for (pos2 = 30; pos2 <= 90; pos2 += 1) {
myservo2.write(pos2);
delay(40);
}
delay(1000);
for (pos1 = 180; pos1 >= 0; pos1 -= 1) {
myservo1.write(pos1);
delay(20);
}
delay(1000);
for (pos2 = 90; pos2 >= 30; pos2 -= 1) {
myservo2.write(pos2);
delay(25);
}
delay(1000);
for (pos3 = 60; pos3 >= 50; pos3 -= 1) {
myservo3.write(pos3);
delay(25);
}
delay(1000);
for (pos4 = 90; pos4 >= 20; pos4 -= 1) {
myservo4.write(pos4);
delay(25);
}
delay(100);
for (pos3 = 50; pos3 <= 100; pos3 += 1) {
myservo3.write(pos3);
delay(25);
}
delay(1000);
for (pos4 = 20; pos4 <= 90; pos4 += 1) {
myservo4.write(pos4);
delay(10);
}
for (pos2 = 30; pos2 <= 90; pos2 += 1) {
myservo2.write(pos2);
delay(40);
}
delay(1000);
}
}
Помогите разобраться с режимами работы робота манипулятора. Сначала отрабатывается ручной режим от джойстиков, далее при нажатии на кнопку отрабатывается автоматический режим, если нажать на кнопку ещё раз, манипулятор должен перейти в ручной режим, но этого не происходит, он так и остаётся в автоматическом режиме. Что не так, почему он не переходит в ручное управление?
Я бы это не писал. Так как по умолчанию пины и так выходы и в подобной декларации не нуждаются
pinMode(joyX,INPUT);
pinMode(joyY,INPUT);
pinMode(joyU,INPUT);
pinMode(joyI,INPUT);
pinMode(joyM,INPUT);
Сначала исправите первое сообщение: код надо постить, нажав кнопочку с красными скобочками над окошком написания сообщения. Разбираться в сплошном тексте мало кому приятно... :)
Даже при нескольких нажатиях не происходит переключения?
в какой то момент, если быстро нажимать кнопку происходит переключение
Значит дело не в стабильности кнопки.
В этом уроке чел пишет и объясняет фукнцию для стабилизации кнопки
https://www.youtube.com/watch?v=LkR8rxzAo_A&index=3&list=PL944BA86E715C5FEE