Arduino, с чего начать

Обсуждаем Arduino, Raspberry Pi и другие электронные компоненты и проекты DIY
Ответить
Антон
Сообщения: 2
Зарегистрирован: 22 окт 2013, 17:37

Arduino, с чего начать

Сообщение Антон »

Добрый день!
Купил Arduino Leonardo, решил начать изучение с простой задачи. Чтобы в ней разобраться, поставил еще более простую задачу))))).
Кто-нибудь может мне помочь с самым простым алгоритмом?

Задача:
1. При запуске контроллера на выходах 1 и 2 с частотой 1 секунда подается команда 1.
2. При поступлении на вход 3 команды 1: на выходе 1 постоянно 1, на выходе 2 постоянно 0
3. При прохождении 60 секунд на выходах 1 и 2 снова с частотой 1 секунда подается команда 1.
4. Если 60 секунд нее прошло, но на вход 4 поступила команда 1, то выходы 1 и 2 снова переходят в режим переключения с частотой 1.

Буду очень благодарен, спасибо!
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1020
Зарегистрирован: 22 окт 2010, 23:57

Re: Arduino, с чего начать

Сообщение Mr.Kubikus »

Привет!

Первым делом надо пойти на сайт arduino.cc, скачать и установить среду разработки Arduino IDE. Если у вас ОС windows, то вот ссылка - arduino-1.0.5-windows.exe
С уважением, Григорий
GitHub FB ВК
Антон
Сообщения: 2
Зарегистрирован: 22 окт 2013, 17:37

Re: Arduino, с чего начать

Сообщение Антон »

Уже все сделали. :D
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1020
Зарегистрирован: 22 окт 2010, 23:57

Re: Arduino, с чего начать

Сообщение Mr.Kubikus »

Хорошо. Давайте попробуем составить программу для решения вашей задачи.
С уважением, Григорий
GitHub FB ВК
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1020
Зарегистрирован: 22 окт 2010, 23:57

Re: Arduino, с чего начать

Сообщение Mr.Kubikus »

Появилось немного времени для вашей задачи. Вот такая программа у меня получилась. Проверяйте:

Код: Выделить всё

//
// Решение для задачи на форуме http://pacpac.ru
// http://pacpac.ru/forum/viewtopic.php?f=9&p=1177
// Автор: Mr.Kubikus
//

// Входы-выходы
int In1Pin  = 3;
int In2Pin  = 4;
int Out1Pin = 1;
int Out2Pin = 2;


// Переменные
int In1  = LOW;
int In2  = LOW;
int Out1 = LOW;
int Out2 = LOW;

bool Mem1 = false;

// Счетчики
long int Counter1 = 0; // Cчетчик таймера задержки переключения на мигалку (60 с)
long int Counter2 = 0; // Cчетчик таймера мигалки (1 с)

//
// Инициализация перед запуском цикла
//
void setup() {
  pinMode(In1Pin, INPUT);  
  pinMode(In2Pin, INPUT);  
  pinMode(Out1Pin, OUTPUT);  
  pinMode(Out2Pin, OUTPUT);    
}

//
// Бесконечный цикл
//
void loop() {
  Task1();
  delay(1);
}

// Задача
//
// 1. При запуске контроллера на выходах 1 и 2 с частотой 1 секунда подается команда 1.
// 2. При поступлении на вход 3 команды 1: на выходе 1 постоянно 1, на выходе 2 постоянно 0
// 3. При прохождении 60 секунд на выходах 1 и 2 снова с частотой 1 секунда подается команда 1.
// 4. Если 60 секунд не прошло, но на вход 4 поступила команда 1, то выходы 1 и 2 снова переходят в режим переключения с частотой 1.
//
void Task1()
{
  // Сохраняем состояние входов
  In1 = digitalRead(In1Pin);
  In2 = digitalRead(In2Pin);
  
  if (In1 && ~Mem1) {
    Counter1 = 0;
    Mem1 = true;
  }

  if (In2 && Mem1) {
    Counter1 = 0;
    Counter2 = 0;
    Mem1 = false;   
  }
  
  if (Mem1) {
    Counter1 +=1;
  }
  
  if (Counter1 > 60000) {
    Counter1 = 0;
    Mem1 = false;
  }

  if (~Mem1) {
    if (Counter2 == 0) {
      Counter2 = 1000;
      if (Out1 == HIGH) {
        Out1 = LOW;
      } else {
        Out1 = HIGH;
      }
      Out2 = Out1;
    }
    Counter2 -=1;
  }  
  
  if (Mem1) {
    Out1 = HIGH;
    Out2 = LOW;
  }
  
  // Обновляем состояние выходов
  digitalWrite(Out1Pin, Out1);
  digitalWrite(Out2Pin, Out2);  
}
С уважением, Григорий
GitHub FB ВК
Ответить