Ставим кнопку ПУСК

Поставил кнопку. Обработку ее нажатий взял из урока с сайта Амперки. То есть одно нажатие пускает двигатели, повторное нажатие останавливает.

Сначала впаял кнопку между +5в и входом 2. Долго не мог понять почему же Ардуинка не реагирует на нажатия и двигатели продолжают крутиться, потом только внимательнее посмотрел на урок и понял в чем моя проблема… в глазах :-), оказывается нужно кнопку нужно было впаять между “землей” и входом. Быстренько перепаял и все заработало. Правда сейчас из-за того что между подпрограммами стоят задержки приходится долго держать кнопку.

Ну что? Поехали??

Текущий код такой

// Определяем какие пины за что отвечают
define LM1 7 // Левый мотор 1 контакт
define LM2 6 // Левый мотор 2 контакт
define RM1 5 // Правый мотор 1 контакт
define RM2 4 // Правый мотор 2 контакт
define BUTTON_PIN 2 // кнопка пуска
define LED_PIN 13

boolean buttonWasUp = true; // была ли кнопка отпущена?
boolean workEnabled = false; // работают ли движки?
boolean ledEnabled = false; // включен ли свет?

void setup() {
pinMode(LM1, OUTPUT);
pinMode(LM2, OUTPUT);
pinMode(RM1, OUTPUT);
pinMode(RM2, OUTPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
//------------------STOP---------------------
void stop_motors() // Функция остановки моторов
{
digitalWrite(LM1, LOW);
digitalWrite(LM2, LOW);
digitalWrite(RM1, LOW);
digitalWrite(RM2, LOW);
}
//---------------FORWARD-----------------------
void forward() // Функция движения ВПЕРЁД
{
digitalWrite(LM1, LOW);
digitalWrite(LM2, HIGH);
digitalWrite(RM1, HIGH);
digitalWrite(RM2, LOW);
}
//----------------BACK------------------------
void back() // Функция движения НАЗАД
{
digitalWrite(LM1, HIGH);
digitalWrite(LM2, LOW);
digitalWrite(RM1, LOW);
digitalWrite(RM2, HIGH);
}
//----------------LEFT------------------------
void left() // Функция поворота ВЛЕВО
{
digitalWrite(LM1, HIGH);
digitalWrite(LM2, LOW);
digitalWrite(RM1, HIGH);
digitalWrite(RM2, LOW);
}
//----------------RIGHT------------------------
void right() //Функция поворота ВПРАВО
{
digitalWrite(LM1, LOW);
digitalWrite(LM2, HIGH);
digitalWrite(RM1, LOW);
digitalWrite(RM2, HIGH);
}
//-------------------------------------------
void loop()
{
// определить момент «клика» несколько сложнее, чем факт того,
// что кнопка сейчас просто нажата. Для определения клика мы
// сначала понимаем, отпущена ли кнопка прямо сейчас...
boolean buttonIsUp = digitalRead(BUTTON_PIN);

// ...если «кнопка была отпущена и (&&) не отпущена сейчас»...
if (buttonWasUp && !buttonIsUp) {
// ...может это «клик», а может и ложный сигнал (дребезг),
// возникающий в момент замыкания/размыкания пластин кнопки,
// поэтому даём кнопке полностью «успокоиться»...
delay(10);
// ...и считываем сигнал снова
buttonIsUp = digitalRead(BUTTON_PIN);
if (!buttonIsUp) { // если она всё ещё нажата...
// ...это клик! Переворачиваем переменную работы
workEnabled = !workEnabled;
ledEnabled = !ledEnabled;
digitalWrite(LED_PIN, ledEnabled);
}
}

// запоминаем последнее состояние кнопки для новой итерации

buttonWasUp = buttonIsUp;

if (!workEnabled) {
stop_motors(); // СТОП
}
if (workEnabled) {
forward(); // ВПЕРЁД
delay(2000);
left(); // В ЛЕВО
delay(1000);
back (); // НАЗАД
delay(2000);
right(); // В ПРАВО
delay(1000);
}
}

Дальше будем думать как сделать контактные сенсоры столкновения с помощью микриков.

Поделиться в соц. сетях

0
Запись опубликована в рубрике Мой робот. Добавьте в закладки постоянную ссылку.

Добавить комментарий