последовательное выполнение действий
- Войдите на сайт для отправки комментариев
Пт, 30/03/2018 - 12:42
Можете поделится примером как можно реализовать последовательное выполнение действий на ардуино?
например сначала проверяется условие есть ли входной сигнал на pin3 и pin4 если да то подается сигнал на pin10 и pin11(и наличие или отсутствие сигнала на 3 и4 пине не имеет значения) , до тех пор пока не поступит сигнал с pin6, это шаг 1. дальше подается сигнал на pin 8 и pin12 до появления сигнала на pin 2. и т. д.
Метод конечных автоматов:
http://wiki.amperka.ru/%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5:%D0%BA%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D0%B9-%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82
Нужно завести переменную которая бы позволяла понять на каком этапе сейчас действие. Значение переменной и значение сигналов на пинах будут условием подачи сигналов и значение этой переменной также меняется для перехода на следующий шаг.
конечно pin3 = 1 это digitalWrite(3,1) , а pin8 == 1 это digitalRead(8) == 1 если это прминять к языку Arduino
P.S. Про "конечные автоматы" больно муторно написано.
попробовал по вашему методу
void loop() {
if(mode==0&&digitalRead (3)==1&&digitalRead (4)==1)
{ mode=1;
digitalWrite (10,1);
digitalWrite (11,1);
}// запускается шаг 1
if(mode==1&&digitalRead (6)==1)
{
mode=2;
digitalWrite (8,1);
digitalWrite (11,1);
} // запускается шаг 2
if(mode==2&&digitalRead (2)==1)
{
mode=3;
digitalWrite (9,1);
digitalWrite (11,1);
digitalWrite (12,1);
но при переходе из шага 1 в шаг 2 pin10 не отключается, получается нужно в каждом новом шаге писать отключениее старого по типу digitalWrite (9,0); . Также по чему то не переходит в следущий шаг(шаг3), а их у меня по плану 10
Вам нужно сначала алгоритм расписать для себя же подробнее. А то так и будете удивляться.
алгоритм для себя написал но проблема в реализации, не могу понять по какой причине запускается шаг 3
[code]
bool mode=0; //переменная указывающяя номер шага шага программы
void setup() {
pinMode(3, INPUT);
pinMode(2, INPUT);
pinMode(1, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(0, INPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, INPUT); // put your setup code here, to run once:
}
void loop() {
if(mode==0&&digitalRead (3)==1&&digitalRead (4)==1) //считываю состояние условной переменной и состояния входов 3 и 4 и запускаю шаг 1.
{ mode=1; // присваиваю значение переменной
digitalWrite (10,1);
digitalWrite (11,1);
}
// Выполняется шаг 1
if(mode==1&&digitalRead (6)==1) // как только поступит сигнал вход пина 6 начинает выполнятся шаг 2
{
mode=2; // присваиваю значение переменной
digitalWrite (10,0); // выключаю пин 0 ( по другому не выключается и остаеся в состоянии HIGH)
digitalWrite (8,1);
digitalWrite (11,1);
}
// Выполняется шаг 2
if(mode==2&&digitalRead (2)==1) // как только поступит сигнал вход пина 2 начинает выполнятся шаг 3
{
mode=3;
digitalWrite (8,0); // выключаю пин
digitalWrite (9,1);
digitalWrite (11,1);
digitalWrite (12,1);
}
// Выполняется шаг 3
}
[/code]
А вы зачем bool mode присваиваете значения 2, 3... ?
ааа так вот по чему он не хотел дальше шаги делать.
А вы зачем bool mode присваиваете значения 2, 3... ?
Как ты это разглядел в этом мусоре ? Жуть !
А вы зачем bool mode присваиваете значения 2, 3... ?
Как ты это разглядел в этом мусоре ? Жуть !
Исключительно случайно, чесслово.
Всетаки автору надо подучить типы данных и чем они отличаются, а то потом будет вопрос почему после 32768 идет -32768 или что-то в этом роде.
Всетаки автору надо подучить типы данных и чем они отличаются, а то потом будет вопрос почему после 32768 идет -32768 или что-то в этом роде.
Так не бывает.