Не правильная работа скетча. Помогите разобраться в чем причина.
- Войдите на сайт для отправки комментариев
Ср, 27/11/2013 - 14:05
int paper = 13;
int rele = 8;
int konz = 7;
int diod = 12;
boolean konzevik = LOW;
volatile int s=0;
volatile int c=0;
int x;
volatile boolean service = false;
void setup()
{
pinMode (diod, OUTPUT);
pinMode (paper, OUTPUT);
pinMode (rele, OUTPUT);
digitalWrite (rele, LOW);
digitalWrite (paper, HIGH);
attachInterrupt(1, mode, RISING); //прерывание кнопка выбора режима.
}
void mode ()
{
if (service == false)
{
service = true;
digitalWrite (12,LOW);
}
else
{
service = false;
digitalWrite (12,HIGH);
}
}
void work ()
{
if (s<5000)
{
s = s+1;
}
else
{
c=c+1;
}
}
void loop()
{
if (service == false) // если сервис, то сервис, если нет, то печать
{
attachInterrupt(0, work, RISING); //прерывание энкодер
if (s!=0) //если прерывание не произошло ни одного раза, то проверяем режим опять
{
while (s != 4500); // проверяем счетчики
digitalWrite (paper, LOW); //
while (c != 4842); //
digitalWrite (rele, HIGH); //
for (;konzevik != HIGH;)
{
konzevik = digitalRead(konz);
}
digitalWrite (rele, LOW);
detachInterrupt (0);
konzevik = LOW;
s=0;
c=0;
}
else
{
digitalWrite (rele, 0);
digitalWrite (paper, 1);
detachInterrupt (0);
}
}
}
Извиняюсь за криво оформленую тему. Проблема в следующем. Не зависимо от выбраного режима, от значения переменной service, которая меняется по прерыванию 1, выполняется основная программа.
Как раз со счетчиков все в порядке, но он не должен начинать считать если service == true
Вы уверены, что service меняется? Дребезг контактов? Состояние 12-го выхода меняется?
Дребезга быт не должно, ибо триггер шмитта и все дела. 12 меняется, на нем висит свето диод. И нажатие кнопки четко отрабатывается.
Только что заметил, что прерывание сработаывает при включении в розетку паяльника и других электроприборов. Что это такое и как избавиться?
стабилизтировать блок питания
Ардуина пока питается от юсб, все остальное, датчики и прочее от стабилизированый 5v.