Страница 1 из 3

выключатель с обратной связью на Arduino

Добавлено: Вс мар 20, 2016 11:42 pm
LSE100
Задача очень простая, сделать выключатель лампочки чтобы можно было включать/выключать с кнопки и в MJM обновлялся статус этой кнопки и в то же время можно было выключить/включить через MJM


Вот чего добился:

в сценариях MJM на кнопку включить:

Код: Выделить всё

$cmdUrl = "http://127.0.0.3:8080/command?500"; getURL($cmdUrl,0);
$this->setProperty("status",1); 
выключить:

Код: Выделить всё

$cmdUrl = "http://127.0.0.3:8080/command?499"; getURL($cmdUrl,0);
$this->setProperty("status",0); 


все работает но через Ж... :
1. кнопки приходится нажимать включить/выключить через разные выводы
2. если выключать через arduino отправляет запрос на MJM и только тогда переключается что не есть хорошо.
(сори если туплю где то только вникаю в программирование и MJM)

скетч на arduino

Код: Выделить всё

int incomingInt = 0;


char buf[80];

// Функция отправки HTTP-запроса на сервер
void sendHTTPRequest() {
Serial.println(buf); 
}

// задаем константы
const int buttonPin = 2; // номер входа, подключенный к кнопке
const int buttonPin10 = 10; // номер входа, подключенный к кнопке


int Relay = 4; // реле 4

// переменные
int buttonState = 0; // переменная для хранения состояния кнопки
int buttonState10 = 0; // переменная для хранения состояния кнопки

void setup()
{
Serial.begin(115200); 



// инициализируем пин, подключенный к реле 4, как выход
pinMode(Relay, OUTPUT); 


// инициализируем пин, подключенный к кнопке, как вход
pinMode(buttonPin, INPUT); 
pinMode(buttonPin10, INPUT); 

}

void loop()

// считываем значения с входа кнопки
 
{

 
   
if (Serial.available() > 0)

incomingInt = Serial.parseInt();
if (incomingInt == 500) {
digitalWrite(Relay, LOW);
}
if (incomingInt == 499) {
digitalWrite(Relay, HIGH);

}


    buttonState = digitalRead(buttonPin);
    buttonState10 = digitalRead(buttonPin10);

  if (buttonState10 == HIGH) {   

       digitalWrite(Relay, HIGH);
       sprintf(buf, "GET /objects/?object=Switch1&op=m&m=turnOff&", 1) ;
       sendHTTPRequest(); 
       delay(1000); 
}

if (buttonState == HIGH) {   

       digitalWrite(Relay, LOW);
       sprintf(buf, "GET /objects/?object=Switch1&op=m&m=turnOn&", 1) ;
       sendHTTPRequest(); 
       delay(1000); 
}


Re: выключатель с обратной связью на Arduino

Добавлено: Пн мар 21, 2016 1:35 am
slgeo
Ничего не понятно. Если хотите получить ответ на свой вопрос, то:
1) используйте знаки препинания;
2) код для читабельности заворачивайте в спец-тег code;
3) излагайте внятно свои мысли.

Re: выключатель с обратной связью на Arduino

Добавлено: Пн мар 21, 2016 8:57 am
slgeo
Создайте метод Switched, который будет переключать из одного состояния (status) в другое. Его и будете вызывать из меню МД для выключателя. Выключатель в МД свяжите с методом и свойством status.
Скетч тоже надо переписать на одну кнопку. Желательно сохранять статус в энергонезависимой памяти EEPROM, чтобы при отключении питания знать последнее состояние.

Re: выключатель с обратной связью на Arduino

Добавлено: Пн мар 21, 2016 9:56 am
LSE100
slgeo писал(а):Создайте метод Switched, который будет переключать из одного состояния (status) в другое. Его и будете вызывать из меню МД для выключателя. Выключатель в МД свяжите с методом и свойством status.
Скетч тоже надо переписать на одну кнопку. Желательно сохранять статус в энергонезависимой памяти EEPROM, чтобы при отключении питания знать последнее состояние.

Возможно у кого то есть примеры кода как это все грамотно организовать, думаю это самая базовая функцию любого умного дома. В явном виде для выключателя на arduino не смог найти пример кода.

Re: выключатель с обратной связью на Arduino

Добавлено: Пн мар 21, 2016 10:40 am
slgeo
Ну, там же все тривиально совсем )
Навскидку...

Код: Выделить всё

boolean status;
if (status == true) {
  digitalWrite(Relay, LOW);
  status = false;
}
else
{
  digitalWrite(Relay, HIGH);
  status = true;
}
 

Re: выключатель с обратной связью на Arduino

Добавлено: Чт мар 24, 2016 10:40 am
LSE100
С arduino разобрался переключает по одной кнопке, теперь не могу понять с настройкой MJ
Есть 4 метода(это в базовой установке кнопка) Switch1:
1. refresh - его не трогаю
2. switch

Код: Выделить всё

$status=$this->getProperty("status");
if ($status) {
 $this->callMethod('turnOff');
} else {
 $this->callMethod('turnOn');
} 
3. turnOff

Код: Выделить всё

$this->setProperty("status",0);
$cmdUrl = "http://127.0.0.3:8080/command?499"; getURL($cmdUrl,0);
 
4. turnON

Код: Выделить всё

$this->setProperty("status",1);
$cmdUrl = "http://127.0.0.3:8080/command?500"; getURL($cmdUrl,0);
 
Когда я из Arduino запрашиваю метод switch

Код: Выделить всё

http://127.0.0.1:80/objects/?object=Switch1&op=m&m=switch& 
у меня срабатывает команда отправки обратно в Arduino

Код: Выделить всё

$cmdUrl = "http://127.0.0.3:8080/command?499"; getURL($cmdUrl,0); 
Как сделать так чтобы если пришла команда от Arduino на смену статуса она не уходила обратно?

Re: выключатель с обратной связью на Arduino

Добавлено: Чт мар 24, 2016 1:14 pm
ser009
Я для реализации использовал МК.
К нему подключался выключатель и светильник.
С МДМ он общался отдавая состояние после любого изменения состояния, как местного так и дистанционного
Логика следующая изменить состояние можно только на противоположное текущему состоянию. Т.е. если включен - только выключить (по месту или дистанционно)

как-то так.

Re: выключатель с обратной связью на Arduino

Добавлено: Чт мар 24, 2016 2:32 pm
LSE100
Друзья всем спасибо разобрался, итоговый вариант в моем случае выглядит так:

скетч для arduino при подключении через USB:

Код: Выделить всё

int incomingInt = 0;

boolean status;

 
char buf[80];

// Функция отправки HTTP-запроса на сервер
void sendHTTPRequest() {
Serial.println(buf); 
}

// задаем константы
const int buttonPin = 2; // номер входа, подключенный к кнопке
const int buttonPin10 = 10; // номер входа, подключенный к кнопке


int Relay = 4; // реле 4

// переменные
int buttonState = 0; // переменная для хранения состояния кнопки
int buttonState10 = 0; // переменная для хранения состояния кнопки

void setup()
{
Serial.begin(115200); 



// инициализируем пин, подключенный к реле 4, как выход
pinMode(Relay, OUTPUT); 


// инициализируем пин, подключенный к кнопке, как вход
pinMode(buttonPin, INPUT); 
pinMode(buttonPin10, INPUT); 

}

void loop()

// считываем значения с входа кнопки
 
{

 
   
if (Serial.available() > 0)
{
incomingInt = Serial.parseInt();
if (incomingInt == 500) {
digitalWrite(Relay, LOW);
}
if (incomingInt == 499) {
digitalWrite(Relay, HIGH);

}
}

    buttonState = digitalRead(buttonPin);
    
if (buttonState == HIGH) { 
 if (status == true) {
  digitalWrite(Relay, LOW);
  status = false;
   delay(200);
   sprintf(buf, "GET /objects/?object=Switch1&op=m&m=turnON_ard&", 1) ;
       sendHTTPRequest(); 
}
else
{
  digitalWrite(Relay, HIGH);
  status = true;
  delay(200); 
  sprintf(buf, "GET /objects/?object=Switch1&op=m&m=turnOff_ard&", 1) ;
       sendHTTPRequest(); 
}
}
} 
В MJM Создаем кнопку и делаем для нее 4 метода:
turnOff

Код: Выделить всё

$this->setProperty("status",0);
$cmdUrl = "http://127.0.0.3:8080/command?499"; getURL($cmdUrl,0); 


turnOff_ard

Код: Выделить всё

$this->setProperty("status",0); 

turnOn

Код: Выделить всё

$this->setProperty("status",1);
$cmdUrl = "http://127.0.0.3:8080/command?500"; getURL($cmdUrl,0); 

turnOn_ard

Код: Выделить всё

$this->setProperty("status",1); 

Re: выключатель с обратной связью на Arduino

Добавлено: Вс мар 27, 2016 12:04 am
LSE100
Новая проблема вылезла, перешел с USB на W5100 и не могу принять команду от MJ, в варианте с USB мы принимали данные так:

Код: Выделить всё

if (Serial.available() > 0)
{
incomingInt = Serial.parseInt();
if (incomingInt == 500) {
digitalWrite(Relay, LOW);
}
if (incomingInt == 499) {
digitalWrite(Relay, HIGH);

}
} 
Как принять данные в LAN варианте?
Пробую так не проходит

Код: Выделить всё

 if (rclient.read() > 0)
{
incomingInt = rclient.read();
if (incomingInt == 500) {
digitalWrite(Relay, LOW);
}
if (incomingInt == 499) {
digitalWrite(Relay, HIGH);

}

if (incomingInt == 101) {
digitalWrite(Relay5, LOW);
}
if (incomingInt == 100) {
digitalWrite(Relay5, HIGH);



}
} 

Re: выключатель с обратной связью на Arduino

Добавлено: Вт мар 29, 2016 12:44 pm
vasyaka666
А можете подробнее написать про кнопку? как она подключается и какая нужна? при задевании пинов 2 или 10 происходит включение-выключение. какая схема должна быть подключения кнопки-выключателя?