кнопка вкл и выкл

azamat alimkhan
Offline
Зарегистрирован: 17.02.2016

Добрый день! использую ардуино уно

есть 10 кнопок и 8 светодиода! Нужно разделить на два режима. Первый режим - при нажатии на одну кнопку загорелись на 2сек первые 4 светодиода

Второй режим - при нажатии на другую кнопку загорелись  остальные 4 светодиода на 6сек.

 А остальные 8 кнопок при нажатии по отдельносьти на одну кнопку, должно загореться один светодиод на несколько секунд(неважно).

Мой код работает неисправно, подскажите что я написал не так! По отдельности они работатют, но как только соединить их в один код, работает только один режим, второй не работает.

int EM23 = A0;// светодиода
int EM24 = A1;
int EM25 = A2;
int EM26 = A3;
int BUTTON_EM14 = 8;//кнопка
int BUTTON_EM13 = 7;
int BUTTON_EM12 = 6;
int BUTTON_EM11 = 5;
int BUTTON_EM6 = 4;

int HD2 = 3;// светодиода
int HD3 = 2;
int HD4 = A4;
int HD5 = A5;
int BUTTON_HD19 = 13;//кнопка
int BUTTON_HD18 = 12;
int BUTTON_HD17 = 11;
int BUTTON_HD16 = 10;
int BUTTON_HD15 = 9;

void setup()
{
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);
pinMode(8, INPUT);
pinMode(7, INPUT);
pinMode(6, INPUT);
pinMode(5, INPUT);
pinMode(4, INPUT);

pinMode(3, OUTPUT);
pinMode(2, OUTPUT);
pinMode(A4, OUTPUT);
pinMode(A5, OUTPUT);
pinMode(13, INPUT);
pinMode(12, INPUT);
pinMode(11, INPUT);
pinMode(10, INPUT);
pinMode(9, INPUT);
}
void loop()
{
if ( digitalRead(8) == HIGH )
{
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(A3, HIGH);// включаем светодиод
delay(2000); // ждем 2 секунды
digitalWrite(A0, LOW);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
digitalWrite(A3, LOW);// выключаем светодиод
}
if ( digitalRead(7) == HIGH )
{
  digitalWrite(A0, HIGH);
  delay(2500);
  digitalWrite(A0, LOW);
  }
  if ( digitalRead(6) == HIGH )
{
  digitalWrite(A1, HIGH);
  delay(2500);
  digitalWrite(A1, LOW);
  }
  if ( digitalRead(5) == HIGH )
{
  digitalWrite(A2, HIGH);
  delay(2500);
  digitalWrite(A2, LOW);
  }
  if ( digitalRead(4) == HIGH )
{
  digitalWrite(A3, HIGH);
  delay(2500);
  digitalWrite(A3, LOW);
  }
 
if ( digitalRead(13) == HIGH )
{
digitalWrite(3, HIGH);
digitalWrite(2, HIGH);
digitalWrite(A4, HIGH);
digitalWrite(A5, HIGH);// включаем светодиод
delay(6000); // ждем 6 секунд
digitalWrite(3, LOW);
digitalWrite(2, LOW);
digitalWrite(A4, LOW);
digitalWrite(A5, LOW);// выключаем светодиод
}
if ( digitalRead(12) == HIGH )
{
  digitalWrite(3, HIGH);
  delay(5000);
  digitalWrite(3, LOW);
  }
  if ( digitalRead(11) == HIGH )
{
  digitalWrite(2, HIGH);
  delay(5000);
  digitalWrite(2, LOW);
  }
  if ( digitalRead(10) == HIGH )
{
  digitalWrite(A4, HIGH);
  delay(5000);
  digitalWrite(A4, LOW);
  }
  if ( digitalRead(9) == HIGH )
{
  digitalWrite(A5, HIGH);
  delay(5000);
  digitalWrite(A5, LOW);
  }
}

dachnik
Offline
Зарегистрирован: 26.07.2013

Я конечно так не пробовал, но разве можно использовать digitalWrite для аналогового выхода?:

digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(A3, HIGH);// включаем светодиод

правельнее было бы:

analogWrite(Pin, val);

 

azamat alimkhan
Offline
Зарегистрирован: 17.02.2016

Поменял на аналог - мертво((((

evgta
Offline
Зарегистрирован: 02.09.2016

Изучаем миллис и циклы. С делеем пока незакончится цикл ниодна кнопка работать небудет.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

evgta пишет:
и циклы.

зачем циклы?

azamat alimkhan
Offline
Зарегистрирован: 17.02.2016

этот то код почему не работает? по идее я же не одновременно их включаю, 1 режим закончился, включаю второй режим...а уменя один режим работает, второй мертво

int EM23 = A0;//светодиод
int EM24 = A1;
int EM25 = A2;
int EM26 = A3;
int BUTTON_EM14 = 8;//кнопка
int BUTTON_EM13 = 7;
int BUTTON_EM12 = 6;
int BUTTON_EM11 = 5;
int BUTTON_EM6 = 4;

int HD2 = 3;//светодиод
int HD3 = 2;
int HD4 = A4;
int HD5 = A5;
int BUTTON_HD19 = 13;//кнопка
int BUTTON_HD18 = 12;
int BUTTON_HD17 = 11;
int BUTTON_HD16 = 10;
int BUTTON_HD15 = 9;
//int flag=0;
void setup()
{
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);
pinMode(8, INPUT);
pinMode(7, INPUT);
pinMode(6, INPUT);
pinMode(5, INPUT);
pinMode(4, INPUT);

pinMode(3, OUTPUT);
pinMode(2, OUTPUT);
pinMode(A4, OUTPUT);
pinMode(A5, OUTPUT);
pinMode(13, INPUT);
pinMode(12, INPUT);
pinMode(11, INPUT);
pinMode(10, INPUT);
pinMode(9, INPUT);
}
void loop()
{
if ( digitalRead(8) == HIGH )
{
analogWrite(A0, HIGH);
analogWrite(A1, HIGH);
analogWrite(A2, HIGH);
analogWrite(A3, HIGH);// включаем светодиод
delay(2000); // ждем 2 секунды
analogWrite(A0, LOW);
analogWrite(A1, LOW);
analogWrite(A2, LOW);
analogWrite(A3, LOW);// выключаем светодиод
}
if ( digitalRead(7) == HIGH )
{
  analogWrite(A0, HIGH);
  delay(2500);
  analogWrite(A0, LOW);
  }
  if ( digitalRead(6) == HIGH )
{
  analogWrite(A1, HIGH);
  delay(2500);
  analogWrite(A1, LOW);
  }
  if ( digitalRead(5) == HIGH )
{
  analogWrite(A2, HIGH);
  delay(2500);
  analogWrite(A2, LOW);
  }
  if ( digitalRead(4) == HIGH )
{
  analogWrite(A3, HIGH);
  delay(2500);
  analogWrite(A3, LOW);
  }
 

if ( digitalRead(13) == HIGH )
{
digitalWrite(3, HIGH);
digitalWrite(2, HIGH);
digitalWrite(A4, HIGH);
digitalWrite(A5, HIGH);// включаем светодиод
delay(6000); // ждем 6 секунд
digitalWrite(3, LOW);
digitalWrite(2, LOW);
digitalWrite(A4, LOW);
digitalWrite(A5, LOW);// выключаем светодиод
}
if ( digitalRead(12) == HIGH )
{
  digitalWrite(3, HIGH);
  delay(5000);
  digitalWrite(3, LOW);
  }
  if ( digitalRead(11) == HIGH )
{
  digitalWrite(2, HIGH);
  delay(5000);
  digitalWrite(2, LOW);
  }
  if ( digitalRead(10) == HIGH )
{
  analogWrite(A4, HIGH);
  delay(5000);
  analogWrite(A4, LOW);
  }
  if ( digitalRead(9) == HIGH )
{
  analogWrite(A5, HIGH);
  delay(5000);
  analogWrite(A5, LOW);
  }
}

evgta
Offline
Зарегистрирован: 02.09.2016

Клапауций 112 пишет:

evgta пишет:
и циклы.

зачем циклы?

Чтобы опрос кнопок в нем устраивать пока выполнвется действие

evgta
Offline
Зарегистрирован: 02.09.2016

А по нормальнтму разместить код можно?

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

evgta пишет:
Клапауций 112 пишет:

evgta пишет:
и циклы.

зачем циклы?

Чтобы опрос кнопок в нем устраивать пока выполнвется действие

чем опрос кнопок в лупе не устраивает?

Araris
Offline
Зарегистрирован: 09.11.2012

azamat alimkhan, пожалуйста вставляйте код, как описано в http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

Araris пишет:

azamat alimkhan, пожалуйста вставляйте код, как описано

я запретил.

evgta
Offline
Зарегистрирован: 02.09.2016

на 13 пин лучше ничего не вешать, а подтягивающие резисторы стоят?

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

dachnik пишет:
но разве можно использовать digitalWrite для аналогового выхода?:

digitalWrite(A0, HIGH);

Можно до A5 (на процессорах mega8/168/328). A6 и A7 (в корпусе TQFP32) - только входы.

azamat alimkhan
Offline
Зарегистрирован: 17.02.2016






int EM23 = A0;//светодиод
int EM24 = A1;
int EM25 = A2;
int EM26 = A3;
int BUTTON_EM14 = 8;//кнопка
int BUTTON_EM13 = 7;
int BUTTON_EM12 = 6;
int BUTTON_EM11 = 5;
int BUTTON_EM6 = 4;

int HD2 = 3;//светодиод
int HD3 = 2;
int HD4 = A4;
int HD5 = A5;
int BUTTON_HD19 = 13;//кнопка
int BUTTON_HD18 = 12;
int BUTTON_HD17 = 11;
int BUTTON_HD16 = 10;
int BUTTON_HD15 = 9;
//int flag=0;
void setup()
{
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);
pinMode(8, INPUT);
pinMode(7, INPUT);
pinMode(6, INPUT);
pinMode(5, INPUT);
pinMode(4, INPUT);

pinMode(3, OUTPUT);
pinMode(2, OUTPUT);
pinMode(A4, OUTPUT);
pinMode(A5, OUTPUT);
pinMode(13, INPUT);
pinMode(12, INPUT);
pinMode(11, INPUT);
pinMode(10, INPUT);
pinMode(9, INPUT);
}
void loop()
{
if ( digitalRead(8) == HIGH )
{
analogWrite(A0, HIGH);
analogWrite(A1, HIGH);
analogWrite(A2, HIGH);
analogWrite(A3, HIGH);// включаем светодиод
delay(2000); // ждем 2 секунды
analogWrite(A0, LOW);
analogWrite(A1, LOW);
analogWrite(A2, LOW);
analogWrite(A3, LOW);// выключаем светодиод
}
if ( digitalRead(7) == HIGH )
{
  analogWrite(A0, HIGH);
  delay(2500);
  analogWrite(A0, LOW);
  }
  if ( digitalRead(6) == HIGH )
{
  analogWrite(A1, HIGH);
  delay(2500);
  analogWrite(A1, LOW);
  }
  if ( digitalRead(5) == HIGH )
{
  analogWrite(A2, HIGH);
  delay(2500);
  analogWrite(A2, LOW);
  }
  if ( digitalRead(4) == HIGH )
{
  analogWrite(A3, HIGH);
  delay(2500);
  analogWrite(A3, LOW);
  }
 

if ( digitalRead(13) == HIGH )
{
digitalWrite(3, HIGH);
digitalWrite(2, HIGH);
digitalWrite(A4, HIGH);
digitalWrite(A5, HIGH);// включаем светодиод
delay(6000); // ждем 6 секунд
digitalWrite(3, LOW);
digitalWrite(2, LOW);
digitalWrite(A4, LOW);
digitalWrite(A5, LOW);// выключаем светодиод
}
if ( digitalRead(12) == HIGH )
{
  digitalWrite(3, HIGH);
  delay(5000);
  digitalWrite(3, LOW);
  }
  if ( digitalRead(11) == HIGH )
{
  digitalWrite(2, HIGH);
  delay(5000);
  digitalWrite(2, LOW);
  }
  if ( digitalRead(10) == HIGH )
{
  analogWrite(A4, HIGH);
  delay(5000);
  analogWrite(A4, LOW);
  }
  if ( digitalRead(9) == HIGH )
{
  analogWrite(A5, HIGH);
  delay(5000);
  analogWrite(A5, LOW);
  }
}

 

evgta
Offline
Зарегистрирован: 02.09.2016

еще раз, кнопку убрать с 13 пина. Есть ли подтягивающие резисторы?

azamat alimkhan
Offline
Зарегистрирован: 17.02.2016
int EM23 = A0;//светодиод
002	int EM24 = A1;
003	int EM25 = A2;
004	int EM26 = A3;
005	int BUTTON_EM14 = 8;//кнопка
006	int BUTTON_EM13 = 7;
007	int BUTTON_EM12 = 6;
008	int BUTTON_EM11 = 5;
009	int BUTTON_EM6 = 4;

pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);
pinMode(8, INPUT);
pinMode(7, INPUT);
pinMode(6, INPUT);
pinMode(5, INPUT);
pinMode(4, INPUT);

void loop()
{
if ( digitalRead(8) == HIGH )
{
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(A3, HIGH);// включаем светодиод
delay(2000); // ждем 2 секунды
digitalWrite(A0, LOW);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
digitalWrite(A3, LOW);// выключаем светодиод
}
if ( digitalRead(7) == HIGH )
{
  digitalWrite(A0, HIGH);
  delay(2500);
  digitalWrite(A0, LOW);
  }
  if ( digitalRead(6) == HIGH )
{
  digitalWrite(A1, HIGH);
  delay(2500);
  digitalWrite(A1, LOW);
  }
  if ( digitalRead(5) == HIGH )
{
  digitalWrite(A2, HIGH);
  delay(2500);
  digitalWrite(A2, LOW);
  }
  if ( digitalRead(4) == HIGH )
{
  digitalWrite(A3, HIGH);
  delay(2500);
  digitalWrite(A3, LOW);
  }

не работает этот режим

evgta
Offline
Зарегистрирован: 02.09.2016

зачем вообще давать имена портам если в скетче этим не пользоваться?

83 строка сменить пин на любой свободный кроме а6 и а7 и 13. соответственно на него и кнопку повесить.

еще раз. стоят ли подтягивающие резисторы?

 

 

azamat alimkhan
Offline
Зарегистрирован: 17.02.2016

ДА,подтягивающие резисторы стоят

azamat alimkhan
Offline
Зарегистрирован: 17.02.2016

да причем тут 13 пин, я говорю не работает режим который подключен к 8 пину

azamat alimkhan
Offline
Зарегистрирован: 17.02.2016

8-ой пин должен включать первые 4 светодиода, он НЕ включает

13 пин включает остальные 4 светодиода, он включает

evgta
Offline
Зарегистрирован: 02.09.2016

поставь резистор, резистор , резистор, резистор, подтягивающие резистор, подтягивающие резистор

либо включи внутренний, но тогда при нажатии кнопки (замыкании) будет низкий уровень, соответственнр при отпущенной высокий

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

azamat alimkhan, Вы бы для начала опубликовали схему включения.

Без нее нет предмета для обсуждения - только домыслы.

azamat alimkhan
Offline
Зарегистрирован: 17.02.2016

Все мужики работает!!!!!Урааа