8 Реле и бнарный код 10000001

ofalaleev
ofalaleev аватар
Offline
Зарегистрирован: 22.10.2016

Всем Здрасте

Имеется: сервер  от которого на ардуино приходит восьми разрядный двочный код (binary code)

так как восемь реле то и восемь разрядов в коде, которые присваивают каждому исходящему пину из 8 ми задействованых значение HIGH  or  LOW

Коллеги подскажите по какому принципу или каким алгоритмом   это реализовывается

см.картинку ниже

Спасибо

 

Клапауций 232
Offline
Зарегистрирован: 05.04.2016
boolean rele[8] = {1,0,0,0,0,0,0,1};

массив (array)

nik182
Онлайн
Зарегистрирован: 04.05.2015

Это сильно зависит. Если умудриться все реле повесить на один порт, то можно просто писать бинарный код в порт. Если на один порт не получится, то надо писить подпрограмму переводчик бинарного кода в конкретные ножки процессора. Проверять бит и в соответствии со значением включать или выключать реле. И так восемь раз.

ofalaleev
ofalaleev аватар
Offline
Зарегистрирован: 22.10.2016

Клапауций 232 пишет:

boolean rele[8] = {1,0,0,0,0,0,0,1};

массив (array)

Спасибо большое) только так наверное правильно будет  

boolean rele[7] = {1,0,0,0,0,0,0,1};

так как первая единица идет за нуль

А как в массив  число 10000001 засунуть ?

 

ofalaleev
ofalaleev аватар
Offline
Зарегистрирован: 22.10.2016

nik182 пишет:
Это сильно зависит. Если умудриться все реле повесить на один порт, то можно просто писать бинарный код в порт. Если на один порт не получится, то надо писить подпрограмму переводчик бинарного кода в конкретные ножки процессора. Проверять бит и в соответствии со значением включать или выключать реле. И так восемь раз.

Я думаю что программа должна перебирать значение - то есть цикл FOR (счетчик) проводт интеррацию до 256 (колличество комбинаций от 00000000 до 11111111) далее запихивает значене в массив  - что-то пока как-то так, дальше пока не могу додумать...

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

ofalaleev пишет:

Спасибо большое) только так наверное правильно будет  

boolean rele[7] = {1,0,0,0,0,0,0,1};

так как первая единица идет за нуль

нет. 8 - это количество элементов массива объявляемого массива. их у тебя 8-мь.

когда обращаешься к элементам массива, тогда на единицу меньше, т.к. 1-й == 0, т.е. от 0 до 7

rele[0] == 1; rele[1] == 0;... rele[7] == 1; 

ofalaleev пишет:

А как в массив  число 10000001 засунуть ?

ну, как как - ты же код колучаешь? сначала получаешь 1-й символ кода, затем 2-й... затем 8-й.

по мере получения увеличивай счётчик с 0 до 7 и размещай нули и единицы в rele[n] = символ.

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

ofalaleev пишет:

Я думаю что программа должна перебирать значение - то есть цикл FOR (счетчик) проводт интеррацию до 256 (колличество комбинаций от 00000000 до 11111111) далее запихивает значене в массив  - что-то пока как-то так, дальше пока не могу додумать...

от 0 до 7

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

ofalaleev
ofalaleev аватар
Offline
Зарегистрирован: 22.10.2016

Клапауций 232 пишет:

от 0 до 7

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

Тогда что-то вроде этого

/* Knight Rider 2
 * --------------
 *
 * Reducing the amount of code using for(;;).
 *
 *
 * (cleft) 2005 K3, Malmo University
 * @author: David Cuartielles
 * @hardware: David Cuartielles, Aaron Hallborg
 */

int pinArray[] = {2, 3, 4, 5, 6, 7};
int count = 0;
int timer = 100;

void setup(){
  // we make all the declarations at once
  for (count=0;count<6;count++) {
    pinMode(pinArray[count], OUTPUT);
  }
}

void loop() {
  for (count=0;count<6;count++) {
   digitalWrite(pinArray[count], HIGH);
   delay(timer);
   digitalWrite(pinArray[count], LOW);
   delay(timer);
  }
  for (count=5;count>=0;count--) {
   digitalWrite(pinArray[count], HIGH);
   delay(timer);
   digitalWrite(pinArray[count], LOW);
   delay(timer);
  }
}

 

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

я что-то иное предложил?

Клапауций 232 пишет:

от 0 до 7

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

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Я не понял 8, 7, а судя по коду ваще 6 для второго FOR?

Я правильно понял задачу, пришел байт из инета, надо включить те реле где биты равны 1 ?

А то 2 FORа делают одно и тоже, первый слева на право, второй справо на лево.

ofalaleev
ofalaleev аватар
Offline
Зарегистрирован: 22.10.2016

Клапауций 232 пишет:

я что-то иное предложил?

просто код приходит от 00000000 до 11111111 - как с ним перебор делать?, по пинам я понял как их из массива счетчиком вытаскивать 

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

ofalaleev пишет:

просто код приходит от 00000000 до 11111111 - как с ним перебор делать?, по пинам я понял как их из массива счетчиком вытаскивать 

ок. сначала:

что и куда "приходит"? - покажи результат прихода.

ofalaleev
ofalaleev аватар
Offline
Зарегистрирован: 22.10.2016

xDriver пишет:

Я не понял 8, 7, а судя по коду ваще 6 ?

Я правильно понял задачу, пришел байт из инета, надо включить те реле где биты равны 1 ?

А то 2 FORа делают одно и тоже, первый слева на право, второй справо на лево.

Смотри пришел код из инета для двойного реле - значит код из двух разрядов

к примеру 10, значит  первое реле переводим в значение ON а второе в OFF

Пример второй для реле из 4 штук, к примеру к нему из инета приходит код 1010 так как четыре реле то и разрядов четыре,

зходя из этого кода реле 1 в положение ON реле 2 в положение OFF реле три в положение ON а реле 4 в положение OFF

 

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

ofalaleev пишет:

Смотри пришел код из инета

не вижу, куда пришёл код

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

неее, не надо меня путать

приходить БАЙТ, 8 разрядов, так ?

ofalaleev
ofalaleev аватар
Offline
Зарегистрирован: 22.10.2016

Клапауций 232 пишет:

ок. сначала:

что и куда "приходит"? - покажи результат прихода.

в код который ниже сильно не вникаем это get запрос на сервер ниже будет код который получает данные с сервера

   if (client.connect(server, 80)) 
{
    client.print( "GET /add_data.php?");
    client.print("temperature=");
    client.print( sensors.getTempCByIndex(0) );
    client.print("&");
    client.print("humidity=");
    client.print(h);
    client.print("&");
    client.print("dhdata=");
    client.print(t);
    client.print("&");
    client.print("hour=");
    print2digits(tm.Hour);
    client.print("&");
    client.print("minute=");
    print2digits(tm.Minute);
    client.print("&");
    client.print("soil_moisture=");
    client.println(sensorValue);
    client.println( " HTTP/1.1");
    client.print( " Host: " );
    client.print(server);
    client.println(" Connection: close");
    client.println();
    client.println();
    delay(500);

ниже код который получает данные с сервера и заносит их в переменную "C"

  while (client.available())
      {
      char c = client.read();
    

 

ofalaleev
ofalaleev аватар
Offline
Зарегистрирован: 22.10.2016

xDriver пишет:

неее, не надо меня путать

приходить БАЙТ, 8 разрядов, так ?

Если 8реле то приходит число от 00000000 до 11111111 - 256комбинаций

Если 16реле то число 0000000000000000 до 1111111111111111 Хз сколько комбинаций)))

vdk
Offline
Зарегистрирован: 14.04.2013
// input - это полученный байт
for (count=0;count<8;count++) {
    DigitalWrite(pinArray[count],input&1);
    input>>=1;
}

 

nik182
Онлайн
Зарегистрирован: 04.05.2015
unsigned char ports[8]={3,4,5,6,7,8,9,10,11};
.....

void setup()
{
 for (unsigned char i = 0; i < 8; i++)   pinMode(ports[i], OUTPUT);      // устанавливает режим работы - выход
.....
}


void rele (unsigned char data)
{
  unsigned char i;
 for (i = 0; i < 8; i++) 
 {
    if (data & 1)
      digitalWrite(ports[i],HIGH) ;
    else
      digitalWrite(ports[i],LOW) ;
    data >>= 1;
   }
 } 

Как то  так.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Вы уж опредилитесь, что вы от инета получаете

вот пример если получаете байт


byte var = 0x00000000; // пришел код
byte pinArray[] = {2, 3, 4, 5, 6, 7, 8, 9}; // восемь ножек МК 

for (byte n = 0; n<8; n++) {
  digitalWrite(pinArray[n], var & 1<<n);
}

во накидали пока писал :)

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

ofalaleev пишет:

xDriver пишет:

неее, не надо меня путать

приходить БАЙТ, 8 разрядов, так ?

Если 8реле то приходит число от 00000000 до 11111111 - 256комбинаций

Если 16реле то число 0000000000000000 до 1111111111111111 Хз сколько комбинаций)))

слушай - выбрось из головы эти комбинации. кто тебе, вообще, про комбинации в уши налил? - у тебя одна актуальная комбинация, которую тебе нужно удобоваримо принять и реализовать в комбинации состояний реле.

ofalaleev
ofalaleev аватар
Offline
Зарегистрирован: 22.10.2016

Клапауций 232 пишет:

xDriver пишет:

Клапауций nik182 пишет:

Клапауций vdk пишет:

Спасибо большое за код, это решение - завтра попробую отпишусь ))

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

ofalaleev пишет:

ниже код который получает данные с сервера и заносит их в переменную "C"

  while (client.available())
      {
      char c = client.read();

если так, то не

boolean rele[8] = {1,0,0,0,0,0,0,1};

а

char rele[9] = "10000001";

 

по факту получения символа '\0' врубаешь цикл привода реле в актуальное полученному состояние.

но... т.к. у тебя возможно сыпется из твоего инета не только этот код для реле, то принимаемая строка должна иметь с начала символ по которому ты будешь понимать, что это "оно" - как-то так "x10000001'\0'"

строку лепишь из принимаемых символов по факту получения символа 'x'

static String b = ""; // объявление переменной строки.
if (client.available()) {
char c = client.read();
b = b + c; 
}

 

ofalaleev
ofalaleev аватар
Offline
Зарегистрирован: 22.10.2016

Клапауций 232 пишет:

ofalaleev пишет:

ниже код который получает данные с сервера и заносит их в переменную "C"

  while (client.available())
      {
      char c = client.read();

если так, то не

boolean rele[8] = {1,0,0,0,0,0,0,1};

а

char rele[9] = "10000001";

 

по факту получения символа '\0' врубаешь цикл привода реле в актуальное полученному состояние.

но... т.к. у тебя возможно сыпется из твоего инета не только этот код для реле, то принимаемая строка должна иметь с начала символ по которому ты будешь понимать, что это "оно" - как-то так "x10000001'\0'"

строку лепишь из принимаемых символов по факту получения символа 'x'

static String b = ""; // объявление переменной строки.
if (client.available()) {
char c = client.read();
b = b + c; 
}

 

У меня сайт стоит на домашнем сервак - www.netherlad4crew.com

На сервак идёт отправка данных как о времени так и о погоде, данные входные записываются в файл in.txt

Эти данные отправляются на скрипт script.php скрипт прочитывает эти данные и записывает в файл In.txt  далее этот же скрипт предоставляет данные от файла Out.txt  где и хранится крайняя запись 10000001

 

 

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

ofalaleev пишет:

У меня сайт стоит на домашнем сервак - www.netherlad4crew.com

На сервак идёт отправка данных как о времени так и о погоде, данные входные записываются в файл in.txt

Эти данные отправляются на скрипт script.php скрипт прочитывает эти данные и записывает в файл In.txt  далее этот же скрипт предоставляет данные от файла Out.txt  где и хранится крайняя запись 10000001

это как бы и не важно, если ты получаешь один символ, который куда-то нужно складывать

while (client.available())
    {
    char c = client.read();

 

ofalaleev
ofalaleev аватар
Offline
Зарегистрирован: 22.10.2016

xDriver пишет:

Вы уж опредилитесь, что вы от инета получаете

вот пример если получаете байт


byte var = 0x00000000; // пришел код
byte pinArray[] = {2, 3, 4, 5, 6, 7, 8, 9}; // восемь ножек МК 

for (byte n = 0; n<8; n++) {
  digitalWrite(pinArray[n], var & 1<<n);
}

во накидали пока писал :)

Подскажи плиз по условию 

Счётчик перебирает пины 8 раз далее запятая ,  байтов переменная var и 1 <<  знак меньше (не знак а логический оператор) что обозначает, не подскажите? Мат часть почитал а там ничего не сказанно про два знака подряд ...

 

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

Сделал тестовый скейтч на основе описанного выше, компилятор не ругается - но и скейтч не работает


int ledPins[] = {
  2, 3, 4, 5, 6, 7, 8
};       // an array of pin numbers to which LEDs are attached
int pinCount = 8;           // the number of pins (i.e. the length of the array)
byte var = 0x00000000; // пришел код 
void setup() {
  // the array elements are numbered from 0 to (pinCount - 1).
  // use a for loop to initialize each pin as an output:
  for (int thisPin = 0; thisPin < pinCount; thisPin++) {
    pinMode(ledPins[thisPin], OUTPUT);
  }
}
 
void loop() {
  // loop from the lowest pin to the highest:
  for (int thisPin = 0; thisPin < pinCount; thisPin++)
  {
    if (var & 1)
    {
    digitalWrite(ledPins[thisPin], HIGH);
    }
    else
    {
    digitalWrite(ledPins[thisPin], LOW);
    var >>= 1;
    }
  }
 
 
}

 

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

ofalaleev пишет:

Сделал тестовый скейтч на основе описанного выше, компилятор не ругается - но и скейтч не работает

не суть важно, работает или нет - зачем ты, вообще, это делаешь?

ты сам себя и читателей темы ввёл в заблуждение, заявив, что приходит восьми разрядный двочный код (binary code)

это не так - ты получаешь один символ.

о чём свидетельствует, процитированный тобой код

ofalaleev пишет:

ниже код который получает данные с сервера и заносит их в переменную "C"

  while (client.available())
      {
      char c = client.read();
    

char

char

Переменная типа char занимает 1 байт памяти и может хранить один алфавитно-цифровой символ (литеру). При объявление литеры используются одиночные кавычки: 'A' (двойные кавычки используется при объявлении строки символов - тип string: "ABC").

Символ хранится в памяти как число, соответствующее коду символа в таблице кодировки символов ASCII.  Т.к. символ хранится как число в памяти над ним возможно производить арифметические действия (например, 'A' + 1 будет 66, т.к. ASCII код для 'A' - 65).

 

ofalaleev
ofalaleev аватар
Offline
Зарегистрирован: 22.10.2016

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

ofalaleev пишет:

Сделал тестовый скейтч на основе описанного выше, компилятор не ругается - но и скейтч не работает

int ledPins[] = {
  2, 3, 4, 5, 6, 7, 8
};       // an array of pin numbers to which LEDs are attached
int pinCount = 8;           // the number of pins (i.e. the length of the array)
byte var = 0x00000000; // пришел код 
void setup() {
  // the array elements are numbered from 0 to (pinCount - 1).
  // use a for loop to initialize each pin as an output:
  for (int thisPin = 0; thisPin < pinCount; thisPin++) {
    pinMode(ledPins[thisPin], OUTPUT);
  }
}
 
void loop() {
  // loop from the lowest pin to the highest:
  for (int thisPin = 0; thisPin < pinCount; thisPin++)
  {
    if (var & 1)
    {
    digitalWrite(ledPins[thisPin], HIGH);
    }
    else
    {
    digitalWrite(ledPins[thisPin], LOW);
    var >>= 1;
    }
  }
 
 
}

 

Пока скейтч выше не заработает я не смогу его вставить в работающий скейтч, переменную char c  я заменю на byte c

Клапауций 232 пишет:

ofalaleev пишет:

Сделал тестовый скейтч на основе описанного выше, компилятор не ругается - но и скейтч не работает

не суть важно, работает или нет - зачем ты, вообще, это делаешь?

ты сам себя и читателей темы ввёл в заблуждение, заявив, что приходит восьми разрядный двочный код (binary code)

это не так - ты получаешь один символ.

о чём свидетельствует, процитированный тобой код

ofalaleev пишет:

ниже код который получает данные с сервера и заносит их в переменную "C"

  while (client.available())
      {
      char c = client.read();
    

char

char

Переменная типа char занимает 1 байт памяти и может хранить один алфавитно-цифровой символ (литеру). При объявление литеры используются одиночные кавычки: 'A' (двойные кавычки используется при объявлении строки символов - тип string: "ABC").

Символ хранится в памяти как число, соответствующее коду символа в таблице кодировки символов ASCII.  Т.к. символ хранится как число в памяти над ним возможно производить арифметические действия (например, 'A' + 1 будет 66, т.к. ASCII код для 'A' - 65).

 

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

ofalaleev пишет:

Пока скейтч выше не заработает я не смогу его вставить в работающий скейтч, переменную char c  я заменю на byte c

ок. удачи. мне надоело выслушивать глупые пререкания.

nik182
Онлайн
Зарегистрирован: 04.05.2015

Даже для отладки цикл loop должен выглядеть как то так

while (client.available())
    {
    char c = client.read();
     rele(c);
    }

В вашем скетче #30 переменная var не определена. нужно перед циклом задать var=c; Сделайте с=B101010101 реле будут щёлкать через одно.

 

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

nik182 пишет:

Даже для отладки цикл loop должен выглядеть как то так

while (client.available())
    {
    char c = client.read();
     rele(c);
    }

В вашем скетче #30 переменная var не определена. нужно перед циклом задать var=c; Сделайте с=B101010101 реле будут щёлкать через одно.

пока ТС не процитирует полный код приёмки "00000000" - нет смысла что-то ему советовать.

лично я подозреваю, что 00000000 он получает посимвольно, а не в виде бинарного числа

ofalaleev
ofalaleev аватар
Offline
Зарегистрирован: 22.10.2016

Цитата:

пока ТС не процитирует полный код приёмки "00000000" - нет смысла что-то ему советовать.

лично я подозреваю, что 00000000 он получает посимвольно, а не в виде бинарного числа

#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>//time
#include <TimeLib.h>//time
#include <DS1307RTC.h>//time
#include <DHT.h> //dh
#define DHTPIN 3 //dh
#define DHTTYPE DHT11 //dh11
DHT dht(DHTPIN, DHTTYPE);//dh11
int sensorPin = A0;//влажность почвы
int sensorValue = 0;//влажность почвы

#define ONE_WIRE_BUS 2 //подключение градусников на пин 2
OneWire oneWire(ONE_WIRE_BUS);//переменная one wire смотрит на строчку one_wire_bus которой определен пин
DallasTemperature sensors(&oneWire);//массив сенсорс получает в буфер значения температуры по градусникам

byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "www.netherlad4crew.com";
char servernarodmon[] = "www.narodmon.ru";
IPAddress dnServer(192, 168, 0, 1);
// the router's gateway address:
IPAddress gateway(192, 168, 0, 1);
// the subnet:
IPAddress subnet(255, 255, 255, 0);

//the IP address is dependent on your network
IPAddress ip(192, 168, 0, 99);
EthernetClient client;

int buff=0;// буферу присвоено значение нуль по умолчанию
const int led=5;//управление реле

void setup()
{
  Serial.begin(9600);
  pinMode( led, OUTPUT);
  digitalWrite(led, LOW);
  dht.begin();//dh
  sensorValue = analogRead(sensorPin);//влажность почвы
  Ethernet.begin(mac, ip, dnServer, gateway, subnet);//адрес вашей Ethernet-платы расширения (задан аппаратно).
  delay(1000);// Дадим время шилду на инициализацию
}

void loop()

 {
  delay(30000);
  float h = dht.readHumidity();//dh11
  float t = dht.readTemperature();//dh11
  tmElements_t tm;//time
  RTC.read(tm);//time
  sensors.begin();//получение адресов ds18b20
  sensors.requestTemperatures();//запрос температуры
    if (client.connect(servernarodmon, 80)) 
{
    client.print( "GET /get?");
    client.print("ID=902B349DCE1D&value1=");
    client.print( sensors.getTempCByIndex(0) );
    client.print("&902B349DCE1C&value2=");
    client.println(h);
    client.println( " HTTP/1.1");
    client.print( " Host: " );
    client.print(servernarodmon);
    client.println(" Connection: close");
    client.println();
    client.println();
    client.stop();
    client.flush();
    delay(100); 

}
else{ 
    Serial.println("is Not connected with server narodmon ");    
}
    if (client.connect(server, 80)) 
{
    client.print( "GET /add_data.php?");
    client.print("temperature=");
    client.print( sensors.getTempCByIndex(0) );
    client.print("&");
    client.print("humidity=");
    client.print(h);
    client.print("&");
    client.print("dhdata=");
    client.print(t);
    client.print("&");
    client.print("hour=");
    print2digits(tm.Hour);
    client.print("&");
    client.print("minute=");
    print2digits(tm.Minute);
    client.print("&");
    client.print("soil_moisture=");
    client.println(sensorValue);
    client.println( " HTTP/1.1");
    client.print( " Host: " );
    client.print(server);
    client.println(" Connection: close");
    client.println();
    client.println();
    delay(500);
      while (client.available())
      {
      char c = client.read();
        if ( c=='1')
        {
        buff=1;
        }
        if ( c=='0')
        {
         buff=0;
        }
      }
      
      client.stop();
      client.flush();
      delay(100); 
  }
  else 
  { 
    Serial.println("is Not connected with server 2 ");
     client.stop();
  }

  if ( buff==1)
        {
        digitalWrite (led, HIGH);
        }
        else
        {
          digitalWrite(led, LOW);
        }
  delay(500);


  
}
void print2digits(int number) {
  if (number >= 0 && number < 10) {
    client.write('0');
  }
  client.print(number);
}

код сервера

    $S1 =  $_GET['temperature'];
	    $myFile1 = "txt/in-1.txt";
		$fh1 = fopen($myFile1, 'w') or die("can't open file");
		fwrite($fh1, $S1);
		fclose($fh1);
		
        $S2 =  $_GET['humidity'];
	    $myFile2 = "txt/in-2.txt";
		$fh2 = fopen($myFile2, 'w') or die("can't open file");
		fwrite($fh2, $S2);
		fclose($fh2);
		
		$S3 =  $_GET['dhdata'];
	    $myFile3 = "txt/dhdata.txt";
		$fh3 = fopen($myFile3, 'w') or die("can't open file");
		fwrite($fh3, $S3);
		fclose($fh3);
		
		$S4 =  $_GET['minute'];
	    $myFile4 = "txt/minute.txt";
		$fh4 = fopen($myFile4, 'w') or die("can't open file");
		fwrite($fh4, $S4);
		fclose($fh4);
		
		$S5 =  $_GET['hour'];
	    $myFile5 = "txt/hour.txt";
		$fh5 = fopen($myFile5, 'w') or die("can't open file");
		fwrite($fh5, $S5);
		fclose($fh5);
		
		$S6 =  $_GET['soil_moisture'];
	    $myFile6 = "txt/soil_moisture.txt";
		$fh6 = fopen($myFile6, 'w') or die("can't open file");
		fwrite($fh6, $S6);
		fclose($fh6);
      
        $myFile = "txt/out-1.txt";
        $fh = fopen($myFile, 'r');
        $theData = fread($fh, filesize($myFile));
        fclose($fh);
        echo $theData;

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ofalaleev, Вы совершенно не ориентируетесь в типах данных. Сами запутались и пытаетесь запутать окружающих.

Бинарный код состояит из битов. Биты объединяются в байты - по 8 штук. Если к Вам приходит 8 битов, значит, приходит один байт. Принять из И-нета что-то меньшее одного байта НЕВОЗМОЖНО. Т.е. невозможно принять 2 или 4 бита. Можно принять только байт целиком.

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

Чаще всего из И-нета принимают ТЕКСТ. Текст и бинарный код - совершенно разные (вплоть до того, что противоположные) вещи.

Вы можете принять из И-нета текстовую строку "10000001". Это будет строка длиной 8 символов, т.е. не один байт, а 8 байт (соответственно, 64 бита).

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

Чтобы написать Вам, как обрабатывать, нужно знать, что именно Вы принимаете.

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

ок. 

      while (client.available())
      {
      char c = client.read();
        if ( c=='1')
        {
        buff=1;
        }
        if ( c=='0')
        {
         buff=0;
        }
      }

и как ты собрался здесь переменную char c  я заменю на byte c

если у тебя клиент получает символы(чар), а не байты?

*то, что у тебя цикл, а не условие и ты всегда будешь получать последний символ - пока приторможу.

ofalaleev
ofalaleev аватар
Offline
Зарегистрирован: 22.10.2016

Клапауций 232 пишет:

ок. 

      while (client.available())
      {
      char c = client.read();
        if ( c=='1')
        {
        buff=1;
        }
        if ( c=='0')
        {
         buff=0;
        }
      }

и как ты собрался здесь переменную char c  я заменю на byte c

если у тебя клиент получает символы(чар), а не байты?

*то, что у тебя цикл, а не условие и ты всегда будешь получать последний символ - пока приторможу.

andriano пишет:

Полностью с вами согласен, получаю я char из 8ми символов состоящих из 1 или 0

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

ofalaleev пишет:

Полностью с вами согласен, получаю я char из 8ми символов состоящих из 1 или 0

блин!

да не чар из 8-ми символов ты получаешь, а восемь раз по одному символу.

ofalaleev
ofalaleev аватар
Offline
Зарегистрирован: 22.10.2016

Клапауций 232 пишет:

ofalaleev пишет:

Полностью с вами согласен, получаю я char из 8ми символов состоящих из 1 или 0

ну, и?

что нужно делать, когда получен первый символ, допустим '0'?

Надо его как-то сравнивать с массивом пинов)) Хз как это реализовать я в #28 кидал, что то похожее но оно не работает ((

ofalaleev
ofalaleev аватар
Offline
Зарегистрирован: 22.10.2016

Клапауций 232 пишет:

ofalaleev пишет:

Полностью с вами согласен, получаю я char из 8ми символов состоящих из 1 или 0

блин!

да не чар из 8-ми символов ты получаешь, а восемь раз по одному символу.

Я просто из деревни и не могу запомнить, что char это один символ))

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

ofalaleev пишет:

Клапауций 232 пишет:

ofalaleev пишет:

Полностью с вами согласен, получаю я char из 8ми символов состоящих из 1 или 0

ну, и?

что нужно делать, когда получен первый символ, допустим '0'?

Надо его как-то сравнивать с массивом пинов)) Хз как это реализовать я в #28 кидал, что то похожее но оно не работает ((

зачем его сравнивать с чем-то?

при получении первого символа равного '0' нужно записать 0 по адресу(индексу) 0 в массив boolean rele[8] = {1,0,0,0,0,0,0,1};

rele[0] = 0;

при получении символа '1' - записать 1 ...

ofalaleev
ofalaleev аватар
Offline
Зарегистрирован: 22.10.2016

Клапауций 232 пишет:

ofalaleev пишет:

Клапауций 232 пишет:

ofalaleev пишет:

Полностью с вами согласен, получаю я char из 8ми символов состоящих из 1 или 0

ну, и?

что нужно делать, когда получен первый символ, допустим '0'?

Надо его как-то сравнивать с массивом пинов)) Хз как это реализовать я в #28 кидал, что то похожее но оно не работает ((

зачем его сравнивать с чем-то?

при получении первого символа равного '0' нужно записать 0 по адресу(индексу) 0 в массив boolean rele[8] = {1,0,0,0,0,0,0,1};

rele[0] = 0;

при получении символа '1' - записать 1 ...

Ща загуглю как записать по адресу в массив

nik182
Онлайн
Зарегистрирован: 04.05.2015

Да хрен с ней, с деревней. Интернет он и в африке интернет. Книги и знания в нем одинаково доступны всем. Главное объясни как минуты и секунды связаны с реле? Из кода сервера ехется только текстовый файл out-1.txt. Его содержимое можно увидеть?

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

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

Клапауций 232 пишет:

boolean rele[8] = {1,0,0,0,0,0,0,1};

массив (array)

Присваиваем значение элементу массива:

mySensVals[0] = 10;

Возвращаем значение элемента массива:

x = mySensVals[4];

 

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

nik182 пишет:
Да хрен с ней, с деревней. Интернет он и в африке интернет. Книги и знания в нем одинаково доступны всем.

в деревне проживают умственно отсталые.

ofalaleev
ofalaleev аватар
Offline
Зарегистрирован: 22.10.2016

Клапауций 232 пишет:

nik182 пишет:
Да хрен с ней, с деревней. Интернет он и в африке интернет. Книги и знания в нем одинаково доступны всем.

в деревне проживают умственно отсталые.

Да, это правда - я просто из деревни 



while(client.available())

{


boolean rele[8] = client.read();


}

А php сервер отправляет  {1,0,0,0,0,0,0,1};

 

Теперь правильно ?

 

 

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

ofalaleev пишет:

в деревне проживают умственно отсталые.

Теперь правильно ?

попроси своих городских друзей, пусть тебя усыпят.

nik182
Онлайн
Зарегистрирован: 04.05.2015

Именно эту строку или вы скобки и запятые сами дописали?

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

nik182 пишет:
Именно эту строку или вы скобки и запятые сами дописали?

посимвольно у него клиент получает - какая разница, что шлёт сервер

ofalaleev
ofalaleev аватар
Offline
Зарегистрирован: 22.10.2016

Клапауций 232 пишет:

ofalaleev пишет:

в деревне проживают умственно отсталые.

Теперь правильно ?

попроси своих городских друзей, пусть тебя усыпят.

У нас в деревне только ветеринар, но он сейчас в запое, а из городских друзей нету - опять код не пашет

int ledPins[] = {
  2, 3, 4, 5, 6, 7, 8
};       // an array of pin numbers to which LEDs are attached
int pinCount = 8;           // the number of pins (i.e. the length of the array)
boolean rele[8] = {0,0,0,1,0,1,0,1}; // пришел код 
void setup() 

  {
  for (int thisPin = 0; thisPin < pinCount; thisPin++) {
    pinMode(ledPins[thisPin], OUTPUT);
  }
}
 
void loop() {
  // loop from the lowest pin to the highest:
  for (int thisPin = 0; thisPin < pinCount; thisPin++)
  {
    if (rele[thisPin]>0)
    {
    digitalWrite(ledPins[thisPin], HIGH);
    }
    else
    {
    digitalWrite(ledPins[thisPin], LOW);
    
    }
  }
 
 
}