От тук нататък ще пристъпим към използване на бутони/ключета за контрол на сервото, като входни портове.
За да започна обяснението, ще използвам схема, в която имаме два бутона (вариант 1 от описанието от няколко поста по-горе), единия за обръщане на сервото в права, а другия за обръщане в отклонение. Както казах този вариант е доста разхищаваш от гледна точка на използване на портовете, но е най- близо до логиката, която всички ползваме и в момента по пултовете на макетите си. Естествено вместо два бутона , може да се използва (ON)-OFF-(ON) ЦК ключ, при който имаме една стабилна средна позиция, и две незадържащи крайни позиции.
Описание на опитната постановка:
Използвам схемата от картинката, при която на порт 2 връзвам единия ключ, на порт 3 другия. На порт 9 се връзва сервото. Портове 2 и 3 са постоянно подвързани през резистори 1кОм към маса. Това се налага за да гарантираме и осигурим стабилен нисък потенциал на порта в спокойно състояние, което със сигурност да се отличава от +5V, (висок потенциал), които ще подаваме и ще бъде критерий за превключването.


===================
КОД 1: Завъртаме сервото на 0 градуса за право и 180 градуса за отклонение
Трябва да отбележа, че използваме завъртане през 1 градус до достигане на противоположната позиция като след всеки градус изчакваме с по 15 ms с цел по- бавно завъртане.
#include<Servo.h>
int pos = 0; //декларираме променлива, в която да се записва текущата позиция на завъртането
Servo servo1; //декларираме сервото с име servo1
void setup() {
pinMode(2, INPUT); //декларираме порт 2 за входен
pinMode(3, INPUT); //декларираме порт 3 за входен
servo.attach(9); //декларираме порт 9 за сервото
}
void loop() {
while (digitalRead(2) == HIGH && pos < 180)
{
pos++;
servo1.write(pos);
delay(15);
}
while (digitalRead(3) == HIGH && pos > 0)
{
pos--;
servo1.write(pos);
delay(15);
}
}
====================
КОД2: Ако искаме например завъртането за право да е на 70 градуса, а за отклонение на 110, като началната инициализация на сервото е на 90 градусова позиция, горния код се преработва до следния:
#include<Servo.h>
int pos = 90; //декларираме променлива, в която да се записва текущата позиция на завъртането
Servo servo1; //декларираме сервото с име servo1
void setup() {
pinMode(2, INPUT); //декларираме порт 2 за входен за отклонение
pinMode(3, INPUT); //декларираме порт 3 за входен за право
servo.attach(9); //декларираме порт 9 за сервото
servo1.write(pos); //поставяме сервото на 90 градуса
}
void loop() {
while (digitalRead(2) == HIGH && pos < 110)
{
pos++;
servo1.write(pos);
delay(15);
}
while (digitalRead(3) == HIGH && pos > 70)
{
pos--;
servo1.write(pos);
delay(15);
}
}