Я достаточно недавно начал заниматься программированием Arduino, и попробовав все простые примеры решил сделать что то свое. Мой взгляд остановился на манипулятора. Под рукой оказалась всего 4 сервы SG90. Поэтому движения у нас следующие: поднимаем, опускаем, поворот лево/право и соответственно захват и отпустить.
Написал вот такой скетч (захват клешни пока не написан):
- Код: Выделить всё • Развернуть
#include <Servo.h>
Servo ser1; // серва 1
Servo ser2; // серва 2
Servo ser3; // серва 3
Servo ser4; // серва 4
byte pos = 0; // позиция сервы 1
byte pos2 = 0; // позиция сервы 2
byte pos3 = 0; // позиция сервы 3
byte pos4 = 0; // позиция сервы 4
const byte buttonPin1 = 8; // порт для кнопки вверх серва 1
const byte buttonPin = 12; // порт для кнопки вниз серва 1
const byte buttonPin2 = 7; // порт кнопки вправо серва 2
const byte buttonPin3 = 4; // порт кнопки влево серва 2
const byte buttonPin4 = 3; // порт кнопки захват сервы 3,4
const byte buttonPin5 = 2; // порт кнопки отпустить сервы 3,4
byte buttonState; // кнопка 1 серва 1 (вниз)
byte buttonState1; // кнопка 2 серва 1 (вверх)
byte buttonState2; // кнопка 3 серва 2 (вправо)
byte buttonState3; // кнопка 4 серва 2 (влево)
byte buttonState4; // кнопка 5 серва 3,4 захват
byte buttonState5; // кнопка 6 серва 3,4 отпустить
void setup ()
{
pinMode(buttonPin, INPUT);
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
pinMode(buttonPin4, INPUT);
pinMode(buttonPin5, INPUT);
}
void loop ()
{
buttonState = digitalRead (buttonPin);
buttonState1 = digitalRead (buttonPin1);
buttonState2 = digitalRead (buttonPin2);
buttonState3 = digitalRead (buttonPin3);
buttonState4 = digitalRead (buttonPin4);
buttonState5 = digitalRead (buttonPin5);
if (buttonState == HIGH) // опускаем
for(pos = 1; pos < 80; pos += 1)
{
ser1.attach(9);
ser1.write(pos);
delay(20);
ser1.detach();
break;
}
if (buttonState1 == HIGH) // поднимаем
for(pos = 80; pos > 1; pos-=1)
{
ser1.attach(9);
ser1.write(pos);
delay(20);
ser1.detach();
break;
}
if (buttonState2 == HIGH) // поворот влево
for(pos2 = 1; pos2 < 180; pos2 += 1)
{
ser2.attach(11);
ser2.write(pos2);
delay(20);
ser2.detach();
break;
}
if (buttonState3 == HIGH) // поворот вправо
for(pos2 = 180; pos2 > 1; pos2 += 1)
{
ser2.attach(11);
ser2.write(pos2);
delay(20);
ser2.detach();
break;
}
}