Помогите написать скетч
- Войдите на сайт для отправки комментариев
Сб, 07/04/2018 - 15:54
надо собрать устройство для охраны. Как написать цикл для проверки датчиков вроде разобрался, а вот как решить вопрос с кнопкой сброса не пойму.
//программа
int vibroPin = 2; //Вход вибродатчика
int smkPin = 3; //Вход шлейфа на обрыв
int swPin = 4 //Вход кнопка сброса тревоги
int relePin = 13; //Выход управления реле
void setup() {
pinMode(vibroPin, INPUT);
pinMode(smkPin, INPUT);
pinMode(swPin, INPUT);
pinMode(relePin, OUTPUT);
}
void loop() {
int val = digitalRead(smkPin); // Считваем значение с датчика SMK
if(val==0){
digitalWrite(relePin, HIGH); //Датчик сработал включаем реле
int val = digitalRead(PIN_SENSOR); // Считваем значение с датчика vibro
if(val==1){
digitalWrite(relePin, HIGH); //Датчик сработал включаем реле
}


nekromant, программирование это не только синтаксис языка Си, а еще умение строить модели различных устройств. У вас устройство для охраны. У него как минимум 3 состояния: охрана отключена, охрана включена и тревога.
enum {sNoActiv, sActiv, sAlarm}; byte state = sActiv;/*состояние системы*/Ну если датчик сработал, то режим тревоги. Кнопка сброса или отключает всю систему или же взводит в режим охраны.
Конкретно в этом устройстве такого не надо. Сдесь достаточно того, что бы при срабатывании любого датчика включалась тревога и возврата системы в исходное состояние по нажатию кнопки
Конкретно в этом устройстве такого не надо. Сдесь достаточно того, что бы при срабатывании любого датчика включалась тревога и возврата системы в исходное состояние по нажатию кнопки
А теперь прочтем, что Вы написали и подумаем. Исходное состояние,это что? включение требоги это что? Правильно состояния. Если бы так просто ,Вы просто замкнули датчик на тревогу и исключили Ардуину. Есть сигнал на датчике , есть тревога, нет сигнала- нет тревоги. Думаю вы догадались, что нужен триггер. А это и есть то, что я написал выше.
Конкретно в этом устройстве такого не надо. Сдесь достаточно того, что бы при срабатывании любого датчика включалась тревога и возврата системы в исходное состояние по нажатию кнопки
Вы противоречите и qwone, и самому себе.
Правильно спроектированная система должна иметь набор состояний. При этом внешние воздействия могут переводить систему из одного состояния в другое, а состояния (включая переход между ними) инициируют управляющее воздействие на исполнительные устройства.
Вы же пытаетесь отказаться от состояний, а внешние воздействия замкнуть непосредственно на управляющие воздействия. В некоторых простейших случаях такая стратегия срабатывает. Но решение оказывается нерасширяемым. Вот как есть - так есть, и ничего добавить нельзя. А автомат состояний достаточно легко расширяем.
Так что постарайтесь вникнуть в то, что Вам сказал qwоne и реализовать именно этот родход у себя.
Другими словами система, как она спроектирована Вами, не обладает расширяемостью. Для обеспечения этой расширяемости идеологию надо менять - делать автомат состояний.
Попробуйте так
//программа #define vibroPin 2 //Вход вибродатчика #define smkPin 3 //Вход шлейфа на обрыв #define swPin 4 //Вход кнопка сброса тревоги #define relePin 13 //Выход управления реле bool regim; bool f_swPin; void setup() { pinMode(vibroPin, INPUT); pinMode(smkPin, INPUT); pinMode(swPin, INPUT); pinMode(relePin, OUTPUT); Serial.begin(9600); } void loop() { if (!regim) { if(!digitalRead(smkPin)|| digitalRead(vibroPin)){ // Считваем значение с 2х датчиков - Первый сработка на 0, второй на 1 digitalWrite(relePin, HIGH); //Один из Датчиков сработал включаем реле } } if(digitalRead(swPin) && !f_swPin){ //Считываем кнопкку f_swPin=1; if (digitalRead(relePin))//Если Нажали кнопку при тревоге { digitalWrite(relePin, LOW); //Выключили реле regim = 1; } else regim = 0;//Повторно Нажали кнопку после востановления датчиков -ВКЛЮЧАЕМ ОХРАНУ } else if (f_swPin && !digitalRead(swPin))f_swPin=0; //ТИПА антидребезга (неполноценный) }Спасибо. Только я не понял где тут задается уровень при котором датчик считается сработавшим?
Вот это поворот. Уровень чего?
Дык, у датчиков то уровни - либо "0", либо "1".
Не надо тапочками в меня кидать. Это мой первый опыт с контроллерами по тому и вопросы могут быть глупыми. С ! это 0, а без 1? Вопрос не только решить задачу но и хочется разобраться что и к чему.
Если хотите разобраться - разбирайтесь. А если спрашиваете, то пишите так, чтобы было понятно другим, а не только вам. Что вот это за.. муйня "С ! это 0, а без 1?"
! Перед digitalRead. И есть где про все нюансы написания кода почитать?
http://cppstudio.com/post/297/ Помогу тем кого забанили в гугле. Понимаю санкции, потому что Путин Трампу нассал в тапок. Нет ,что бы, как приличный кот , ходить в отведенную миску.
Понимаю санкции, потому что Путин Трампу нассал в тапок. Нет ,что бы, как приличный кот , ходить в отведенную миску.
Судя по истерике, он ему под стол навалил ниаднакратно.