Если комбинация D_1 и D_2 находится в работе, то допустима к работе комбинация D_1_1 и D_2 и недопустима ни одна комбинация с участием D_3. Комбинация с участием D_3 ждет отключения комбинаций с участием D_2. И соответственно если ранее подключились комбинации с участием D_3, то комбинации с участием D_2 ждут отключения комбинации с D_3.
Проверил. Работает непонятно как, даже описать не могу, пробовал словить ошибки но получалась, что появлялись другие и диапазон который сначала не считывался вдруг читался.
Я тут так подумал. Комбинации с D_1 и D_1_1 работают вместе. Если я правильно понимаю этого быть не должно. для начала проверим работу моего уменьшенного кода и функций. А именно скачало закомментируем
proverka(analogRead(A_1),D_1); и посмотрим как работает а потом переставим комментарий на proverka(analogRead(A_1),D_1_1); и тоже проверим.
Комбинации с Д_1 и Д_1_1 могут работать вместе если нуждаются во включении одного и того же диода или Д_2 или Д_3
Другими словами комбинация Д_1 + Д_2 + Д_1_1 раррешена как и комбинация Д_1 + Д_3 + Д_1_1, оключать Д_1 и Д_1_1 по мере достижения своей границы отключения и запретить сочетание комбинаций при работе в однот и тоже время типа Д_1 + Д_2 + Д_1_1 + Д_3 дождавшись завершения первой включившейся.
Огромное спасибо за помощь, пока проверить не смогу так как все на работе, завтра с утра проверю и сразу отпишусь
Происходило то что работа с одним датчиком вроде как нормально, но второй работоал только на одну сторону, затем первый начинал не работать........ завтра опишу если что то детально.
После заливки датчик А_1 работает (управляет) только в сторону с подключением в комбинации Д_1 + Д_2, в комбинации с Д_1 + Д_3 не работает вообще. При работе с А_2 - аналогичная ситуация. После этих проверок начинает работать А_1 при противоположном движении и загорается только Д_1 (должен загораться только в паре). Затем начинает работать комбинация (после получения сигнала с А_2) Д_1_1 + Д_3, но с задержкой примерно в 1 сек (первой включается Д_1_1 а через 1 сек Д_3), затем внезапно начинает работать комбинация Д_1 + Д_3 (при получении с датчика А_1), но при изменении данных с датчика А_2, перестает работать и она погасив сначала Д_3 самостоятельно, а Д_1 при изменении данных с А_1. Ну и думаю, что это невсе, так как всех комбинаций не пробовал......
Может как-то алгоритм для вас не правильно написал?
Попробую разъяснить:
Датчики А_1 и А_2 - работают постоянно и условный диапазонработы и одного и другого определен как 450-550. Контрольная точка определена как среднее арифметическое в 500. При изменении значении, вышедших за границы диапазона и нахождении в этом положении более 3 сек, должны включиться исполнительные устройства, которые принудительно вернут значение датчиков в контрольную точку этих или этого датчиков (500).
Исполнительные устройства Д_2 и Д_3 несут противоположные функции и естественно одновременно комбинации где есть эти компоненты, включаться не могут.
Пример - Д_1 + Д_2 и Д_1_1 + Д_3 не должны работать совместно, сначала должна закончить работу первая включившаяся комбинация и только после этого подключиться следующая очередная.
Варианты включении могут быть такими:
- Д_1 + Д_2
- Д_1 + Д_3
- Д_1 + Д_1_1 + Д_2 (очередность включения-отключения Д_1 и Д_1_1 могут быть разными и зависят от значений датчиков "А")
- Д_1 + Д_1_1 + Д_3 (очередность включения-отключения Д_1 и Д_1_1 могут быть разными и зависят от значений датчиков "А")
- Д_1_1 + Д_2
- Д_1_1 + Д_3
- Д_1_1 + Д_1 + Д_2 (очередность включения-отключения Д_1 и Д_1_1 могут быть разными и зависят от значений датчиков "А")
- Д_1_1 + Д_1 + Д_3 (очередность включения-отключения Д_1 и Д_1_1 могут быть разными и зависят от значений датчиков "А")
Если вдруг, что-то не понятно готов внести разъяснения.
Да вроде всё понятно. Никогда не должно быть сочетания д2+д3 просто я пока не придумал чтобы боле менее грамотно заставить их выключать и включать. Сейчас происходит конфликт в коде. Буду думать. Но и сам подумай.
Там просто необходимо найти способ хитрого ветвление программы который бы использовал одну функцию для двух датчиков. Конечно можно представить это всё как раньше с множеством переменных.
Вам как специалисту более понятно как профессионально обыграть код. Но если функционально работает правильно и первый вариант, то может вернуться к нему?
int D_FL=10;
int D_FR=11;
int D_RL=8;
int D_RR=9;
//int D_DOWN=13;
//int D_UP=12;
int A_FL=0;
int A_FR=1;
int A_RL=2;
int A_RR=3;
//int Millis1 = 0;
//int Millis2 = 0;
//int Millis3 = 0;
//int Millis4 = 0;
int interval = 3000;
//int flag1_1=0;
//int flag1_2=0;
//int flag2_1=0;
//int flag2_2=0;
void setup()
{
pinMode(D_FL, OUTPUT);
pinMode(D_FR, OUTPUT);
pinMode(D_RL, OUTPUT);
pinMode(D_RR, OUTPUT);
//pinMode(D_DOWN, OUTPUT);
//pinMode(D_UP, OUTPUT);
}
ДД LEVV2006
Может есть смысл попробовать подойти чуть по-другому:
Вот в условиях прописаны все начальные компоненты для основной работы, диапазоны у всех датчиков условно-одинаковые как и ранее от 450 до 550 со средней точкой в 500 и задержками в 3 сек.
Разделены на группы F и R (те что в коментариях пока не участвуют)
Диоды группы F могут загораться вместе если их диапазоны совпадают в стороны < или > и не могут загораться если значения разняться в противоположные стороны, соответственно загорается оди а другой ждет своей очередности. Данные условия действуют и на группу R.
Группы F и R (диоды) никогда не включаются вместе, действует условие первого вкючившегося, другой ждет очередности.
В части кода указаны компоненты и временно отключены как коментарии те пока которые лучше не задействовать.
Честно сказать я немного в ступоре. И голова у меня не варит так как я сейчас виду свой проект и он у меня не получается + я микруху спалил(((. Честно я не понимаю почему мой последний код не работает. Там всё логично. И вроде просто.
Если датчик а1 < 450 и д3 не включён то включается д2 и д1 + флаг ставится в положение что д2 включён.
Как только а1 =500 то д1 выключается и флаг тоже ставится в 0. А в последних if-ах выключается д2 по флагам.
Единственное там лишнее
116 else
117 digitalWrite(D_2, 1);
121 else
122 digitalWrite(D_3, 1);
Попробуй сам разобраться почему. Через сириал принт. Поставь на каждом узле принятия решений сериал принт с выводом той информации какая принимается в условиях и чтобы удобно было смотреть поставь задержку в конце.
Нужно не смотреть на код а разбираться. В нём ничего сложного нет. Ни функций, ни дополнительных библиотек. А поиск ошибки нужно искать путём вывода на сериал-монитор (даже не знаю как обозвать) флагов прохождения цикла программы.
Ладно сейчас попробую поставить их сам.
Да, честно говоря, кроме тебя никто толком то и не заинтересовался. Програмист из меня просто некудышный, конечно пробую что-то но как-то не идет никак.
Я напаял вывод. Я убрал интервал чтобы было проще смотреть (как мне кажется). И добавил delay(100);. По сути можно и с интервалом использовать. Короче разберешься я надеюсь. Если хочешь включить интервал и посмотреть что выходит то просто сними все комментарии и задокументируй delay(100); Твои действия: подруби arduino залей скеч и оставь usb в arduino/ на компеляторе есть кнопка serial monitor/ нажми появится окно в котором и будет отображаться то через какие ветвления будет проходить цикл контролера. Для того чтобы удобней просматривать убери флажок Autoscroll. Твоя задача смотреть этот «отчёт» о понять на каком из этапов происходит сбой. (понять правильна ли логика алгоритма). И если где то ошибка исправить. Перезолить скеч и снова проверять))))). + описание стандартных «слов» в стандартной библиотеке которую ты используешь
Вроде я разобрался. Аналоговые датчики не надёжны. А точнее они не могу выдавать данные в точной последовательности например (500-501-502…..) а выдают (500-510-516) вот в этом и проблема. Наш датчик не попадал в интервал например (500<A_2<505).
По этому и не работало. Я заменил условие выключение датчика на digitalRead(D_3)= =1&&analogRead(A_2)<510
Надеюсь это поможет))))) как попробуйте опишите что происходит. И добавьте лог монитора как код и сворачивайте его.
Либо я что то не понимаю либо…… попробуй этот код. Напиши лог (В КОД И СВЕРНИ)
И также напиши что происходит со светодиодами. Я попробую подумать об альтернативной версии кода.
int D_1=11;
int D_1_1=10;
int D_2=12;
int D_3=13;
int A_1=0;
int A_2=1;
int Millis1 = 0;
int Millis2 = 0;
int Millis3 = 0;
int Millis4 = 0;
int interval = 3000;
int flag1_1=0;
int flag1_2=0;
int flag2_1=0;
int flag2_2=0;
int analodA_1;
int analodA_2;
void setup()
{
pinMode(D_1, OUTPUT);
pinMode(D_1_1, OUTPUT);
pinMode(D_2, OUTPUT);
pinMode(D_3, OUTPUT);
Serial.begin(9600);
}
void loop()
{
analodA_1=analogRead(A_1);
analodA_2=analogRead(A_2);
Serial.println("----------------------------------------------------------------------------------");
Serial.print("A_1: ");
Serial.println(analodA_1);
Serial.print("A_2: ");
Serial.println(analodA_2);
Serial.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++");
if (analodA_1<450&&digitalRead(D_3)==0&&flag1_1==0)
{
// Millis1++;
// delay(1);
// if(Millis1==interval)
// {
Millis1=0;
digitalWrite(D_1, 1);
digitalWrite(D_2, 1);
flag1_1=1;
Serial.println("IF-1 A_1<450");
Serial.print("D_1: ");
Serial.println(digitalRead(D_1));
Serial.print("D_2: ");
Serial.println(digitalRead(D_2));
Serial.print("flag1_1: ");
Serial.println(flag1_1);
Serial.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++");
// }
}
// if (analogRead(A_1)>=450&&analogRead(A_1)<=495)
Millis1=0;
if (analodA_1>550&&digitalRead(D_2)==0&&flag1_2==0)
{
// Millis2++;
// delay(1);
// if(Millis2==interval)
// {
Millis2=0;
digitalWrite(D_1, 1);
digitalWrite(D_3, 1);
flag1_2=1;
Serial.println("IF-1 A_1>550");
Serial.print("D_1: ");
Serial.println(digitalRead(D_1));
Serial.print("D_3: ");
Serial.println(digitalRead(D_3));
Serial.print("flag1_2: ");
Serial.println(flag1_2);
Serial.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++");
}
// }
// if (analogRead(A_1)>=505&&analogRead(A_1)<=550)
Millis2=0;
if (analodA_2<450&&digitalRead(D_3)==0&&flag2_1==0)
{
// Millis3++;
// delay(1);
// if(Millis3==interval)
// {
Millis3=0;
digitalWrite(D_1_1, 1);
digitalWrite(D_2, 1);
flag2_1=1;
Serial.println("IF-2 A_2<450");
Serial.print("D_1_1: ");
Serial.println(digitalRead(D_1_1));
Serial.print("D_2: ");
Serial.println(digitalRead(D_2));
Serial.print("flag2_1: ");
Serial.println(flag2_1);
Serial.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++");
// }
}
// if (analogRead(A_2)>=450&&analogRead(A_2)<=495)
Millis3=0;
if (analodA_2>550&&digitalRead(D_2)==0&&flag2_2==0)
{
// Millis4++;
// delay(1);
// if(Millis4==interval)
// {
Millis4=0;
digitalWrite(D_1_1, 1);
digitalWrite(D_3, 1);
flag2_2=1;
Serial.println("IF-2 A_2>550");
Serial.print("D_1_1: ");
Serial.println(digitalRead(D_1_1));
Serial.print("D_3: ");
Serial.println(digitalRead(D_3));
Serial.print("flag2_2: ");
Serial.println(flag2_2);
Serial.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++");
// }
}
// if (analogRead(A_2)>=505&&analogRead(A_2)<=550)
Millis4=0;
if (analodA_1>490&&digitalRead(D_2)==1){
digitalWrite(D_1, 0);
flag1_1=0;
Serial.println("analodA_1>490&&digitalRead(D_2)==1");
Serial.print("D_1: ");
Serial.println(digitalRead(D_1));
Serial.print("flag1_1: ");
Serial.println(flag1_1);
Serial.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++");
}
if (digitalRead(D_3)==1&&analodA_1<510){
digitalWrite(D_1, 0);
flag1_2==0;
Serial.println("digitalRead(D_3)==1&&analodA_1<510");
Serial.print("D_1: ");
Serial.println(digitalRead(D_1));
Serial.print("flag1_2: ");
Serial.println(flag1_2);
Serial.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++");
}
if (analodA_2>490&&digitalRead(D_2)==1){
digitalWrite(D_1_1, 0);
flag2_1=0;
Serial.println("analodA_2>490&&digitalRead(D_2)==1");
Serial.print("D_1_1: ");
Serial.println(digitalRead(D_1_1));
Serial.print("flag2_1: ");
Serial.println(flag2_1);
Serial.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++");
}
if (digitalRead(D_3)==1&&analodA_2<510){
digitalWrite(D_1_1, 0);
flag2_2=0;
Serial.println("digitalRead(D_3)==1&&analodA_2<510");
Serial.print("D_1_1: ");
Serial.println(digitalRead(D_1_1));
Serial.print("flag2_2: ");
Serial.println(flag2_2);
Serial.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++");
}
if ( flag1_1==0&&flag2_1==0)
{
digitalWrite(D_2, 0);
Serial.println("flag1_1==0&&flag2_1==0");
Serial.print("D_2: ");
Serial.println(digitalRead(D_2));
Serial.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++");
}
if ( flag1_2==0&&flag2_2==0)
{
digitalWrite(D_3, 0);
Serial.println("flag1_2==0&&flag2_2==0");
Serial.print("D_3: ");
Serial.println(digitalRead(D_3));
Serial.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++");
}
Serial.println("------------------------------------------------------------");
delay(100);
}
Все хорошо кроме мелочей (потом опишу) и как только с датчика А_1 идет сигнал в группе с Д_3 и он загорается и больше не гаснет и естественно все так и остается.
Я помогаю чем могу. Пока мой проект движется не очень быстро то есть время поковыряться и в вашем. Просто когда мой проект наберёт темп и я дойду до программной части то боюсь что я просто не смогу думать о двух проектах одновременно)))
Вот эти
D_2 и D_3 не могут быть включены вместе и разрешено включение поочередно после первого выключившегося, соответственно в паре с D_1 D_1_1.
Другими словами определить комбинации работы:
Если комбинация D_1 и D_2 находится в работе, то допустима к работе комбинация D_1_1 и D_2 и недопустима ни одна комбинация с участием D_3. Комбинация с участием D_3 ждет отключения комбинаций с участием D_2. И соответственно если ранее подключились комбинации с участием D_3, то комбинации с участием D_2 ждут отключения комбинации с D_3.
ДД
LEVV2006
Аналоговые два датчика на одном входе, я так понимаю - описка? Верно?
Пока не проверял, проверю обязательно отпишусь.
С ув
я исправил. пробуй и пиши как работает
Ок! Просто сейчас со временем немного, чуть позже попробую. Результаты опишу.
LEVV2006
ДД
Проверил. Работает непонятно как, даже описать не могу, пробовал словить ошибки но получалась, что появлялись другие и диапазон который сначала не считывался вдруг читался.
Как то не совсем правильно все включается.
Что посоветуете.
Все в собранном виде.
С ув
Игорь
Я тут так подумал. Комбинации с D_1 и D_1_1 работают вместе. Если я правильно понимаю этого быть не должно. для начала проверим работу моего уменьшенного кода и функций. А именно скачало закомментируем
proverka(analogRead(A_1),D_1); и посмотрим как работает а потом переставим комментарий на proverka(analogRead(A_1),D_1_1); и тоже проверим.
Комбинации с Д_1 и Д_1_1 могут работать вместе если нуждаются во включении одного и того же диода или Д_2 или Д_3
Другими словами комбинация Д_1 + Д_2 + Д_1_1 раррешена как и комбинация Д_1 + Д_3 + Д_1_1, оключать Д_1 и Д_1_1 по мере достижения своей границы отключения и запретить сочетание комбинаций при работе в однот и тоже время типа Д_1 + Д_2 + Д_1_1 + Д_3 дождавшись завершения первой включившейся.
С ув
Игорь
Сейчас перепроверил
Как-то получше но все равно есть ошибки плана подвисания при работе датчиков.
Хз. Как сейчас но попробуй. Только детально описывай что происходит без умных слов.
LEVV2006
Огромное спасибо за помощь, пока проверить не смогу так как все на работе, завтра с утра проверю и сразу отпишусь
Происходило то что работа с одним датчиком вроде как нормально, но второй работоал только на одну сторону, затем первый начинал не работать........ завтра опишу если что то детально.
С ув
Игорь
ДД
Итак произвел опробование:
После заливки датчик А_1 работает (управляет) только в сторону с подключением в комбинации Д_1 + Д_2, в комбинации с Д_1 + Д_3 не работает вообще. При работе с А_2 - аналогичная ситуация. После этих проверок начинает работать А_1 при противоположном движении и загорается только Д_1 (должен загораться только в паре). Затем начинает работать комбинация (после получения сигнала с А_2) Д_1_1 + Д_3, но с задержкой примерно в 1 сек (первой включается Д_1_1 а через 1 сек Д_3), затем внезапно начинает работать комбинация Д_1 + Д_3 (при получении с датчика А_1), но при изменении данных с датчика А_2, перестает работать и она погасив сначала Д_3 самостоятельно, а Д_1 при изменении данных с А_1. Ну и думаю, что это невсе, так как всех комбинаций не пробовал......
Может как-то алгоритм для вас не правильно написал?
Попробую разъяснить:
Датчики А_1 и А_2 - работают постоянно и условный диапазонработы и одного и другого определен как 450-550. Контрольная точка определена как среднее арифметическое в 500. При изменении значении, вышедших за границы диапазона и нахождении в этом положении более 3 сек, должны включиться исполнительные устройства, которые принудительно вернут значение датчиков в контрольную точку этих или этого датчиков (500).
Исполнительные устройства Д_2 и Д_3 несут противоположные функции и естественно одновременно комбинации где есть эти компоненты, включаться не могут.
Пример - Д_1 + Д_2 и Д_1_1 + Д_3 не должны работать совместно, сначала должна закончить работу первая включившаяся комбинация и только после этого подключиться следующая очередная.
Варианты включении могут быть такими:
- Д_1 + Д_2
- Д_1 + Д_3
- Д_1 + Д_1_1 + Д_2 (очередность включения-отключения Д_1 и Д_1_1 могут быть разными и зависят от значений датчиков "А")
- Д_1 + Д_1_1 + Д_3 (очередность включения-отключения Д_1 и Д_1_1 могут быть разными и зависят от значений датчиков "А")
- Д_1_1 + Д_2
- Д_1_1 + Д_3
- Д_1_1 + Д_1 + Д_2 (очередность включения-отключения Д_1 и Д_1_1 могут быть разными и зависят от значений датчиков "А")
- Д_1_1 + Д_1 + Д_3 (очередность включения-отключения Д_1 и Д_1_1 могут быть разными и зависят от значений датчиков "А")
Если вдруг, что-то не понятно готов внести разъяснения.
Спасибо
С ув
Игорь
Да вроде всё понятно. Никогда не должно быть сочетания д2+д3 просто я пока не придумал чтобы боле менее грамотно заставить их выключать и включать. Сейчас происходит конфликт в коде. Буду думать. Но и сам подумай.
LEVV2006
Да я бы подумал, но познаний не хватает, а так-тол сижу изучаю и пробую, но дальше скетча с одним датчиком толком-то и не написал.
В обмен на вашу помощь готов оказать возможно-посильную в рекомендациях изготовления пневмоподвески (за исключением данного устройства)
С ув
Игорь
Там просто необходимо найти способ хитрого ветвление программы который бы использовал одну функцию для двух датчиков. Конечно можно представить это всё как раньше с множеством переменных.
LEVV2006
Вам как специалисту более понятно как профессионально обыграть код. Но если функционально работает правильно и первый вариант, то может вернуться к нему?
С ув
Игорь
Попробуй этот
ДД
Датчик А_2 и его группа работает корректно (с первых проб)
Группы с участием Д_2 работают все корректно, пока с А_1 данные не требуют участия Д_3, как только Д_3 включился, то больше не выключается.
Это основная ошибка которую заметило.
С ув
Игорь
Попробуй убрать ветвление else в последних if – ах
LEVV2006
ДД
Рекомендации произвел
Изменений не наблюдал
Если стартую с датчика А_1 в комбинации с Д_3, то Д_3 уже не выключается.
С ув
Игорь
ДД LEVV2006
Может есть смысл попробовать подойти чуть по-другому:
Вот в условиях прописаны все начальные компоненты для основной работы, диапазоны у всех датчиков условно-одинаковые как и ранее от 450 до 550 со средней точкой в 500 и задержками в 3 сек.
Разделены на группы F и R (те что в коментариях пока не участвуют)
Диоды группы F могут загораться вместе если их диапазоны совпадают в стороны < или > и не могут загораться если значения разняться в противоположные стороны, соответственно загорается оди а другой ждет своей очередности. Данные условия действуют и на группу R.
Группы F и R (диоды) никогда не включаются вместе, действует условие первого вкючившегося, другой ждет очередности.
В части кода указаны компоненты и временно отключены как коментарии те пока которые лучше не задействовать.
Как ты относишься к такому пути?
Может что-то не ясно описал?
С ув
Игорь
^
| Я пока ничего придумать не могу. Попробуй поставь везде сериал принт и посмотри на какой из стадий обработки данных возникает ошибка.
LEVV2006
Вот попробовал описать другой путь.
Или попробовать по этому пути с 2 датчиками и одной группой, например, F?
Вдруг что-то не ясно - спрашивай.
С ув
Игорь
Честно сказать я немного в ступоре. И голова у меня не варит так как я сейчас виду свой проект и он у меня не получается + я микруху спалил(((. Честно я не понимаю почему мой последний код не работает. Там всё логично. И вроде просто.
Если датчик а1 < 450 и д3 не включён то включается д2 и д1 + флаг ставится в положение что д2 включён.
Как только а1 =500 то д1 выключается и флаг тоже ставится в 0. А в последних if-ах выключается д2 по флагам.
Единственное там лишнее
116 else
117 digitalWrite(D_2, 1);
121 else
122 digitalWrite(D_3, 1);
Попробуй сам разобраться почему. Через сириал принт. Поставь на каждом узле принятия решений сериал принт с выводом той информации какая принимается в условиях и чтобы удобно было смотреть поставь задержку в конце.
Вот смотрю на код и никак понять не могу где ошибка?
Может у кого-то есть другая идея решения условий?
Вот был кто-то говоря, что все так просто и вот пропал, ни обещанного куска кода и ни одного дельного совета.
С ув ко всем откликнувшимся.
Игорь
Нужно не смотреть на код а разбираться. В нём ничего сложного нет. Ни функций, ни дополнительных библиотек. А поиск ошибки нужно искать путём вывода на сериал-монитор (даже не знаю как обозвать) флагов прохождения цикла программы.
Ладно сейчас попробую поставить их сам.
LEVV2006
Да, честно говоря, кроме тебя никто толком то и не заинтересовался. Програмист из меня просто некудышный, конечно пробую что-то но как-то не идет никак.
С ув
Я напаял вывод. Я убрал интервал чтобы было проще смотреть (как мне кажется). И добавил delay(100);. По сути можно и с интервалом использовать. Короче разберешься я надеюсь. Если хочешь включить интервал и посмотреть что выходит то просто сними все комментарии и задокументируй delay(100); Твои действия: подруби arduino залей скеч и оставь usb в arduino/ на компеляторе есть кнопка serial monitor/ нажми появится окно в котором и будет отображаться то через какие ветвления будет проходить цикл контролера. Для того чтобы удобней просматривать убери флажок Autoscroll. Твоя задача смотреть этот «отчёт» о понять на каком из этапов происходит сбой. (понять правильна ли логика алгоритма). И если где то ошибка исправить. Перезолить скеч и снова проверять))))). + описание стандартных «слов» в стандартной библиотеке которую ты используешь
Спасибо LEVV2006
Завтра все попробую и естественно отпишусь
С ув
Игорь
ДД
Проверил и вчера и сегодня и в результате даже не знаю что писать.
Как не работало не стабильно так и не работает
Другими словами в подключенном состоянии ошибки могут и не повторяться
Попробую еще как-то и возможно отпишусь о том что вижу на мониторе и положение диодов
С ув
Игорь
А ничего и не должно было измениться. Исполнительный код я не менял. Вам нужно разобраться в чём ошибка используя в монитор.
ДД
Это понятно!
Но поведение все-таки изменилось
Завтра скопирую мониторинг и выложу
С ув
Игорь
----------------------------------------------------------------------------------
A_1: 529
A_2: 477
Вроде я разобрался. Аналоговые датчики не надёжны. А точнее они не могу выдавать данные в точной последовательности например (500-501-502…..) а выдают (500-510-516) вот в этом и проблема. Наш датчик не попадал в интервал например (500<A_2<505).
По этому и не работало. Я заменил условие выключение датчика на digitalRead(D_3)= =1&&analogRead(A_2)<510
Надеюсь это поможет))))) как попробуйте опишите что происходит. И добавьте лог монитора как код и сворачивайте его.
ДД
Да сейчас похоже на условие только Д_3 загорается и не гаснет
С ув
Игорь
лог в студию
попробуйте этот
Вот
Либо я что то не понимаю либо…… попробуй этот код. Напиши лог (В КОД И СВЕРНИ)
И также напиши что происходит со светодиодами. Я попробую подумать об альтернативной версии кода.
Вот
Все хорошо кроме мелочей (потом опишу) и как только с датчика А_1 идет сигнал в группе с Д_3 и он загорается и больше не гаснет и естественно все так и остается.
Я тут кое чего намутил))) глянь. Интервал времени включён!!
ДД
ООООООО!
С первого вззгляда - практически все ОК!
Сейчас нужно отлучится с работы на пол-час и приду все проверю досконально в вариантах.
Ты талант!
С ув
Игорь
ДД
Это вроде работает, пару раз подключал - без ошибок!
Ты мастер
С ув
Игорь
Сейчас поищу мелочи. Вроде все ОК!
ДД LEVV2006
Вроде все проверил и сегодня, практически все работает как хотелось бы в этой части.
Огромное спасибо.
Скажите пжлст, есть ли желание попробовать написать следующую часть? Она идеентична этой же.
С ув
Игорь
Только в условии добавились доп компоненты (о разрешениях и запретах опишу позже)
Я помогаю чем могу. Пока мой проект движется не очень быстро то есть время поковыряться и в вашем. Просто когда мой проект наберёт темп и я дойду до программной части то боюсь что я просто не смогу думать о двух проектах одновременно)))
ДД
Понимаю!
Огромное спасибо за помощь, может и я в дальнейшем смогу чем-то помочь.
Может скинете адрес почты (или мой betonotex2004@mail.ru), опишу более подробнее алгоритм с 4 датчиками и 6 исп устройствами.
Признателен за помощь
С ув
Игорь
Моя почта. LEVVARRR@yandex.ru. Пишите. Я с радостью помогу чем смогу.