Помогите. Обработать сценарий
- Войдите на сайт для отправки комментариев
Чт, 13/04/2017 - 00:54
Помогите пожалуйста не опытному новичку.
Делаю скеч основанный на флагах (1 и 0) данных, и никак не могу сообразить, в тупике.
Вообщем есть разные данные, которые я привожу в вид 1 или 0, и загоняю в массив. И тут меня заклинило. Как грамотно взять массив, полностью его прочитать. А дальше по его виду, обработать сценарий. тоесть получил 011001 надо сделать это и это, получил 110001 надо сделать другое.
Что не читаю, везде его перебирают да и только.
публикуй код, что и куда ты там загоняешь и что собрался брать
class volt { int pin; int v1;//pokazaniya ACP float real_v;//V do delitelya float min_v;//nighniy pridel float aj_v;//pogrehnost int flag_v;//signal o min_v public: volt(int pin, float aj_v, float min_v) { pin=pin; min_v=min_v; aj_v=aj_v; } float real=real_v; int flag=flag_v; void read_v() { v1=analogRead(pin); real_v=v1*aj_v*5/1023; if(min_v>=real_v) { flag_v=1; } else { flag_v=0; } } }; class timer { int b1; int b2; unsigned long t2; unsigned long t3; public: timer(int b1, int b2, unsigned long t2) { b1=b1; b2=b2; t2=t2; } int flag_zum=b2; int flag_start=b1; void zummer() { unsigned long t1= millis(); if(b1==1 && b2==0) { b1=0; t3=t1+t2; } else if(b1==0 && b2==0) { if(t3<=t1) { b2=1; } } else { t3=0; b1=1; b2=0; } } }; class Logic1_0 { int pin; int b; int x; public: Logic1_0(int _pin, int _b) { pin=_pin; pinMode(pin, OUTPUT); x=LOW; b=_b; } int status=b; void read() { x=digitalRead(pin); if(x==HIGH) { b=1; } else { b=0; } if(b=1) { digitalWrite(pin, HIGH); } else if(b=0) { digitalWrite(pin, LOW); } } }; volt acc(A1, 4.191, 10.5); volt bat(A0, 4.191, 10); volt oil(A7, 4.191, 10); volt lamp_R(A6, 4.191, 10); volt lamp_S(A5, 4.191, 10); timer head(0, 0, 900000); timer cam_pin(0, 0, 15000); Logic1_0 ard(2, 0); Logic1_0 audio(3, 0); Logic1_0 andr(4, 0); Logic1_0 rem(13, 0); void setup() { int status[6]={acc.flag, bat.flag, head.flag_zum, audio.status, andr.status, rem.status}; int cam[3]={lamp_R.flag, lamp_S.flag, cam_pin.flag_zum}; } void loop() { acc.read_v(); bat.read_v(); oil.read_v(); lamp_R.read_v(); lamp_S.read_v(); head.zummer(); audio.read(); andr.read(); rem.read(); }Код ещё сырой, может и вовсе ересть несу...
Вообщем, суть смотрим рабочее напряжение сети, есть 1 нет 0 и включаем таймер. Таймер сработал И напряжение ниже рабочего все отключаем, выровнялось продолжаем работу и так далее. Там выходит 5 возможных вариантов событий.
Вообщем, суть смотрим рабочее напряжение сети, есть 1 нет 0 и включаем таймер. Таймер сработал И напряжение ниже рабочего все отключаем, выровнялось продолжаем работу и так далее. Там выходит 5 возможных вариантов событий.
Похоже вы начали подражать меня.Но тогда надо делать классы Do. В конструктор вставлять указатель на функцию void Do(){} . вот с помощью ее и ключайте таймер или флаги,какие вам надо.
Нет. Подражанием и не пахнет. Все из своей тёмной головушки)))
и мне не надо рулить флагами, я хочу чтобы флаги рулили дальнейшем ходом событий. Тоесть все вычисляеться и заполняет массив, а от его вида уже происходило дальнейшее действие по сценарию... это блок питания в машину который питает Андройд девплату усилок монитор и двумя камерами. Сел ключ вставил, задержка времени или проверка запуска авто, запуск системы, остановился отошёл куда нибудь система отключает усилок камеры и уходит в сон с контролем напряжения борт сети и таймером отключения минут на 20, если ушёл на долго. Ну и если напряжение в это время падает ниже порогового задержка на 5 секунд и аварийное отключение. Чтобы не высадить АКБ.
Тогда еще хуже. Если вы перечитаете "Старый завет", то в нем вы не найдете "рулящих флагов". Ну нет такой конструкции в Си. Рулить может только функция получившая управление. В общем попытайтесь все же изучить эту программу Пакет ее здесь https://yadi.sk/d/jwV-7Ejz3GmADU
Ну и головной файл выложу.
/* class_Led_A.ino #1 светодиод ->13 #2 кнопка 1 -> 4 вкл светодиод #3 кнопка 2 -> 5 выкл светодиод #4 кнопка 3 -> 6 светодиод мигает */ // шина выхода #include "Cl_digitalOut.h" Cl_digitalOut Out(13); //-0 светодиод // шина входа #include "Cl_digitalIn.h" Cl_digitalIn In[] = { Cl_digitalIn(4), // 0- кнопка 1 вкл светодиод Cl_digitalIn(5), // 1- кнопка 2 выкл светодиод Cl_digitalIn(6) // 2- кнопка 3 светодиод мигает }; // #1 светодиод #include "Cl_led.h" Cl_led *Led1 = new Cl_led(&Out, 1); // подключить светодиод // #2 кнопка void Do_Btn1() { Led1->ON(); // включить светодиод } void Do_Btn2() { Led1->OFF();// выключить светодиод } void Do_Btn3() { Led1->blink(500); // мигать 0.5 горит -0.5 нет } #include "Cl_do_btn.h" Cl_do_btn * Btn[] = { new Cl_do_btn(&In[0], 0, // шина, уровень при наж кнопки & Do_Btn1 ), // какую функцию надо сделать new Cl_do_btn(&In[1], 0, // шина, уровень при наж кнопки & Do_Btn2 ), // какую функцию надо сделать new Cl_do_btn(&In[2], 0, // шина, уровень при наж кнопки & Do_Btn3 ) // какую функцию надо сделать }; void setup() { Led1->setup(); for (byte i = 0; i < 3; i++)Btn[i]->setup(); } void loop() { Led1->loop(); for (byte i = 0; i < 3; i++)Btn[i]->loop(); }За ссылку спасибо. Изучу, переварю, осмыслю))))
По поводу функция рулит, тоже в курсе. Вот как раз в этом и загвоздка как функции передать весь массив целиком?
Что бы это выглядело так например:
If(весь массив равен == 01000)
{//проверяем реальное напряжение;
//взводим таймер;
}
If(весь массив равен ==11000)
{//отключаем таймер;
//запускаем Андройд, усилитель, сигнал rem;
Sic20101, если Вам достаточно 32 флагов, используйте не массив, а число нужной разрядности, выделяя в нем флаги битовыми операциями.
Блин . Чекнулись с этими флагами. ТС пошел как "настоящий херой и сусанинец" В данной ситуации это уже не флаги а события. Процедуры которые выявляют каким стал "флаг"(какое наступило событие) называются генераторами событий. А вот уже события обрабатывают отработчик события. И да обработчик одногособытия может вызывать генератор серии следующих. И не надо из событий делать всякие массивы. Ну разве что если у вас эти события одного класса.
// bool Event_generator1() {} // генератор события 1 void Event_handler1() {} // обработчик события 1 bool Event_generator2() {} // генератор события 2 void Event_handler2() {} // обработчик события 2 bool Event_generator3() {} // генератор события 3 void Event_handler3() {} // обработчик события 3 void setup() { } void loop() { if (Event_generator1())Event_handler1(); if (Event_generator2())Event_handler2(); if (Event_generator3())Event_handler3(); }ПС: И в заключении, насуете делаев или другой хрени, то у вас нормальной работы не будет.