Включение-выключение светодиода одной и той же кнопкой без фиксации.

accente
Offline
Зарегистрирован: 18.09.2011

 Вобщем программить я толком еще не начал даже наверно :-) так, склеиваю куски примеров :-)

Вопрос такой: Ребят, помогите написать скетч по принципу:

есть 2 светодиода. изначальное состояние - LOW.

pin 2,3 пусть будут кнопки.

при нажатии pin2 загорается диод1, при повторном нажатии диод1 гаснет.

с pin3 и диодом2 картина та же. Работать они должны независимо.

Ну и плюс учесть дребезг контактов. Никак немогу определиться с алгоритмом (точнее просто немогу начать)

Кнопка без фиксации.

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

Первое что пришло в голову.

Возможно можно и уменьшить код или сделать его более красивым.
Если так то напишите. И мне интересно!
 

int ledPin1 = 13;                // сетодиод1
int btnPin1 = 3;  // кнопка1
int ledPin2 = 12;                // сетодиод2
int btnPin2 = 2;                 // кнопка2
int val=0;
int na=0;
int sw=0;
int codduble;
int val2=0;
int na2=0;
int sw2=0;
int codduble2;
int button[] = {
  btnPin1, btnPin2};
int Led[] = {
  ledPin1, ledPin2};
void setup()                     
{
  pinMode(ledPin1, OUTPUT);    
  pinMode(btnPin1, INPUT);      
  pinMode(ledPin2, OUTPUT);    
  pinMode(btnPin2, INPUT); 
  Serial.begin(9600);  
}


void loop()                      
{

  val = digitalRead(btnPin1);    
  val2 = digitalRead(btnPin2);    
  if(val==HIGH&&na==0)                
  {
    if(sw==0)
    {
      sw=1;
      codduble=val;
      na=1;
      digitalWrite(ledPin1, HIGH);
    }
    else
    {
      sw=0;
      codduble=val;
      na=1;
      digitalWrite(ledPin1, LOW); 
    }
  }
  
  if(val2==HIGH&&na2==0)                
  {
    if(sw2==0)
    {
      sw2=1;
      codduble2=val2;
      na2=1;
      digitalWrite(ledPin2, HIGH);
    }
    else
    {
      sw2=0;
      codduble2=val2;
      na2=1;
      digitalWrite(ledPin2, LOW); 
    }
  }
  
  if (codduble==val)
  {
    na=1;
  }
  else
    na=0;

  if (codduble2==val2)
  {
    na2=1;
  }
  else
    na2=0;
delay(10);
}

 

accente
Offline
Зарегистрирован: 18.09.2011

 Взяли готовый код из соседней ветки, малость его перелопатили, взяли отдельно 2 кнопки на подтягивающих резисторах и вместо светодиодов взяли пару реле. Ну не суть :-)

int i = 0;
int k = 0;
int val = 0;
int k1 = 0;
int val1 = 0;
int state = 0;
int old_val = 0;
int state1 = 0;
int old_val1 = 0;

void setup() {
Serial.begin(9600);
pinMode(9, OUTPUT);
pinMode(13, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(6, OUTPUT);
pinMode(8, INPUT);
pinMode(7, INPUT);
}

void loop(){
//digitalWrite(13, HIGH);

val = digitalRead(7);
val1 = digitalRead(8);

if ((val == HIGH) && (old_val == LOW)){
state = 1 - state;
k++;
delay(10);
}

if ((val1 == HIGH) && (old_val1 == LOW)){
state1 = 1 - state1;
k1++;
delay(10);
}

old_val = val; // val is now old, let's store it
old_val1 = val1; // val is now old, let's store it

if (state == 1) {
digitalWrite(6, HIGH); // turn LED ON
} else {
digitalWrite(6, LOW);
}

if (state1 == 1) {
digitalWrite(6, HIGH); // turn LED ON
} else {
digitalWrite(6, LOW);
}

//здесь все выполняеться корректно

switch (k) {
case 0:
digitalWrite(10, LOW);
break;
case 1:
digitalWrite(10, HIGH);
break;
delay(50);
digitalWrite(10, LOW);
break;
default:
k=0;
break;
}

switch (k1) {
case 0:
digitalWrite(9, LOW);
break;
case 1:
digitalWrite(9, HIGH);
break;
delay(50);
digitalWrite(9, LOW);
break;
default:
k1=0;
break;
}

// все бы хорошо.. но когда выполняеться 1 раз, все шикарно. Но когда по второму кругу идет то не смотря на то что в case 0 все пины выключены. горит аналогично case 1. case 2 выполняесться уже нормально.
// Serial.print("Knopka1= " );
// Serial.print(k);
// Serial.println("");

// Serial.print("Knopka2= " );
// Serial.print(k1);
// Serial.println("");

//digitalWrite(13, LOW);
delay(100);

}

Код еще не допилен, лишнее не убрано, но схема запустилась.

p.s. работали под пивом :-) С Дружбаном на пару )

accente
Offline
Зарегистрирован: 18.09.2011

 LEVV2006 Ваш код завтра рассмотрю детально. В данный момент уже моск нехочет думать адекватно :-)

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Это что у вас такое ?

Это зачем ?

Вот рабочая программа (на вскидку набросал).

Поймите общие принцыпы , они вам в будещем очень пригодяться.

int knopka=0;
int knopka2=0;

void setup ()
{
pinMode(13,OUTPUT);
pinMode(12,OUTPUT);
pinMode(9,INPUT);
pinMode(8,INPUT);

}

void loop ()
{//***************КНОПКА 1********************************//


if(digitalRead(8)==HIGH&&knopka==0)//если кнопка нажата
// и перемення "knopka" равна 0 , то ...
{
delay(50);//защита от дребезга
knopka++;//пишем 1 в переменную кнопка
//это нужно для того что бы с каждым нажатием кнопки
//происходило только одно действие

digitalWrite(13, !digitalRead(13));//меняем значение порта на противоположное

}

  if(digitalRead(8)==LOW&&knopka==1)//если кнопка НЕ нажата
//и переменная knopka равна - 1 ,то ...
{

knopka=0;//обнуляем переменную "knopka"
}


//***********************КНОПКА 2*****************************//


if(digitalRead(9)==HIGH&&knopka2==0)//если кнопка нажата
// и перемення "knopka2" равна 0 , то ...
{
  delay(50);
  knopka2++;//пишем 1 в переменную кнопка
//это нужно для того что бы с каждым нажатием кнопки
//происходило только одно действие
 
    digitalWrite(12,!digitalRead(12));  
}

if(digitalRead(9)==LOW&&knopka2==1)//если кнопка НЕ нажата
//и переменная knopka2 равна - 1 ,то ...
{
    knopka2=0;//обнуляем переменную "knopka2"
}

} 

 

От модератора: Поправил вывод кода. Пожалуйста пользуйтесь кнопкой вставки кода. Вторая кнопка наверху, рядом с кнопкой Источник. Так же легче читать код.

accente
Offline
Зарегистрирован: 18.09.2011

 Пасибо, сейчас обязательно просмотрю этот скетч. именно на примерах и приходится учиться, ибо так понятнее )))

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

Привольно приму к сведению))))  

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Модератору. Читать легче а вот копипастить в IDE нет (приходится в ручную удалять номера строк). 

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Я кое что поправил ...  в общем могут быть чисто "орфаграфические" ошибки (из - за невнимательности).

Alexander
Offline
Зарегистрирован: 25.04.2010

nestandart пишет:

Модератору. Читать легче а вот копипастить в IDE нет (приходится в ручную удалять номера строк).

Если навести курсор на код, то справа на уровне первых строчек возникнет меню из четырех кнопок, вторая кнопка сохраняет весь код в буфер обмена без номеров строчек - очень удобно.

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Модератору. Спасибо , не знал. 

famoso
Offline
Зарегистрирован: 02.07.2011

 Вот нашел в стандартных примерах похожий код!!!!

http://witharduino.blogspot.com/2011/12/button-state-change.html

Mastino
Offline
Зарегистрирован: 03.12.2011
CMEXIRK
Offline
Зарегистрирован: 03.04.2015

http://youtu.be/wezPs_jxPQg вот мой принцып отыграл на протеусе работу скейча, одна кнопка и два светодиода , в скейче придусмотрен дребезг кнопки на ложное срабатывание , Порядок такой  нажимаем кнопку загорается светодиод 1  и через заданное время он гаснет, нажимаем ещё раз - загорается второй светодио и гаснет через заданное время , всё прекрасно работает 

/*
 *  Включение одной кнопкой 2х нагрузок по переменки с автовыключением
 */
 
int switchPin = 2;              // замыкание кнопки на минус через резист pin 2
int led1Pin = 12;               // нагрузка 1
int led2Pin = 11;               // нагрузка 2
 
 
int val;                        // Переменная для чтения статуса контактный
int val2;                       // Переменная для чтения с задержкой / подавлением дребезга контактов статус
int buttonState;                // Переменная провести состояния кнопки
 
int lightMode = 0;              // Есть свет включен или выключен?
 
void setup() {
  pinMode(switchPin, INPUT);    // Установите пин в качестве входных данных
 
  pinMode(led1Pin, OUTPUT);     // Установите пин в качестве выходных данных
  pinMode(led2Pin, OUTPUT);     // Установите пин в качестве выходных данных
 
  
  Serial.begin(9600);                // Установите последовательную связь в 9600
  buttonState = digitalRead(switchPin);   // читать начальное состояние
}
 
void loop(){
  val = digitalRead(switchPin);      // читать входное значение и сохранить его в Val
  delay(10);                         // 10 миллисекунд хорошее количество времени
  val2 = digitalRead(switchPin);     // читать ввод снова, чтобы проверить отскоков
  if (val == val2) {                 // убедиться, что мы получили 2 показания последовательны!
    if (val != buttonState) {          // состояние кнопки изменилось!
      if (val == LOW) {                // проверить, если нажата кнопка
        if (lightMode == 0) {          // эта нагрузка включена?
          lightMode = 1;               // включить нагрузку 1
          digitalWrite(led1Pin, HIGH); // нагрузка включена
          delay(2000);                 // время до автовыключения
          digitalWrite(led1Pin, LOW);  // нагрузка выключается
 
        } else {
          lightMode = 0;               // выключить нагрузку 2
          digitalWrite(led2Pin, HIGH); // нагрузка включена
          delay(2000);                 // время до автовыключения
          digitalWrite(led2Pin, LOW);  // нагрузка выключается
 
        }
      }
    }
    buttonState = val;                 // сохранить новое значение в нашей переменной
  }
}
Pahan
Offline
Зарегистрирован: 03.02.2017

Подскажите молодому, а то в глазах рябит.

К ардуино подключен приемник на 433 Мгц.  При нажатии 1 раз кнопки на радиопульте - светодиод загорается. При повторном нажатии -светодиод выключается. Этот скетч имеется, тут я понял. Состояние пина инертируется с каждым нажатием. Так вот, если постоянно удерживать кнопку на радиопульте (приемник принимает код с периодичностью наверно 400-450мс) и светодиод постоянно мигает.

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

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();
int led  = 12;

void setup()
{
  pinMode(12, OUTPUT);
  
  mySwitch.enableReceive(0);  // Receiver on inerrupt 0 => that is pin #2
}

void loop()
{
  if (mySwitch.available())
  {
    unsigned long value = mySwitch.getReceivedValue();
    Serial.print(value);
    switch (value) {
    case 0:
    Serial.println(" - Unknown encoding");
    break;
    case 2276802:
    digitalWrite(led, !digitalRead(led));
    break;
    default:
    Serial.println(" - EROR");
         }
         mySwitch.resetAvailable();
       }
    }




 

maks_452
Offline
Зарегистрирован: 06.03.2017

Доброго времмени суток! Подскажите пожалуйста,как написать подобный скетч(управлением 2-х реле от 2-х кнопок... каждая кнопка при одном нажатии включает и отключает одно реле,при этом не машает работе другой паре - реле и кнопка! порядок запуска реле должен быть не зависимым друг от друга).

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

maks_452 Ну где-то так. Полный скетч здесь https://yadi.sk/d/Kzqip-WK3Eoc7h

Головной файл посмотреть 

/* class_module_Led.ino  
  #1 светодиод ->13
  #2 кнопка 1 -> 2 вкл светодиод
  #3 кнопка 2 -> 3 светодиод мигает
  #4 кнопка 3 -> 4 выкл светодиод
*/
// #1 светодиод
#include "Cl_module_led.h"
const byte led1_pin = 13;
Cl_module_led Led1(led1_pin); // создать
// #2 кнопка
#include "Cl_module_do_btn.h"
const byte btn1_pin = 2;
Cl_module_do_btn Btm1(btn1_pin); // создать
void Do_Btm1() {
  Led1.ON();
}
// #3 кнопка
const byte btn2_pin = 3;
Cl_module_do_btn Btm2(btn2_pin); // создать
void Do_Btm2() {
  Led1.OFF();
}
// #4 кнопка
const byte btn3_pin = 4;
Cl_module_do_btn Btm3(btn3_pin); // создать
void Do_Btm3() {
  Led1.blink();
}
void setup() {
  //#1 светодиод
  Led1.T_blink = 500; // частота мигания
  Led1.logic = 1;// зажигать светодиод если на выводе 0
  Led1.setup();
  //#2 кнопка 1
  Btm1.setup();
  //#3 кнопка 2
  Btm2.setup();
  //#4 кнопка 3
  Btm3.setup();
}

void loop() {
  // #1 светодиод
  Led1.loop();
  // #2 кнопка 1
  Btm1.loop(& Do_Btm1);
  // #3 кнопка 2
  Btm2.loop(& Do_Btm2);
  // #4 кнопка 3
  Btm3.loop(& Do_Btm3);
}

 

IK10
Offline
Зарегистрирован: 13.08.2017

Загружаю на ардуино пишет ошибка

Arduino: 1.8.3 (Windows 7), Плата:"Arduino/Genuino Uno"
 
sketch_aug13c_knopka_2:16: error: invalid digit "8" in octal constant
 
 08
 
 ^
 
sketch_aug13c_knopka_2:18: error: invalid digit "9" in octal constant
 
 09
 
 ^
 
sketch_aug13c_knopka_2:2: error: expected unqualified-id before numeric constant
 
 01
 
 ^
 
sketch_aug13c_knopka_2:4: error: expected unqualified-id before numeric constant
 
 02
 
 ^
 
sketch_aug13c_knopka_2:6: error: expected unqualified-id before numeric constant
 
 03
 
 ^
 
sketch_aug13c_knopka_2:10: error: expected initializer before numeric constant
 
 05
 
 ^
 
sketch_aug13c_knopka_2:24: error: expected unqualified-id before numeric constant
 
 12
 
 ^
 
exit status 1
invalid digit "8" in octal constant
 
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
 
в чем проблема?
мне нужно чтобы при замкнутой кнопке включялось реле, при разомкнутой отключялось
Помогите пожалуйста

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

IK10 пишет:

в чем проблема?

мне нужно чтобы при замкнутой кнопке включялось реле, при разомкнутой отключялось

Помогите пожалуйста
 
1 вы неправильно скопировали код  сайта
2- в даном случае надо качать с яндекс диска
3- этот код отличается от вашей хотелки.
 Вот ваш код 
/**/
uint32_t mill;// переменная под millis()
//---------Cl_Led----------------------------------
//класс светодиод
class Cl_Led {
    uint8_t bit ;  // номер бита в виде 00010000,1 находится там где выход
    volatile uint8_t *reg; // указатель на регистр настройки порта
    volatile uint8_t *out; // указатель на регистр входа порта
    bool inv;// состояние бита инверсии выхода
    bool stat;// 1 мигать / 0 нет
    unsigned long past, time;
  public:
    /*
      конструктор Cl_Led
      Описание создает класс
      Ввод     pin: подключение к ноге
             inv: бит инвертирования 0 нет / 1 инверсия
      Вывод    нет
    */
    Cl_Led   (uint8_t pin, uint8_t _inv = 0): inv(_inv) {
      bit  = digitalPinToBitMask(pin);
      uint8_t port = digitalPinToPort(pin); // получить номер порта
      reg  = portModeRegister(port);
      out  = portOutputRegister(port);
    }
    /*
      Функция  setup
      Описание иницирование класса
      Ввод     нет
      Вывод    нет
    */
    void setup() {
      uint8_t oldSREG = SREG;
      cli();
      *reg |= bit;
      if (inv) *out &= ~bit;
      else *out |= bit;
      SREG = oldSREG;
      stat = 0;
    }
    /*
      Функция  OFF
      Описание выключить светодиод
      Ввод     нет
      Вывод    нет
    */
    void OFF() {
      uint8_t oldSREG = SREG;
      cli();
      if (inv) *out &= ~bit;
      else *out |= bit;
      SREG = oldSREG;
      stat = 0;
    }
    /*
      Функция  ON
      Описание включить светодиод
      Ввод     нет
      Вывод    нет
    */
    void ON() {
      uint8_t oldSREG = SREG;
      cli();
      if (inv) *out |= bit;
      else *out &= ~bit;
      SREG = oldSREG;
      stat = 0;
    }
    /*
      Функция  blink
      Описание мигать светодиодои
      Ввод     _time  - полупериод мигания
      Вывод    нет
    */
    void blink(unsigned long _time = 500) {
      time = _time;
      stat = 1;
      past = mill;
      uint8_t oldSREG = SREG;
      cli();
      *out ^= bit;
      SREG = oldSREG;
    }
    /*
      Функция  loop
      Описание для нормальной работе разместить в loop программы
      Ввод     нет
      Вывод    нет
    */
    void loop() {
      if (!stat) return;
      if (mill - past >= time) {
        past = mill;
        uint8_t oldSREG = SREG;
        cli();
        *out ^= bit;
        SREG = oldSREG;
      }
    }
};
//------Cl_Btn------------------------------------------
// класс кнопка c програмной подтяжкой
class Cl_Btn {
    uint8_t bit ;  // номер бита в виде 00010000,1 находится там где выход
    volatile uint8_t *reg; // указатель на регистр настройки порта
    volatile uint8_t *out; // указатель на регистр выхода порта
    uint8_t port; // номер порта на выводе
    const byte pin;
    void (*Do1)(), (*Do2)();
    bool btn, btn_old, btn_new;
    bool bounce = 0; // антидребезговый флаг
    uint32_t past = 0 ;
  public:
    /*
      конструктор Cl_Btn
      Описание создает класс
      Ввод     pin: подключение к ноге
             _Do1: фунция обработчик нажатия кнопки
             _Do2: фунция обработчик отжатия кнопки
      Вывод    нет
    */
    Cl_Btn(byte pin, void (*_Do1)(), void (*_Do2)()):  Do1(_Do1), Do2(_Do2) {
      bit  = digitalPinToBitMask(pin);
      port = digitalPinToPort(pin); // получить номер порта
      reg  = portModeRegister(port);
      out  = portOutputRegister(port);
    }
    /*
      Функция  setup
      Описание иницирование класса
      Ввод     нет
      Вывод    нет
    */
    void setup() {
      uint8_t oldSREG = SREG;
      cli();
      *reg &= ~bit; //INPUT
      *out |= bit; //PULLUP
      SREG = oldSREG;
      btn_old = (*portInputRegister(port) & bit) == 0;
    }
    /*
      Функция  loop
      Описание для нормальной работе разместить в loop программы
      Ввод     нет
      Вывод    нет
    */
    void loop() {
      btn_new = (*portInputRegister(port) & bit) == 0;
      if (! bounce && btn != btn_new) { // если прошел фронт изм на выводн
        bounce = 1;                              // выставить флаг
        past = mill;                         // сделать временую засветку
      }
      else if ( bounce && mill - past >= 5 ) { // если прошло антидребезговое время
        bounce = 0;                                // то снять флаг
        btn_old = btn ;
        btn = btn_new ;  // прочитать реальное значение на выводе
        if (btn_old && ! btn)(*Do1)();
        if (!btn_old && btn)(*Do2)();
      }
    }
};
//-------------компоновка-----------------------------------
Cl_Led Led1(/*пин*/13,/*инв*/1);
void Do1_Btn1() {
  Led1.ON();
}
void Do2_Btn1() {
  Led1.OFF();
}
Cl_Btn Btn1(/*пин*/2,/*обраб наж*/Do1_Btn1,/*обраб отж*/Do2_Btn1);
//-------------main()-----------------------------------
void setup() {
  Led1.setup();
  Btn1.setup();
}

void loop() {
  mill = millis();
  Led1.loop();
  Btn1.loop();
}
/*Скетч использует 1308 байт (4%) памяти устройства. Всего доступно 32256 байт.
  Глобальные переменные используют 47 байт (2%) динамической памяти, оставляя 2001 байт для локальных переменных. Максимум: 2048 байт.
*/

Кнопку подлючать земля вывод, без резистора.

 

IK10
Offline
Зарегистрирован: 13.08.2017

Спасибо огромное

IK10
Offline
Зарегистрирован: 13.08.2017
/* Блокировка ворот
   Включяется реле (вывод 4) при нажатии кнопки (вывод 2) 
   Включяется реле (вывод 8) при нажатии кнопки (вывод 7)*/
  
boolean buttonState;   // создаем глобальную переменную buttonState
    
 void setup() {
  pinMode(4, OUTPUT);        // определяем вывод 4 (Реле 1) как выход
  pinMode(2, INPUT_PULLUP);  // определяем вывод 2 (кнопка) как вход
  pinMode(8, OUTPUT);        // определяем вывод 8 (Реле 2) как выход
  pinMode(7, INPUT_PULLUP);  // определяем вывод 7 (кнопка) как вход
}
 
//  бесконечный цикл
void loop() {
  buttonState = digitalRead(2);  // считываем состояние 2 входа (кнопки) и записываем в buttonState
  buttonState = ! buttonState;    // инверсия переменной buttonState 
  digitalWrite(4, buttonState);  // записываем состояние из buttonState на выход 4 (Реле 1)
  buttonState = digitalRead(7);  // считываем состояние 7 входа (кнопки) и записываем в buttonState
  buttonState = ! buttonState;    // инверсия переменной buttonState 
  digitalWrite(8, buttonState);  // записываем состояние из buttonState на выход 8 (Реле 2)
}
вот что получилось
работает
еще раз спасибо
qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ну скорее всего так надо 

/* Блокировка ворот
   Включяется реле (вывод 4) при нажатии кнопки (вывод 2)
   Включяется реле (вывод 8) при нажатии кнопки (вывод 7)
*/
//--------------------------------------------------------
//----------------Компановка----------------------------------------
const byte relay1Pin =/*пин реле1*/   4;
const byte relay2Pin =/*пин реле2*/   8;
const byte btn1Pin   =/*пин кнопка1*/ 2;
const byte btn2Pin   =/*пин кнопка2*/ 7;
//------------------main--------------------------------------
void setup() {
  pinMode(relay1Pin, OUTPUT);  
  pinMode(btn1Pin, INPUT_PULLUP);
  pinMode(relay2Pin, OUTPUT);     
  pinMode(btn2Pin, INPUT_PULLUP);  
}
void loop() {
  digitalWrite(relay1Pin, !digitalRead(btn1Pin));
  digitalWrite(relay2Pin, !digitalRead(btn2Pin));
}
/*Скетч использует 986 байт (3%) памяти устройства. Всего доступно 32256 байт.
  Глобальные переменные используют 9 байт (0%) динамической памяти, оставляя 2039 байт для локальных переменных. Максимум: 2048 байт.
*/

 

Warn
Offline
Зарегистрирован: 13.01.2012

qwone пишет:

Ну скорее всего так надо 

/* Блокировка ворот
   Включяется реле (вывод 4) при нажатии кнопки (вывод 2)
   Включяется реле (вывод 8) при нажатии кнопки (вывод 7)
*/
//--------------------------------------------------------
//----------------Компановка----------------------------------------
const byte relay1Pin =/*пин реле1*/   4;
const byte relay2Pin =/*пин реле2*/   8;
const byte btn1Pin   =/*пин кнопка1*/ 2;
const byte btn2Pin   =/*пин кнопка2*/ 7;
//------------------main--------------------------------------
void setup() {
  pinMode(relay1Pin, OUTPUT);  
  pinMode(btn1Pin, INPUT_PULLUP);
  pinMode(relay2Pin, OUTPUT);     
  pinMode(btn2Pin, INPUT_PULLUP);  
}
void loop() {
  digitalWrite(relay1Pin, !digitalRead(btn1Pin));
  digitalWrite(relay2Pin, !digitalRead(btn2Pin));
}
/*Скетч использует 986 байт (3%) памяти устройства. Всего доступно 32256 байт.
  Глобальные переменные используют 9 байт (0%) динамической памяти, оставляя 2039 байт для локальных переменных. Максимум: 2048 байт.
*/

 

в предыдущем примере так-же, только у вас короче :) Вот только можно же напрямую с кнопки тогда включить нагрузку, без ардуино.

Platnum
Offline
Зарегистрирован: 04.05.2018
bool _bounseInputD3S = 0;
bool _bounseInputD3O = 0;
unsigned long _bounseInputD3P = 0UL;
bool _trgt1 = 0;
bool _trgt1I = 0;
bool _trgt2 = 0;
bool _trgt2I = 0;
bool _bounseInputD2S = 0;
bool _bounseInputD2O = 0;
unsigned long _bounseInputD2P = 0UL;
void setup()
{
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);

_bounseInputD2O =  digitalRead(2);
_bounseInputD3O =  digitalRead(3);
}
void loop()
{
bool  _bounceInputTmpD2 =  (digitalRead (2));

if (_bounseInputD2S) 
    {
     if (millis() >= (_bounseInputD2P + 40)) 
         {_bounseInputD2O= _bounceInputTmpD2; _bounseInputD2S=0;}
     }
else
    {
     if (_bounceInputTmpD2 != _bounseInputD2O )
         {_bounseInputD2S=1; _bounseInputD2P = millis();} 
      } 
bool  _bounceInputTmpD3 =  (digitalRead (3));

if (_bounseInputD3S) 
    {
     if (millis() >= (_bounseInputD3P + 40)) 
         {_bounseInputD3O= _bounceInputTmpD3; _bounseInputD3S=0;}
     }
else
    {
     if (_bounceInputTmpD3 != _bounseInputD3O )
         {_bounseInputD3S=1; _bounseInputD3P = millis();} 
      } 
//Плата:1
bool  _tmp1 = _bounseInputD2O;
if (_tmp1)  { if (! _trgt1I) _trgt1 = ! _trgt1; } 
_trgt1I = _tmp1; 
digitalWrite(4, _trgt1);
bool  _tmp2 = _bounseInputD3O;
if (_tmp2)  { if (! _trgt2I) _trgt2 = ! _trgt2; } 
_trgt2I = _tmp2; 
digitalWrite(5, _trgt2);
}

Как то так, стягивающий резистор на землю, для каждой кнопки свой

Serega87
Offline
Зарегистрирован: 24.05.2018

Надо задание сделать

b707
Offline
Зарегистрирован: 26.05.2017

Serega87 пишет:
Надо задание сделать

шел бы ты отсюда... учиться. Тут тебе не обломится.

Serega87
Offline
Зарегистрирован: 24.05.2018

Какой ты добрый

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Serega87 пишет:
Надо задание сделать

Задание может и тебе сделают, но за то ты потом учителю не сдашь. Первый вопрос и посыпишься, как песочный замок. #7

Serega87
Offline
Зарегистрирован: 24.05.2018

Есть 3 кнопки и 3 диода.условие включения для красного светодиода одновременно включены 1 и 3 тумблер.условия включения желтого светодиода одновременно включен 2 и 3 тумблер.условия включения зеленого светодиода одновременно выключен 1 и 2 тумблер а также включен 3 тумблер..кнопки подключены на плате 8,7,6, а диоды 13,12,11.мне просто не понятно где писать setup или в loop

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Serega87 пишет:
мне просто не понятно где писать setup или в loop

Код в setup выполняется один раз при старте, а код в loop выполняется постоянно (зациклено). Решай сам, где тебе писать.

Serega87
Offline
Зарегистрирован: 24.05.2018

Как примерно написать ?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Serega87 пишет:
Как примерно написать ?

Примерно как в этой теме выше.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ну и дальше

Serega87
Offline
Зарегистрирован: 24.05.2018

Напиши пару строк как писать

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Serega87 пишет:
Напиши пару строк как писать

void setup() {}
void loop() {}

 

Serega87
Offline
Зарегистрирован: 24.05.2018

Что писать в setup a что в loop

Coolerr
Offline
Зарегистрирован: 30.06.2014

В сетуп пишется инициализация переферии, в луп алгоритм поведения переферии описаной в сетуп.

Serega87
Offline
Зарегистрирован: 24.05.2018

Все равно не понял

kalapanga
Offline
Зарегистрирован: 23.10.2016

Serega87 пишет:
Все равно не понял

Вам в другой раздел: Ищу исполнителя

b707
Offline
Зарегистрирован: 26.05.2017

Serega87 пишет:
Все равно не понял

15 тыс рублей

Kakmyc
Offline
Зарегистрирован: 15.01.2018

boolean flag1=0;
boolean flag2=0;
boolean diod1=0;
boolean diod2=0;
#define knopka1 3
#define knopka2 4

void setup(){

pinMode(knopka1,INPUT_PULLUP);
pinMode(knopka2,INPUT_PULLUP);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
}

void loop(){

if(knopka1==0&&flag1==0){diod1=!diod1;flag1=1;}
if(knopka1==1){flag1=0;}
digitalWrite(5,diod1);

if(knopka2==0&&flag2==0){diod2=!diod2;flag2=1;}
if(knopka2==1){flag2=0;}
digitalWrite(6,diod2);
}

b707
Offline
Зарегистрирован: 26.05.2017

Kakmyc - и к чему вы это написали?

Во-первых, не соответствует ТЗ, во-вторых - код достаточно бредовый, работать (разумно) не будет.

Идите учитесь дальше.