#1 Re: Програмування Arduino » опрос портов ардуино » 2021-05-15 09:16:28

Сегодня заберу свой пк с visualsrudio. Работаю неделю на подменном попробуют в среде C#/

#2 Re: Програмування Arduino » опрос портов ардуино » 2021-05-14 22:59:05

https://doc.arduino.ua/ru/prog/Array
ничего нового не узнал. Все как на шарпе

#3 Re: Програмування Arduino » опрос портов ардуино » 2021-05-14 22:57:38

Может  я не правильно выразился. i перебирает коллекции массива и с помощью цикла for сравнивает их с нынешним состоянием портов

#4 Re: Програмування Arduino » опрос портов ардуино » 2021-05-14 21:15:24

Может естьсреда разработки как для C# типа visual studio? Для запуска программы в дебаге и ловли ошибок?

#5 Re: Програмування Arduino » опрос портов ардуино » 2021-05-14 20:54:50

Прошу прощения. Код правильно отредактировал . Вот:

#include "IRremote.h"  // Подключаю библиотеку для работы с ик пультом
IRrecv irrecv(8);      // назначаю вывод ик приёмника на пин 8 ардуино
decode_results results;  //сохраняю результат с ИК приёмника в переменную results
int led1=0;                    // в этой переменной хранится состояние  вкл/выкл сигнализации

int arr [7]; //определяем массив на 8 элементов

void setup() {             //определяю порты ввода
   pinMode( A0, INPUT);
 pinMode( A1, INPUT);
 pinMode( A2, INPUT);
 pinMode( A3, INPUT);
 pinMode( A4, INPUT);
 pinMode( A5, INPUT);
 pinMode( 13, INPUT);
 pinMode( 12, INPUT);
 
pinMode( 3, OUTPUT);     //Пин сирены в состояние вывода 
pinMode( 8, INPUT);       //Пин ИК датчика в режим входа 
  Serial.begin(9600);     //Выставляю скорость Serial порта
  irrecv.enableIRIn();    //Включаю ИК порт
  
  for (int i = 12; i <= 19; i++)  // Создаю цикл который один раз при включении опрашивает порты от 19 до  12
  {
    pinMode(i, INPUT);  //создаю переменную i для хранения в ней значения при чтении данных из цикла 
    arr[i - 12] = digitalRead(i); //здесь в  делаю сдвиг в массиве  и благодаря этому чтение начинается с 12 пина
  }
}

void loop() {
  if ( irrecv.decode( &results )) { 
    Serial.println(results.value, HEX);   //вывожу данные в 16-ричной системе исчисления
    
if (results.value==0xFF30CF&&led1==0){    //если данные совпадают и сигнализация выключена - включить её. При включении  
   for (int i = 12; i <= 19; i++)                      // запускается цикл который постоянно опращивает эти порты и если он видит отличие
  {                                                              // срабатывает сирена
    if (arr[i - 12] != digitalRead(i))
    {
      digitalWrite( 3, HIGH );led1=1;results.value=0; //включаем сирену и вызываем спецназ
   
    }
  }
  }
if (results.value==0xFF30CF&&led1==1){
      digitalWrite( 3,  LOW  );led1=0;results.value=0; //включаем сирену и вызываем спецназ
    
}  

 irrecv.resume();   // ожидаем следующий сигнал с ИК приёмника
  }
  
}

#6 Re: Програмування Arduino » опрос портов ардуино » 2021-05-14 19:18:45

Прошу прощения. Не было времени для описания.
Вот время снова появилось и решил продолжить проект.
Так и не получается  добиться результата.
Подскажите где ошибка?

#include "IRremote.h"  // Подключаю библиотеку для работы с ик пультом
IRrecv irrecv(12);
decode_results results;
int led1=0;

int arr [7]; //определяем массив на 8 элементов

void setup() {
   pinMode( 0, INPUT);
 pinMode( 1, INPUT);
 pinMode( 2, INPUT);
 pinMode( 3, INPUT);
 pinMode( 4, INPUT);
 pinMode( 5, INPUT);
 pinMode( 6, INPUT);
 pinMode( 7, INPUT);
 
pinMode( 13, OUTPUT);
pinMode( 12, INPUT);
  Serial.begin(9600);
  irrecv.enableIRIn();
  
  for (int i = 0; i <= 8; i++)
  {
    pinMode(i, INPUT);
    arr[i - 8] = digitalRead(i);
  }
}

void loop() {
  if ( irrecv.decode( &results )) { 
    Serial.println(results.value, HEX);
    
if (results.value==0xFF30CF&&led1==0){
   for (int i = 0; i <= 8; i++)
  {
    if (arr[i - 8] != digitalRead(i))
    {
      digitalWrite( 13, HIGH );led1=1;results.value=0; //включаем сирену и вызываем спецназ
   
    }
  }
  }
if (results.value==0xFF30CF&&led1==1){
      digitalWrite( 13,  LOW  );led1=0;results.value=0; //включаем сирену и вызываем спецназ
    
}  

 irrecv.resume();   
  }
  
}

#7 Re: Програмування Arduino » опрос портов ардуино » 2021-01-02 17:39:21

я не нашёл информации как мне сравнить два массива!
на ардуино ide вот это не работает :

bool result = equal(begin(arr1),end(arr1), begin(arr2),end(arr2))

Меня именно интересует сравнить два массива как выше описано мной. Есть такая функция?. Код я потом  оформлю сам. Т.е. я с помощью цикла for считаю данные состояния портов в массив. Потом будет таймер 1 сек, и  во второй массив считаю снова порты и если эти два массива не совпадают то звучит сирена. Вот и интересует как сравнить эти два массива???

#9 Re: Програмування Arduino » опрос портов ардуино » 2020-12-29 21:54:23

Правильно ли записал состояние пинов в массивы? И правильно ли сделал сравнение двух массивов?

pinMode(A0,INPUT); //Устанавливаю пины на вход
  pinMode(A1,INPUT);
  pinMode(A2,INPUT);
  pinMode(A3,INPUT);
  pinMode(A4,INPUT);
  pinMode(A5,INPUT);

int vhod1 = A0; // Присваиваю пины переменным
int vhod2 = A1;
int vhod3 = A2;
int vhod4 = A3;
int vhod5 = A4;
int vhod5 = A5;

int arr1 [] {vhod1,vhod2,vhod3,vhod4,vhod5,vhod6};//Первый массив считывается состояние входящих пинов
delay 1000;                                                              //проходит одна секунда
int arr2 [] {vhod1,vhod2,vhod3,vhod4,vhod5,vhod6}; Второй массив считывается всё теже пины 
delay 1000;
bool result = equal(begin(arr1),end(arr1), begin(arr2),end(arr2)); Сравниваю два массива и если они отличаются - то как описано ниже (не знаю насколько правильно ) звучит сирена.

if    (result)  digitalWrite(5 , LOW);  
else 
 digitalWrite(5 , HIGH);

#10 Re: Програмування Arduino » опрос портов ардуино » 2020-12-10 15:43:11

Так не получится. Должно работать так -
С пульта нажав одну кнопку я ставлю телевизоры или компьютеры на сигнализацию.В этот момент происходит опрос входящих портов (ардуино опрашивает все порты ввода - их 8), т.к. к сигнализации не всегда будут подключены 8 устройств, а возможно 7 или 5 - по этому создается 8 переменных. При включении с пульта ардуино опрашивает порты, (допустим 5 из них подключено ()на них низкий уровень сигнала, а 3 отключено на них высокий уровень сигнала). Каждому порту соответствует своя переменная , которая хранит его значение. После того как ардуино опросил все 8 портов, он записал их значения в переменную подождал 3 секунды и дальше программа начинает следить за состоянием этих портов и если оно изменится ну скажем одно устройство подключили или отключили , то на исходящих сигналах ардуино будет высокий уровень сигнала(прозвучит сигнализация. ) Второй кнопкой пульта я отключаю слежение за портами ардуино (т.е. снимаю все устройства с сигнализации) и если что-то подключать или отключать сирена не сработает.

Не знаю как организовать это все в код.

Я вижу это так.

#include "IRremote.h"
IRrecv irrecv(13);
decode_results results;


int button1 = 0; //Кнопка пульта 1 - эта переменная для постановки устройств на сигнализацию
int button2 = 0; //Кнопка пульта 2 - эта переменная для снятия устройств с сигнализации


void setup() {
  // put your setup code here, to run once:

Serial.begin(9600);
  irrecv.enableIRIn();

bool sig0 = digitalRead (A0);
bool sig1 = digitalRead (A1);
bool sig2 = digitalRead (A2);
bool sig3 = digitalRead (A3);
bool sig4 = digitalRead (A4);
bool sig5 = digitalRead (A5);
bool sig6 = digitalRead (11);
bool sig7 = digitalRead (12);
int  ir =   digitalRead (13); //порт ик приёмника



  pinMode(0,OUTPUT);//Входы которые следят за подключенными устройствами
  pinMode(1,OUTPUT);
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);

 
  pinMode(A0,INPUT);
  pinMode(A1,INPUT);
  pinMode(A2,INPUT);
  pinMode(A3,INPUT);
  pinMode(A4,INPUT);
  pinMode(A5,INPUT);
  pinMode(11,INPUT);
  pinMode(12,INPUT);
  pinMode(13,INPUT); //Вход с ик датчика
 
}

void loop() {
  // put your main code here, to run repeatedly:


if ( irrecv.decode( &results )) {
    Serial.println(results.value, HEX);


А вот тут не пойму как описать. Т.е. если код с пульта совпадает и уровень порта входящего сигнала не равен уровню ранее сохраненному сигналу с этого порта, то на D3 подать высокий уровень сигнала

if  (results.value==0xFF42BD&&led1==0&&pin2!=pin1) //С ИК пульта включаем сигнализацию. Если код совпадает и если на
{
  digitalWrite( 3, HIGH );led1=1;results.value=0;
}
if  (results.value==0xFF52AD&&pin1!=pin1&&led1==1){ //этой командой отключаем сигалицацию. Т.е. она не следит за портами и не подает высокий уровень на бузер
  digitalWrite( 3, LOW );led1=0;results.value=0;
}   
irrecv.resume();   
  }
 
}



}

#11 Re: Програмування Arduino » опрос портов ардуино » 2020-12-10 10:39:41

Отредактировал как смог. В том-то и дело , что раньше все было завязано на конструкциях if-else , а теперь не понимаю как это сделать т.к. появилась потребность опроса портов и использования ИК датчика.
Вот код ранее который был:   

if (digitalRead (vhod0) == LOW) //Проверяю есть ли на вход0 - вход7 приходит высокий уровень сигнала
    {
      digitalWrite(signal0, LOW); //Если уровень сигнала высокий на входах, то записать на выходы высокий уровень сигнала
      }
        else
          digitalWrite(signal0, HIGH); // иначе заспсатиь на выходы - низкий уровень сигнала
}

А теперь нужно по нажатии на одну кнопку на пульте опросить все входящие порты и сохранить их значения в переменные и если порт поменяет уровень сигнала - то подать на исходящий порт - высокий уровень. А второй кнопкой пульта как бы снять с сигнализации т.е. чтоб не происходило на входящих портах на исходящих всегда будет низкий уровень.


Я как могу объясняю(. Прошу не пинать сильно - новичёк в программировании

#12 Програмування Arduino » опрос портов ардуино » 2020-12-09 20:18:20

ssipk
відповідей: 31

Добрый день. Нужна помощь. Электронную часть я уже сделал, но не знаю как программно это прописать.
Мне нужно, чтоб при включении с пульта микроконтроллер  опрашивал все 8 входящих портов и сохранял их значения в каких-то переменных. (На каких-то портах будет высокий уровень сигнала , а на каких-то низкий(в этом то у меня и сложность )). После того как он опросил порты и присвоил их значение(высокий или низкий уровень) переменным ,он(микроконтроллер) должен и дальше следить за состоянием портов и если какой либо из них изменит своё  состояние(с высокого на низкий уровень или на оборот), то на исходящем пине d4 - d9(например) будет высокий уровень сигнала. Вторая кнопка пульта отключает ардуино (т.е. при её нажатии как по типу сигнализации первая кнопка включает слежение за портами , а вторая отключает(т.е. ели её нажать то на исходящих портах d4-d9 не будет высокого уровня сигнала)).
У меня скетч вот такой:

#include <IRremote.h> // подключаем библиотеку для IR приемника

IRrecv irrecv(13); // указываем пин, к которому подключен IR приемник
decode_results results;


//---------------------------------------------------------
int led1=0;//Две переменные хранящие в себе информацию с датчика
int led2=0;// Эти две переменные хранят состояние включения и отключения (постановки снятия с сигнализации)

//входящие сигналы с юсб на пины ардуино
int vhod0 = A0;
int signal0 = 13;

//исходящие сигналы с пинов ардуино на микросхему бузера

int signal1 = 3;

void setup() {
// установка пинов на входящий сигнал

irrecv.enableIRIn();  // запускаем прием инфракрасного сигнала
   Serial.begin(9600); // подключаем монитор порта
   
pinMode(13, INPUT); // пин 13 будет входом  ик датчика(англ. «intput»)   
pinMode(vhod0, INPUT);

//установка пинов на исходящий из ардуино сигнал(на управление  микросхемой бузера )


pinMode(signal1, OUTPUT);


}

void loop() {


if ( irrecv.decode( &results )) {        // Если на ИК приемнике, что-то есть
    Serial.println(results.value, HEX);
   
      // включаем   сигнализацию, в зависимости от полученного сигнала 
      if (results.value==0xFF6897&&led1==0&&vhod0!=vhod0){
  digitalWrite( 3, HIGH );led1=1;results.value=0;
}
//И дальше с вторым , третьим, четвёртым.....восьмым портами

//  выключаем сигнализацию, в зависимости от полученного сигнала 
if (results.value==0xFF3333&&led1==1){
  digitalWrite( 3, LOW );led1=0;results.value=0;
}   

//И дальше с вторым , третьим, четвёртым.....восьмым портами

      irrecv.resume(); // принимаем следующий сигнал на ИК приемнике

#13 Проекты » Нужна помощь с светодиодом » 2020-09-12 23:49:09

ssipk
відповідей: 4

Добрый вечер! Есть движковый переключатель 3пин(два положения on/off), двухцветный светодиод с общим минусом и ардуино. Задача такая: При включении внутреннего блока питания сигнал подается на средний вывод переключателя и попадает на ардуино - горит красный светодиод, при переключении в другое положение переключателя  - +5в от внутреннего блока питния отключается а подключается другой источник питания  тоже +5в и по тому же среднему выводу  эти +5в попадают на тотже пин ардуино и горит уже зелёный светодиод. Я знаю , что так ка я нарисовал работать не будет. Но что нужно для реализации написанного и не дорого!

Bez-imeni-1.jpg  - вот схема. Как её переделать

#14 Re: Програмування Arduino » помогите поправить код ibutton+ардуино » 2019-02-25 22:14:53

Я работаю матером по ремонту оргтехники и бытовой техники. Ардуино решил освоить интересная штука. Меня интересует именно программирование.  Модули я сам паяю ... Вот и спрашиваю про хороший учебник ... Я так понимаю Вы на Си пишите?

#15 Re: Програмування Arduino » помогите поправить код ibutton+ардуино » 2019-02-25 21:01:41

Посоветуйте хороший учебник по программированию в среде ардуино и по Си  или С++

#16 Re: Програмування Arduino » помогите поправить код ibutton+ардуино » 2019-02-22 22:05:54

"qwone" - Вам спасибо за код.
А про дверь и светодиод - это я отвечал "vvr"

#17 Re: Програмування Arduino » помогите поправить код ibutton+ардуино » 2019-02-22 20:54:19

qwone- Спасибо. Скопилировался правильно.  Буду на работе проверю.


"а где у вас в коде дверь закрывается через 3 сек."

Дверь в коде - это светодиод!


Serial.println("OK");// Если код совпал пишем ОК!
      digitalWrite(13, HIGH);// Зажигаем диод
            
      delay(3000);// Выдерживаем паузу
      digitalWrite(13, LOW);}// Гасим диод
      else {Serial.println("NO!");// Если несовпадение пишем NO!
      delay(500);}

#18 Програмування Arduino » помогите поправить код ibutton+ардуино » 2019-02-21 22:42:05

ssipk
відповідей: 10

Вот скетч работающего замка. Работает  так поднесли ключ открылась дверь по  истечении 3 секунд сама закрылась. Мне же надо, чтоб поднесли ключ  - открылась дверь и не закрывалась пока ещё раз не поднесут ключ к считывателю. Помогите исправить код.

 

#include <OneWire.h>
OneWire ds(10);// Определяем пин подключения к ключу
byte aaa[2][8] = {{0x01,0x11,0xF7,0x43,0x01,0x00,0x00,0x65},// Двухмерный массив известных ключей  EB 0 0 1 B6 7A 12 1 
                  {0xEB,0x00,0x00,0x01,0xB6,0x7A,0x12,0x01}};// Первое число - количество ключей, второе - количество байт в ключе
byte addr[8], k, m; // Обозначаем массив для чтения ключа из 8 байт
void setup() {
pinMode(13, OUTPUT);// Прописываем диод на пин 13.
Serial.begin(9600);}// Запускаем порт
void loop() {
  m = 0;// Обнуляем указатель наличия ключа
if (ds.search(addr)){// Если устройство подключено - считываем
for (k=0; k<2; k++){// Запускаем цикл перебора ключей
if(aaa[k][0] == addr[0] && aaa[k][1] == addr[1] && aaa[k][2] == addr[2] // Сравниваем побайтно массивы
&& aaa[k][3] == addr[3] && aaa[k][4] == addr[4] && aaa[k][5] == addr[5] // Да, это черезчур громоздко, зато просто "как кувалда".
&& aaa[k][6] == addr[6] && aaa[k][7] == addr[7]){ m=1;}} // Если ключ есть увеличиваем значение указателя
if (m > 0) {// Проверяем значение указателя
      Serial.println("OK");// Если код совпал пишем ОК!
      digitalWrite(13, HIGH);// Зажигаем диод
            
      delay(3000);// Выдерживаем паузу
      digitalWrite(13, LOW);}// Гасим диод
      else {Serial.println("NO!");// Если несовпадение пишем NO!
      delay(500);}

      
for(int i=7; i>-1; i--){// Запускаем цикл печати данных из массива
Serial.print(addr[i], HEX);// Печатаем нужный байт в шестнадцатиричном виде
Serial.print(" ");}// Печатаем пробел
Serial.println();// В конце цикла переводим строку
ds.reset_search();}} // Сбрасываем устройство

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