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

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

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

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

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

Вот это код у меня работает. Реле щелкают в зависимости от строки rele.

int ledPins[] = {
  2, 3, 4, 5, 6, 7, 8, 9
};       // an array of pin numbers to which LEDs are attached
int pinCount = 8;           // the number of pins (i.e. the length of the array)
String rele = "{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:
  int nr=0;
  for (int i = 0; rele.length()-1; i++)
  {
    if (rele.charAt(i)=='0') {digitalWrite(ledPins[nr], LOW); nr++;};
    if (rele.charAt(i)=='1') {digitalWrite(ledPins[nr], HIGH); nr++;};
  }
}

 

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

ofalaleev пишет:

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

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

Да всё равно. Сейчас он реагирует только на 0 и 1 в строке. Строку надо собрать в цикле приёма ответа от сервера.

 

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

nik182 пишет:

ofalaleev пишет:

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

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

Да всё равно. Сейчас он реагирует только на 0 и 1 в строке. Строку надо собрать в цикле приёма ответа от сервера.

 

Спасибо за код, только у меня все реле горят, пытался менять String rele как на все нули так и на все единицы, а они все равно не работают хз, что делать?

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

Плата какая? У меня нано. 

Просто короткий код типа digitalWrite(2,HIGH); digitalWrite(3,LOW);.... щелкает реле? Ну или диоды зажигает?

 

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

int pinCount = 8;
int ledPins[8] = {2, 3, 4, 5, 6, 7, 8}; // куда проепался 8-й светодиод?
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() {
for (int thisPin = 0; thisPin < pinCount; thisPin++) {
digitalWrite(ledPins[thisPin], rele[thisPin]);}
}

 

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

собирать строку надо так

    delay(500);
    rele="";
      while (client.available())
      {
      char c = client.read();
      rele=rele+c;
      }

 

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

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


int pinCount = 8;
int ledPins[8] = {2, 3, 4, 5, 6, 7, 8}; // куда проепался 8-й светодиод?
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() {
for (int thisPin = 0; thisPin < pinCount; thisPin++) {
digitalWrite(ledPins[thisPin], rele[thisPin]);}
}

Я понимаю, что должно работать  - но не работает Хз почему см видео https://youtu.be/U-9m7RVrkMc

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

nik182 пишет:

собирать строку надо так

    delay(500);

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

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

ofalaleev пишет:

Я понимаю, что должно работать  - но не работает

я понимаю, что ты понимаешь, но у меня работает на двух светодиодах - я проверял

int pinCount = 2;
int ledPins[2] = {14, 15};

boolean rele[2] = {1,0}; // пришел код 

void setup() {
for (int thisPin = 0; thisPin < pinCount; thisPin++) {pinMode(ledPins[thisPin], OUTPUT);}
}
 
void loop() {
for (int thisPin = 0; thisPin < pinCount; thisPin++) {
digitalWrite(ledPins[thisPin], rele[thisPin]);}
}

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

02 int ledPins[8] = {2, 3, 4, 5, 6, 7, 8}; // куда проепался 8-й светодиод?

 

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

nik182 пишет:

Плата какая? У меня нано. 

Просто короткий код типа digitalWrite(2,HIGH); digitalWrite(3,LOW);.... щелкает реле? Ну или диоды зажигает?

 

С обычным блинком работает - плата RobotDyn  uno  пример платы со скейтчем Клапауций 232 https://youtu.be/U-9m7RVrkMc

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

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

nik182 пишет:

собирать строку надо так

    delay(500);

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

Это модифицированный кусочек из поста #34. А вообще не набъется. Это ответ на запрос. Одна строка. По хорошему надо ждать первого символа с таймаутом на интернет транзакцию.

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

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

ofalaleev пишет:

Я понимаю, что должно работать  - но не работает

я понимаю, что ты понимаешь, но у меня работает на двух светодиодах - я проверял

int pinCount = 2;
int ledPins[2] = {14, 15};

boolean rele[2] = {1,0}; // пришел код 

void setup() {
for (int thisPin = 0; thisPin < pinCount; thisPin++) {pinMode(ledPins[thisPin], OUTPUT);}
}
 
void loop() {
for (int thisPin = 0; thisPin < pinCount; thisPin++) {
digitalWrite(ledPins[thisPin], rele[thisPin]);}
}

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

02 int ledPins[8] = {2, 3, 4, 5, 6, 7, 8}; // куда проепался 8-й светодиод?

 

У меня реле модуль из 4х реле - и все работаю в положение вкл 

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

Что то на экране скетч какой то левый. Полная извините не соответствие тому, что я писал.

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

ofalaleev пишет:

У меня реле модуль из 4х реле - и все работаю в положение вкл 

у меня два светодиода и всё работает - убейся ап стену.

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

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

ofalaleev пишет:

У меня реле модуль из 4х реле - и все работаю в положение вкл 

у меня два светодиода и всё работает - убейся ап стену.

Брат, спасибо большое - заработало )))

int pinCount = 4;
int ledPins[4] = {2, 3, 4, 5};

boolean rele[4] = {0,1,0,1}; // пришел код 

void setup() {
for (int thisPin = 0; thisPin < pinCount; thisPin++) {pinMode(ledPins[thisPin], OUTPUT);}
}
 
void loop() {
for (int thisPin = 0; thisPin < pinCount; thisPin++) {
digitalWrite(ledPins[thisPin], rele[thisPin]);}
}

 

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

nik182 пишет:

Что то на экране скетч какой то левый. Полная извините не соответствие тому, что я писал.

Nik182, там скейтч  пример платы со скейтчем Клапауций 232

 

Там с другим его скейтчем заработало, сейчас буду в большой код это все впихивать)

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

Уважаемый Клапауций 232 ноги A0 A1 в скетче описал. А на видео совсем другие ноги воткнуты. Да и получать вы будете не bool а char. 

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

nik182 пишет:

Уважаемый Клапауций 232 ноги A0 A1 в скетче описал. А на видео совсем другие ноги воткнуты. Да и получать вы будете не bool а char. 

с ногами 14 и 15 - это моя железка с двумя светодиодами.

получать он будет чар '0' и '1' и по порядку писать 0 или 1 в boolean rele[4]

не вижу необходимости лепить строки из символов

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

Клапауций232, а как предложишь - эту  строку собирать(см. код ниже - код ответственный за приемку и запись в переменную)  nik182 - предложил так собрать

nik182 пишет:

собирать строку надо так

    delay(500);
    rele="";
      while (client.available())
      {
      char c = client.read();
      rele=rele+c;
      }

 

Клапауций 232
Offline
Зарегистрирован: 05.04.2016
кароче.
собирает количество символов '0' и '1' равное количеству подключенных реле/светодиодов.
если пришло, что-то отличное от '0' и '1' или до того как принято нужное количество символов, то начинаем с начала собирать нужный массив.
DigiUSB. заменить на свой client.
надеюсь, не втулишь этот код среди делеев, иначе не гарантирую, что всё не станет колом и не будешь терять инфу.
что бы не путаться, если принял конец прошлого массива и начало текущего - отправляй комбинации нулей и единиц в виде x0001100, где "x" - любой отличный от 0 или 1 символ, приём которого приведёт к обнулению счётчика принятых символов, на случай, если прошлый раз что-то пошло не так.
 

#include <DigiUSB.h>

byte pinCount   = 7; // количество подключенных светодиодов
byte  ledPins[] = { 0, 1,10,11,12,13,15}; // массив пинов светодиодов
boolean  rele[] = { 0, 0, 0, 0, 0, 0, 0}; // массив логических состояний пинов светодиодов

void setup() {
DigiUSB.begin(); // представь, DigiUSB - что это твой инет-клиент

for (int thisPin = 0; thisPin < pinCount; thisPin++) {
pinMode(ledPins[thisPin], OUTPUT);
// digitalWrite(ledPins[thisPin], 1); // если светодиоды загораются при первом включении, то расскомментировать
}

}

void loop() {

if (DigiUSB.available()) { // в приёмном буфере что-то есть

char RX_s = DigiUSB.read(); // запись принятого символа в переменную

static byte n = 0; ++n; // счётчик принятых символов

if (RX_s == '0') {rele[n - 1] = 0;} // запись 0 в массив rele[]
if (RX_s == '1') {rele[n - 1] = 1;} // запись 1 в массив rele[]

if (RX_s != '0' && RX_s != '1') {n = 0;} // если пришло что-то отличное от '0' или '1', то сбросить счётчик принятых символов

if (n == pinCount) {n = 0; // приняты все символы в массив rele[], обнуление счётчика принятых символов
for (int thisPin = 0; thisPin < pinCount; thisPin++) { // обновление состояния пинов светодиодов в актуальное массиву rele[]
digitalWrite(ledPins[thisPin], rele[thisPin]);     // если при вводе 0000000 загораются светодиоды, то закомментировать.
// digitalWrite(ledPins[thisPin], !rele[thisPin]); // если при вводе 0000000 загораются светодиоды, то расскомментировать.
}
}
}

DigiUSB.delay(1);
}

 

 

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

Спасибо за труды)
То есть библиотеку ethernet оставляем, а digiusb имея стабильное соединение интернет начинает общаться удаленно с сервер скриптом.php откуда и получает нулики и единички, которые в последствии обрабатывает?

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

кароче.
собирает количество символов '0' и '1' равное количеству подключенных реле/светодиодов.
если пришло, что-то отличное от '0' и '1' или до того как принято нужное количество символов, то начинаем с начала собирать нужный массив.
DigiUSB. заменить на свой client.
надеюсь, не втулишь этот код среди делеев, иначе не гарантирую, что всё не станет колом и не будешь терять инфу.
что бы не путаться, если принял конец прошлого массива и начало текущего - отправляй комбинации нулей и единиц в виде x0001100, где "x" - любой отличный от 0 или 1 символ, приём которого приведёт к обнулению счётчика принятых символов, на случай, если прошлый раз что-то пошло не так.
 

#include <DigiUSB.h>

byte pinCount   = 7; // количество подключенных светодиодов
byte  ledPins[] = { 0, 1,10,11,12,13,15}; // массив пинов светодиодов
boolean  rele[] = { 0, 0, 0, 0, 0, 0, 0}; // массив логических состояний пинов светодиодов

void setup() {
DigiUSB.begin(); // представь, DigiUSB - что это твой инет-клиент

for (int thisPin = 0; thisPin < pinCount; thisPin++) {
pinMode(ledPins[thisPin], OUTPUT);
// digitalWrite(ledPins[thisPin], 1); // если светодиоды загораются при первом включении, то расскомментировать
}

}

void loop() {

if (DigiUSB.available()) { // в приёмном буфере что-то есть

char RX_s = DigiUSB.read(); // запись принятого символа в переменную

static byte n = 0; ++n; // счётчик принятых символов

if (RX_s == '0') {rele[n - 1] = 0;} // запись 0 в массив rele[]
if (RX_s == '1') {rele[n - 1] = 1;} // запись 1 в массив rele[]

if (RX_s != '0' && RX_s != '1') {n = 0;} // если пришло что-то отличное от '0' или '1', то сбросить счётчик принятых символов

if (n == pinCount) {n = 0; // приняты все символы в массив rele[], обнуление счётчика принятых символов
for (int thisPin = 0; thisPin < pinCount; thisPin++) { // обновление состояния пинов светодиодов в актуальное массиву rele[]
digitalWrite(ledPins[thisPin], rele[thisPin]);     // если при вводе 0000000 загораются светодиоды, то закомментировать.
// digitalWrite(ledPins[thisPin], !rele[thisPin]); // если при вводе 0000000 загораются светодиоды, то расскомментировать.
}
}
}

DigiUSB.delay(1);
}

 

 

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

ofalaleev пишет:
Спасибо за труды) То есть библиотеку ethernet оставляем, а digiusb имея стабильное соединение интернет начинает общаться удаленно с сервер скриптом.php откуда и получает нулики и единички, которые в последствии обрабатывает?

не digiusb - твой клиент 

у тебя (client.available())

у меня (DigiUSB.available())

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

просто замени в коде мой DigiUSB на свой client со всей положенной этому клиенту обвязкой.

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

Понял))

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

ofalaleev пишет:
Спасибо за труды) То есть библиотеку ethernet оставляем, а digiusb имея стабильное соединение интернет начинает общаться удаленно с сервер скриптом.php откуда и получает нулики и единички, которые в последствии обрабатывает?

не digiusb - твой клиент 

у тебя (client.available())

у меня (DigiUSB.available())

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

просто замени в коде мой DigiUSB на свой client со всей положенной этому клиенту обвязкой.