Реле и Arduino

sputniksat
Offline
Зарегистрирован: 02.02.2016

Помогите новичку с написанием кода....Нужно при кратковременном нажатии на кнопку чтобы включилось реле на 1сек. выключилось включилось на 0.5сек. и выключилось до следущего нажатия кнопки.

Собираю в Ардублок получается только или включить или выключить.

Radjah
Offline
Зарегистрирован: 06.08.2014

А где код? С чем помогать?

dmitron1036
Offline
Зарегистрирован: 10.01.2016
loop(){
if( digitalRead(pin1) ){
digitalWrite(pin2, HIGH);
delay(1000);
digitalWrite(pin2, LOW);
}
}

 

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014
loop(){
if( digitalRead(pin1) ){
  digitalWrite(pin2, HIGH);//Вк. на секунду
  delay(1000);
  digitalWrite(pin2, LOW);//Вык. на 0.5сек.
  delay(500);
  digitalWrite(pin2, HIGH);//Вк. на 0.5сек.
  delay(500);
  digitalWrite(pin2, LOW);//Вык.
 }
}

 

sputniksat
Offline
Зарегистрирован: 02.02.2016
#include <TinkerKit.h>
 
void setup()
{
pinMode( 8 , INPUT);
pinMode( 2 , OUTPUT);
}
 
void loop()
{
if (digitalRead( 8))
{
digitalWrite( 2 , LOW );
}
else
{
digitalWrite( 2 , HIGH );
}
}
 
 
нажал кнопку реле включилось...отпустил выключилось
sputniksat
Offline
Зарегистрирован: 02.02.2016
01 loop(){
02 if( digitalRead(pin1) ){
03   digitalWrite(pin2, HIGH);//Вк. на секунду
04   delay(1000);
05   digitalWrite(pin2, LOW);//Вык. на 0.5сек.
06   delay(500);
07   digitalWrite(pin2, HIGH);//Вк. на 0.5сек.
08   delay(500);
09   digitalWrite(pin2, LOW);//Вык.
10  }
11 }

 

ничего неполучается....само включается выключается

dmitron1036
Offline
Зарегистрирован: 10.01.2016

1)

pinMode( 8 , INPUT);

замени на pullup

2) используй delay

dmitron1036
Offline
Зарегистрирован: 10.01.2016

схема твоя где?

подтяжку поставил?

sputniksat
Offline
Зарегистрирован: 02.02.2016

да поставил.... нажимаю кнопку реле включилось отпускаю выкл. А чтобы нажать кнопку и  реле  включилось на 1 сек потом выключилось потом включилось на 0.5 сек и выключилось до следующего нажатия кнопкии неполучается

sputniksat
Offline
Зарегистрирован: 02.02.2016

белый провод замыкаю на + реле вкл.   размыкаю выкл.

dmitron1036
Offline
Зарегистрирован: 10.01.2016

схемку нарисуй плз.

можно попробовать 

if( digitalRead(pin1) == HIGH ){...

sputniksat
Offline
Зарегистрирован: 02.02.2016
#include <TinkerKit.h>
 
void setup()
{
pinMode( 8 , INPUT);
pinMode( 2 , OUTPUT);
}
 
void loop()
{
if (digitalRead( 8) == HIGH )
{
digitalWrite( 2 , LOW );
}
else
{
digitalWrite( 2 , HIGH );
       delay( 100 );
                digitalWrite( 2 , LOW );
                delay( 100 );
                digitalWrite( 2 , HIGH );
                delay( 500 );
                digitalWrite( 2 , LOW );
}
}
........ЗАГРУЖАЮ ....и начинают тикать реле как часики....кнопку замыкаю на + то реле вкл. и нетикает пока неотпущу кнопку.......А чтобы нажать кнопку и  реле  включилось на 1 сек ,потом выключилось ,потом включилось на 0.5 сек и выключилось до следующего нажатия кнопкии неполучается
dmitron1036
Offline
Зарегистрирован: 10.01.2016

тестер есть? 

смотри напряжение на dpin 8

sputniksat
Offline
Зарегистрирован: 02.02.2016

dpin 8 рабочий .....я его замыкаю на + реле срабатывает

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

sputniksat пишет:

Помогите новичку с написанием кода....Нужно при кратковременном нажатии на кнопку чтобы включилось реле на 1сек. выключилось включилось на 0.5сек. и выключилось до следущего нажатия кнопки.

Собираю в Ардублок получается только или включить или выключить.

выключалось на сколько секунд?

sputniksat
Offline
Зарегистрирован: 02.02.2016

1.Нажимаю копку (кратковременное нажатие)

2.Включается реле на 1 секунду

3.Выключается на 0.5 секунды

4.Включается на 0.5 секунды

5.Выключается (до следующего  кратковременного нажатия кнопки)

krepton85
Offline
Зарегистрирован: 02.02.2016

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

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

krepton85 пишет:

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

я уверен.

Datak
Offline
Зарегистрирован: 09.10.2014


#include <TinkerKit.h>
  
 void setup()
 {
    pinMode( 8 , INPUT);
    pinMode( 2 , OUTPUT);
 }
  
 void loop()
 {
    if (digitalRead( 8) == LOW )
    {
       digitalWrite( 2 , HIGH );
    }
    else
    {
       digitalWrite( 2 , LOW );
       delay( 1000 );
       digitalWrite( 2 , HIGH );
       delay( 500 );
       digitalWrite( 2 , LOW );
       delay( 500 );
       digitalWrite( 2 , HIGH );
    }
 }

Так попробуйте.
И, да, правильно Вам пишут - схема нужна. Точно на "+" кнопку замыкаете?

sputniksat
Offline
Зарегистрирован: 02.02.2016

sputniksat
Offline
Зарегистрирован: 02.02.2016
#include <TinkerKit.h>
 
void setup()
{
pinMode( 8 , INPUT);
pinMode( 2 , OUTPUT);
}
 
void loop()
{
if (digitalRead( 8))
{
digitalWrite( 2 , LOW );
}
else
{
digitalWrite( 2 , HIGH );
}
}
 
Если делаю так . то просто нажимаю кнопку включается реле а отпускаю выключается
 
                digitalWrite( 2 , HIGH );           
                delay( 1000 );
                digitalWrite( 2 , LOW );
                delay( 500 );
                digitalWrite( 2 , HIGH );
                delay( 500 );
                digitalWrite( 2 , LOW );
 
Если добавляю так то начинает релюха срабатывать без нажатия..

 

Radjah
Offline
Зарегистрирован: 06.08.2014

Ты в алгоритм глазами или жопой смотришь?

Если на 8 пин к земле притянут, то релюху включить, иначе щелкать по алгоритму.

sputniksat
Offline
Зарегистрирован: 02.02.2016

так как сделать то ...обьясните плиззз....

Nosferatu
Offline
Зарегистрирован: 04.11.2012

sputniksat пишет:

#include <TinkerKit.h>
 
void setup()
{
pinMode( 8 , INPUT);
pinMode( 2 , OUTPUT);
}
 
void loop()
{
if (digitalRead( 8) == HIGH )
{
digitalWrite( 2 , LOW );
}
else
{
digitalWrite( 2 , HIGH );
       delay( 100 );
                digitalWrite( 2 , LOW );
                delay( 100 );
                digitalWrite( 2 , HIGH );
                delay( 500 );
                digitalWrite( 2 , LOW );
}
}
........ЗАГРУЖАЮ ....и начинают тикать реле как часики....кнопку замыкаю на + то реле вкл. и нетикает пока неотпущу кнопку.......А чтобы нажать кнопку и  реле  включилось на 1 сек ,потом выключилось ,потом включилось на 0.5 сек и выключилось до следующего нажатия кнопкии неполучается

Ну так заменить тогда

if (digitalRead( 8) == HIGH )

на

if(digitalRead(8)==LOW)

И будет счастье.

 

#include <TinkerKit.h>

void setup()
{
pinMode( 8 , INPUT);
pinMode( 2 , OUTPUT);
}

void loop()
{
if (digitalRead( 8) == LOW )
{
digitalWrite( 2 , LOW );
}
else
{
digitalWrite( 2 , HIGH );
       delay( 100 );
                digitalWrite( 2 , LOW );
                delay( 100 );
                digitalWrite( 2 , HIGH );
                delay( 500 );
                digitalWrite( 2 , LOW );
}
}

 

sputniksat
Offline
Зарегистрирован: 02.02.2016

Nosferatu пишет:

sputniksat пишет:

#include <TinkerKit.h>
 
void setup()
{
pinMode( 8 , INPUT);
pinMode( 2 , OUTPUT);
}
 
void loop()
{
if (digitalRead( 8) == HIGH )
{
digitalWrite( 2 , LOW );
}
else
{
digitalWrite( 2 , HIGH );
       delay( 100 );
                digitalWrite( 2 , LOW );
                delay( 100 );
                digitalWrite( 2 , HIGH );
                delay( 500 );
                digitalWrite( 2 , LOW );
}
}
........ЗАГРУЖАЮ ....и начинают тикать реле как часики....кнопку замыкаю на + то реле вкл. и нетикает пока неотпущу кнопку.......А чтобы нажать кнопку и  реле  включилось на 1 сек ,потом выключилось ,потом включилось на 0.5 сек и выключилось до следующего нажатия кнопкии неполучается

Ну так заменить тогда

if (digitalRead( 8) == HIGH )

на

if(digitalRead(8)==LOW)

И будет счастье.

 

#include <TinkerKit.h>

void setup()
{
pinMode( 8 , INPUT);
pinMode( 2 , OUTPUT);
}

void loop()
{
if (digitalRead( 8) == LOW )
{
digitalWrite( 2 , LOW );
}
else
{
digitalWrite( 2 , HIGH );
       delay( 100 );
                digitalWrite( 2 , LOW );
                delay( 100 );
                digitalWrite( 2 , HIGH );
                delay( 500 );
                digitalWrite( 2 , LOW );
}
}

 

нет щасья.....нажимаешь кнопку и начинает тикать как часы

Nosferatu
Offline
Зарегистрирован: 04.11.2012

sputniksat пишет:

нет щасья.....нажимаешь кнопку и начинает тикать как часы

Надо настроить параметры  delay().
Я просто скопировал ваш код, как было.
delay(1000); это 1 секунда.

sputniksat
Offline
Зарегистрирован: 02.02.2016

Nosferatu пишет:

sputniksat пишет:

нет щасья.....нажимаешь кнопку и начинает тикать как часы

Надо настроить параметры  delay().
Я просто скопировал ваш код, как было.
delay(1000); это 1 секунда.

да вкурсе delay(1000); это 1 секунда.....надо чтобы программа при нажатии незацикливалась как она делает в данном скетче а выполнила задачу и остановилась

sputniksat
Offline
Зарегистрирован: 02.02.2016

ЗАДАЧА 

1.Нажать копку (кратковременное или длительное нажатие)

2.Включается реле на 1 секунду

3.Выключается на 0.5 секунды

4.Включается на 0.5 секунды

5.Выключается (до следующего  кратковременного или длинного нажатия кнопки)

Nosferatu
Offline
Зарегистрирован: 04.11.2012
#include <TinkerKit.h>

void setup()
{
pinMode(8, INPUT);
pinMode(2, OUTPUT);
}

void loop()
{
if (digitalRead(8) == LOW)
{
digitalWrite(2 , LOW);
}
else
{
digitalWrite(2 , HIGH);// Включение
       delay(1000);// Пауза 1 секунда
       digitalWrite( 2 , LOW);// Выключение
       delay(500);// Пауза 0.5 секунды
       digitalWrite( 2 , HIGH);// Включение
       delay(500);// Пауза 0.5 секунды
       digitalWrite(2 , LOW);// Выключение
}
}

Примерно так.

Nosferatu
Offline
Зарегистрирован: 04.11.2012

Если нажатие больше 2 секунд, то цикл включения- выключения реле повторится.

sputniksat
Offline
Зарегистрирован: 02.02.2016

Nosferatu пишет:

Если нажатие больше 2 секунд, то цикл включения- выключения реле повторится.

Спасибо...работает!!!

Nosferatu
Offline
Зарегистрирован: 04.11.2012
#include <TinkerKit.h>
int f=0;
void setup()
{
pinMode(8, INPUT);
pinMode(2, OUTPUT);
}

void loop()
{
if (digitalRead(8) == LOW&&f==0)
{
digitalWrite(2 , LOW);
f=0;
}
else
{
digitalWrite(2 , HIGH);// Включение
delay(1000);// Пауза 1 секунда
digitalWrite( 2 , LOW);// Выключение
delay(500);// Пауза 0.5 секунды
digitalWrite( 2 , HIGH);// Включение
delay(500);// Пауза 0.5 секунды
digitalWrite(2 , LOW);// Выключение
f=1;
}
}

Ввёл новую переменную f которая принимает значение 1 при нажатии и сбрасывается в 0 при отпускании кнопки.

sputniksat
Offline
Зарегистрирован: 02.02.2016

sputniksat пишет:

Nosferatu пишет:

Если нажатие больше 2 секунд, то цикл включения- выключения реле повторится.

Спасибо...работает!!!

ТОЛЬКО КНОПКУ БОЛЕЕ 2 СЕКУНДЫ ДЕРЖАТЬ ТО ЗАЦИКЛИТСЯ :(

Nosferatu
Offline
Зарегистрирован: 04.11.2012

Накасячил в последнем коде, его не копировать.

Ушол, исправлять не буду.

sputniksat
Offline
Зарегистрирован: 02.02.2016

Nosferatu пишет:

Накасячил в последнем коде, его не копировать.

Ушол, исправлять не буду.

УЖЕ ПОНЯЛ

Nosferatu
Offline
Зарегистрирован: 04.11.2012
#include <TinkerKit.h>
int f=0;// Флаг нажатия кнопки
void setup()
{
pinMode(8, INPUT);
pinMode(2, OUTPUT);
}

void loop()
{
if (digitalRead(8) == LOW)
{
digitalWrite(2 , LOW);
f=0;// Сброс флага нажатия кнопки
}
if (digitalRead(8) == HIGH && f == 0)
{
digitalWrite(2 , HIGH);// Включение
delay(1000);// Пауза 1 секунда
digitalWrite( 2 , LOW);// Выключение
delay(500);// Пауза 0.5 секунды
digitalWrite( 2 , HIGH);// Включение
delay(500);// Пауза 0.5 секунды
digitalWrite(2 , LOW);// Выключение
f=1;// Установка флага нажатия кнопки
}
}

Вот это по идеи должно работать.

Radjah
Offline
Зарегистрирован: 06.08.2014

int f=0;// Флаг нажатия кнопки

long надо, а то не вместится. :D

Nosferatu
Offline
Зарегистрирован: 04.11.2012

Radjah пишет:

int f=0;// Флаг нажатия кнопки

long надо, а то не вместится. :D

Понимаю вашу иронию. Но тут вопрос нехватки памяти не стоит. А мне, как не профессиональному программисту, чем меньше букв, тем проще. Поэтому  int а не boolean.