добрый день! плз помогите разобраться

Тема в разделе "Arduino & Shields", создана пользователем 9508037, 13 май 2016.

  1. 9508037

    9508037 Нуб

    // вот часть скетча

    double tempin;
    double tempout;
    boolean light;
    boolean light2;
    boolean PIR;
    boolean rain;
    int alarm;
    boolean check;

    void setup() {
    delay(200);
    ethernet.setup(mac, ip, port);
    Serial.begin(9600);
    //temperature sensor
    sensors.begin();
    sensors.setWaitForConversion(false);
    sensors.setResolution(12);
    sensors.requestTemperatures();

    }
    void loop() {
    char* params;
    if (params = ethernet.serviceRequest()) {

    if (strcmp(params, "all") == 0) // не могу понять для чего параметр "all"
    {
    sensors.requestTemperatures();
    tempin = sensors.getTempCByIndex(0);
    sensors.requestTemperatures();
    tempout = sensors.getTempCByIndex(1);

    заранее спасибо!
     
  2. Vetrinus

    Vetrinus Гик

    Синтаксис:

    #include < string.h >
    int strcmp (const char *str1, const char *str2);

    Аргументы:

    str1, str2 – указатели на сравниваемые строки.

    Возвращаемое значение:

    0 – если сравниваемее строки идентичны.

    Положительное число – если строки отличаются и код первого отличающегося символа в строке str1 больше кода символа на той же позиции в строке str2.

    Отрицательное число – если строки отличаются и код первого отличающегося символа в строке str1 меньше кода символа на той же позиции в строке str2.


    Описание:

    Функция побайтно сравнивает коды символов двух строк, на которые указывают аргументы функции. Сравнение продолжается до встречи первого отличающегося символа или пока не будут проверены все символы строк.

    Если все символы строк совпали, то возвращается 0.

    Если при сравнении встретились отличающиеся символы, то сравнение прекращается и возвращается отрицательное или положительное число, в зависимости от того больше или меньше код символа строки str1, кода символа строки str2 на той же позиции (см. возвращаемые значения).

    Если строки разной длины, то возвращается положительное число, если строка str1 длиннее строки str2, или отрицательное число, если строка str2 длиннее строки str1.
     
  3. 9508037

    9508037 Нуб

    спасибо, я понимаю что функция сравнивает значение двух строк .. я не могу понять что за параметр "all" ??
    сорри процессинг только начал изучать(
     
  4. Vetrinus

    Vetrinus Гик

    Я так понимаю, что в пришедшем http request должна быть эта, "all", подстрока. Если она там есть, то исполняем код дальше. Если это какой-то левый запрос, то молчим, соответственно.
     
  5. Vetrinus

    Vetrinus Гик

    Сделайте вот что:
    1) Выложите полный код
    2) Выведите params в последовательный порт, и оттуда выложите сюда, попробуем разобраться.
     
  6. 9508037

    9508037 Нуб

    спасибо) ,точно в http запросе есть параметр all (192,168,x.x/all ), а вот и сам код в котором полученные данные можно увидеть через веб браузер, теперь пытаюсь настроить датчик движения который при срабатывании отправлял бы сообщение на почту, но почему то даже на последовательный порт ничего не выводит...

    //libraries
    #define CUSTOM_SETTINGS
    #define INCLUDE_EMAIL_SHIELD
    #include <OneSheeld.h>

    #include "etherShield.h"
    #include "ETHER_28J60.h"
    #include <OneWire.h>
    #include <DallasTemperature.h>
    #define ONE_WIRE_BUS 2
    OneWire oneWire(ONE_WIRE_BUS);
    DallasTemperature sensors(&oneWire);


    static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x01, 0x24};
    static uint8_t ip[4] = {192, 168, x, x};
    static uint16_t port = 80;

    ETHER_28J60 ethernet;
    double tempin;
    double tempout;
    boolean light;
    boolean light2;
    boolean PIR;
    boolean rain;
    boolean alarm;
    boolean check;

    //int PIR = 7;
    //int minSecsBetweenEmails = 60; // 1 min
    //long lastSend = -minSecsBetweenEmails * 1000l;

    void setup() {
    Serial.begin(9600);
    //delay(200);
    ethernet.setup(mac, ip, port);

    //temperature sensor
    sensors.begin();
    sensors.setWaitForConversion(false);
    sensors.setResolution(12);
    sensors.requestTemperatures();

    // define pins
    pinMode(A0, INPUT);
    pinMode(5, OUTPUT);
    pinMode(8, OUTPUT);
    pinMode(3, INPUT);
    pinMode(4, INPUT);
    pinMode(7, INPUT);
    }
    void loop() {

    char* params;
    if (params = ethernet.serviceRequest()) {

    if (strcmp(params, "all") == 0){

    sensors.requestTemperatures();
    tempin = sensors.getTempCByIndex(0);
    sensors.requestTemperatures();
    tempout = sensors.getTempCByIndex(1);


    ethernet.print("<center>");
    ethernet.print("<font color='teal'>");
    ethernet.print("<h1>Smart Home</h1>");
    ethernet.print("</font>");
    ethernet.print("<br>");

    ethernet.print("<h2>Temp in: ");
    ethernet.print(tempin);
    ethernet.print("</h2>");

    ethernet.print("<h2>Temp out: ");
    ethernet.print(tempout);
    ethernet.print("</h2>");

    check = true;
    ethernet.print("<h2>Alarm: ");
    ethernet.print(alarm);
    ethernet.print("</h2>");

    ethernet.print("<h2>Rain: ");
    rain = digitalRead(4);
    if(rain==true){
    ethernet.print("NO");
    }
    if(rain==false){
    ethernet.print("YES");
    }
    ethernet.print("</h2>");


    ethernet.print("<h2>Window: ");
    if(digitalRead(5)==HIGH){
    ethernet.print("CLOSE");
    }
    else{
    ethernet.print("OPEN");
    }
    ethernet.print("</h2>");


    ethernet.print("Lamp: ");
    ethernet.print("<a href='light'><button>Lamp</button></a>");


    ethernet.print("<br>");
    ethernet.print("<br>");
    ethernet.print("</center>");

    }

    // TEMP IN ********************
    if (strcmp(params, "tempin") == 0){
    sensors.requestTemperatures();
    tempin = sensors.getTempCByIndex(0)*100;
    ethernet.print(tempin); // print temperature in on ethernet
    }

    // TEMP OUT *******************
    if (strcmp(params, "tempout") == 0){
    sensors.requestTemperatures();
    tempout = sensors.getTempCByIndex(1)*100;
    ethernet.print(tempout); // print temperature out on ethernet
    }

    // RAIN ***********************
    if (strcmp(params, "rain") == 0){
    rain = digitalRead(4);
    if(rain==true){
    ethernet.print("NO");
    }
    if(rain==false){
    ethernet.print("YES");
    }
    }


    // WINDOW **********************
    if (strcmp(params, "window") == 0){
    if(digitalRead(5)==HIGH){
    ethernet.print("close");
    }
    else{
    ethernet.print("open");
    }
    }

    //LIGHT INTERNET****************
    if(strcmp(params, "light") == 0){
    ethernet.print("Lamp: ");
    ethernet.print(!light2);
    ethernet.print("<br>");
    ethernet.print("change: ");
    ethernet.print("<a href='light'><button>Lamp</button></a>");
    light2=!light2;
    digitalWrite(8, light2);
    }

    // ETHERNET RESPOND ************
    ethernet.respond();
    delay(20);


    // LIGHT ON CLAP ****************
    if(analogRead(A0)>350){
    light=!light;
    digitalWrite(5, light);
    delay(1000);
    }

    //MOVE SENSOR*******************
    PIR = digitalRead(7);
    if(PIR==true){
    if(check==true){
    Serial.println("ready");
    alarm = 1;
    check = false;

    Serial.println("MOVEMENT"); //
    Email.send("xxx@xxx.com"); // почта

    }
    if(PIR==false){
    alarm = 0;
    }
    }

    }


    //}
    // ALARM **********************
    if (strcmp(params, "alarm") == 0){

    check = true;
    ethernet.print(alarm);

    }
    }

    // }
    [/code]
     
    Последнее редактирование: 13 май 2016
  7. Vetrinus

    Vetrinus Гик

    Выработайте привычку описывать все возмодные ситуации. Т.е. написали if, напишите и else. Так многое понятно станет. С пустым последовательный портом без поллитры вывода всего и вся в порт не разберешься.
     
  8. 9508037

    9508037 Нуб

    ок, спасибо буду иметь в виду ..