Всем здравствуйте. Нужна помощь . Физически собран блок приемного устройства на Arduino Nano( 328p ). Его задача принимать и считать прямоугольные импульсы и по количеству подсчитанных импульсов включать ту или иную индикацию. Работает схема следующим образом: Когда поступает вызывной сигнал формируется высокий уровень сигнала receive , он поступает на вход ардуино и по условию разрешает счет прямоугольных импульсов, поступающих на вход 2. По окончанию цикла передачи сигнал receive становится логическим нулем и программа должна сравнить количество подсчитанных импульсов с промежутками значений и включить индикацию в зависимости от значения переменной count. Блок void setup отрабатывает корректно . Блок void loop корректно отрабатывает первое условие по контролю включения приемника. Дальше начинаются проблемы… Блок счетчика импульсов включается через условие , что на receive высокий уровень, это работает импульсы на мониторе порта считаются, но после переключения его на ноль программа не переходит к проверке условий, кроме того не работает сброс для состояний авария и неисправность, точнее заданное перед операндами условие ,что reset должен быть 1 игнорируется ,операнды просто выполняются по ходу программы и все. Пробывал разные способы : и через switch, и через if\ else не работает корректно. Расставлять фигурные скобки, тоже не помогает Подскажите ,пж, где ошибка, скетчи ниже.
Да , понимаю. Сначала в setup идет запуск приемного устройства, далее в loop проверяется его включенное состояние. Далее при поступлении вызова 3 вход-1, запускается счетчик импульсов на входе 2, считает ,пока на 3- лог 1, как только на 3 лог ноль идет сравнение переменной count с промежутками чисел и появляется лог 1 на прописанных входах. Беда в том,что при 0 на 3 входе не переходит к сравнению count с промежутками чисел, да там еще добавлен вход сброса reset с ним все в порядке. Где ошибка? первый код на if, второй чере switch. Компиляцию проходят
такое впечатление, что фигурные скобки вставлялись в хаотичном порядке, там где они нужны их нет и наоборот. @Ilyxa92, вменяемые люди, форматируют код, примерно так
Спойлер
int receive = 3;
int alarm1 = 4;
int alarm2 = 5;
int reset = 6; //
int alarm3 = 7;
int selft = 8;
int offcall = 9;
int phone = 10;
int buttonPin = 2; // вход счетчика
const int repeat_time = 500; // длительность автоповтора
int count; // счётчик импульсов
void setup()
{
Serial.begin(9600);
pinMode(buttonPin, INPUT);
pinMode(receive, INPUT);
pinMode(alarm1, OUTPUT);
pinMode(alarm2, OUTPUT);
pinMode(reset, INPUT );
pinMode(alarm3, OUTPUT);
pinMode(selft, INPUT);
pinMode(offcall, OUTPUT);
pinMode(phone, OUTPUT);
if ((digitalRead(selft) == LOW))
{ digitalWrite(offcall, HIGH);
delay(3500);
digitalWrite(offcall, LOW);
delay(10000);
}
}
void loop() {
{ if ((digitalRead(selft) == LOW))
{ digitalWrite(phone, HIGH);
delay(500);
digitalWrite(phone, LOW);
delay(500);
}
else digitalWrite(phone, HIGH);
} // контроль вкл.приемника
{ if (digitalRead(reset) == HIGH && digitalRead(receive) == LOW)
count = 0;
digitalWrite(alarm1, LOW);
digitalWrite(alarm2, LOW);
digitalWrite(alarm3, LOW);// сброс неисправности и аварии
if (digitalRead(receive) == HIGH)
{ if (digitalRead(buttonPin)) {
(++count);
Serial.println(count);
delay(repeat_time);
}
}
}
{ if ((digitalRead(receive) == LOW) && (digitalRead(reset) == LOW ))
switch (count) {
case 0 … 5: count = 0; break;
case 6 ... 10: digitalWrite(alarm1, HIGH);
delay (8000);
digitalWrite(alarm1, LOW);
Serial.println("закрыто");
count = 0; break;
case 11 … 19: digitalWrite(alarm2, HIGH);
Serial.println(“Неисправность”);
count = 0; break;
case 20 … 30: digitalWrite(alarm3, HIGH);
Serial.println(“Авария”);
count = 0; break;
delay (700);
}
}
}
а теперь расскажите, почему строки (в этом коде) 41 и 55 начинаются с ‘{’ ?
это так цветочки, дальше будет больнее.