#1 Апаратні питання » Доброго дня допоможіть скнопкою » 2018-02-28 10:50:28

stels
відповідей: 27

доброго дня допоможіть з кнопкою дайте пораду я не програміст тільки почав займатись програмуванням на ардуїно ось скеч


#include <SPI.h>           // Ethernet shield
#include <Ethernet.h>      // Ethernet shield
#include <PubSubClient.h>  // MQTT

#define light1_pin 2
#define light2_pin 4


boolean butt_flag = 0; // контрольює стан флашка
boolean butt;
boolean led_flag = 0;
//

//
byte mac[]    = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
byte server[] = { 192, 168, 1, 11 };
byte ip[]     = { 192, 168, 1, 12 };

void callback(char* topic, byte* payload, unsigned int length);

EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);
unsigned long lastMqtt = 0;

void callback(char* topic, byte* payload, unsigned int length) {


  payload[length] = '\0';
  Serial.print(topic);
  Serial.print("  ");
  String strTopic = String(topic);
  String strPayload = String((char*)payload);
  Serial.println(strPayload);

  if (strTopic == "/myhome/in/Kitchen_light1") {
    if (strPayload == "OFF")     digitalWrite(light1_pin, LOW);
    else if (strPayload == "ON") digitalWrite(light1_pin, HIGH);
  }
  else if (strTopic == "/myhome/in/Kitchen_light2") {
    if (strPayload == "OFF") digitalWrite(light2_pin, LOW);
    else if (strPayload == "ON") digitalWrite(light2_pin, HIGH);
  }
}

void setup() {
  pinMode(A5, INPUT_PULLUP );
  Serial.begin(9600);
  Serial.println("start");

  pinMode(light1_pin, OUTPUT);
  digitalWrite(light1_pin, LOW);
  pinMode(light2_pin, OUTPUT);
  digitalWrite(light2_pin, LOW);

  Ethernet.begin(mac, ip);
  if (client.connect("myhome-kitchen")) {
    client.publish("/myhome/out/Kitchen_light1", "OFF");
    client.publish("/myhome/out/Kitchen_light2", "OFF");
    client.subscribe("/myhome/in/#");
  }

 
}

void loop() {

  if (lastMqtt > millis()) lastMqtt = 0;
  client.loop();

  // здесь какой-то другой код по уравлению светом, например, с кнопок или ещё как
 
  if (millis() > (lastMqtt + 60000)) {
    if (!client.connected()) {
      if (client.connect("myhome-kitchen")) client.subscribe("/myhome/in/#");
    }
    if (client.connected()) {
      if (digitalRead(light1_pin)) client.publish("/myhome/out/Kitchen_light1", "ON");
      else client.publish("/myhome/out/Kitchen_light1", "OFF");
      if (digitalRead(light2_pin)) client.publish("/myhome/out/Kitchen_light2", "ON");
      else client.publish("/myhome/out/Kitchen_light2", "OFF");
    }   
    lastMqtt = millis();
  }
   butt = !digitalRead(A5);
 
  if(butt == 1 && butt_flag == 0){
    butt_flag = 1;
     led_flag = !led_flag;
     digitalWrite(2,led_flag);
  pinMode(light1_pin, LOW);
  digitalWrite(light1_pin, OUTPUT);
   
    }
  if(butt == 0 && butt_flag == 1){
    butt_flag = 0;

      pinMode(light1_pin, OUTPUT);
     digitalWrite(light1_pin, LOW);
}
}
   


неможу догнати з моїм рівнем знань програмуваня чому не працює  кнопка має вкльючати і виключати реле   ДЯКУЮ ЗА ДОПОМОГУ

Підвал форуму