Добрый день!
Купил 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.
Буду очень благодарен, спасибо!
Arduino, с чего начать
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Arduino, с чего начать
Привет!
Первым делом надо пойти на сайт arduino.cc, скачать и установить среду разработки Arduino IDE. Если у вас ОС windows, то вот ссылка - arduino-1.0.5-windows.exe
Первым делом надо пойти на сайт arduino.cc, скачать и установить среду разработки Arduino IDE. Если у вас ОС windows, то вот ссылка - arduino-1.0.5-windows.exe
Re: Arduino, с чего начать
Уже все сделали.
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Arduino, с чего начать
Хорошо. Давайте попробуем составить программу для решения вашей задачи.
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Arduino, с чего начать
Появилось немного времени для вашей задачи. Вот такая программа у меня получилась. Проверяйте:
Код: Выделить всё
//
// Решение для задачи на форуме 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);
}