Узнать состояние пина

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Была тема на форуме, но ничем не закончилась особо. Вопрос такой у меня 9 пинов на выход работают. Надо узнавать их статус для того чтобы выводить в виде индикации через сдвиг. регистры на панель. Да могу применять перменные дополнительные т.е. в них записывать например 1 и потом эти переменные читать и с них уже делать вывод о том в каком состоянии пин. Но мне надо оптимизацию делать. Не хочу использовать лишние переменные. Когда со входными портами там все просто digitalRead, а если пины настроены на выход то как читать их состояние программно без переменных? заранее спасибо за ответы.

reticular
Offline
Зарегистрирован: 09.06.2016

точно также: digitalRead

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Ок попробую. Ну где то читал что не пашет эта функция всегда выводит 1 вроде. Но я попробую

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Seltvik пишет:

где то читал что не пашет эта функция всегда выводит 1 вроде.

Плюньте и разотрите. А потом спокойно используйте digitalRead - всё нормально работает.

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Не пашет(( я забыл сказат ьчто у меня не цифровые пины а аналоговые( Т.е. переодически они работают на выход и надо узновать когда именно это происходит. без лишних переменных. Какие есть варианты?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Seltvik пишет:

не цифровые пины а аналоговые( Т.е. переодически они работают на выход и надо узновать когда именно это происходит. без лишних переменных. Какие есть варианты?

Вариант Вам уже сказали. Он работает у всех, кроме Вас.

Что такое "аналоговые пины работают на выход" знаете тролько Вы. Когда аналоговые пины (кроме 6 и 7 у Нано) работают на выход (pinMode(x, OUTPUT); digitalWrite(x, ...), они ничем (по буквам "н и   ч е м" не отличаются от цифровых.

Если Вы объясните толком что у Вас там за пины и куда они работают, а заодно приведёте скетч, разговор станет более предметным.

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Ок коротко по сути: Камень мена2560, девять пинов аналоговых работают как порты вывода т.е. к ним подключены оптроны и мега как бы выводит так дискретное управление на 9 ног. Так вот вот вывожу я на них напряжение т.е. analogWrite(OUTPORT_1,255);

Но эт опроисходит в специфической функции (не суть). Так вот а в паралель этому всему работает функция вывода индикации через сдвиговые регистры их 3 штуки. Вывод происходит так:

//Функция вывода индикации
void FNC_DISPLAY(){
if (OUT_1==1){IND3 |= (1 << 3);} else {IND3 &= ~(1 << 3);}
if (OUT_2==1){IND3 |= (1 << 1);} else {IND3 &= ~(1 << 1);}
if (OUT_3==1){IND2 |= (1 << 7);} else {IND2 &= ~(1 << 7);}
if (OUT_4==1){IND2 |= (1 << 5);} else {IND2 &= ~(1 << 5);}
if (OUT_5==1){IND2 |= (1 << 3);} else {IND2 &= ~(1 << 3);}
if (OUT_6==1){IND2 |= (1 << 1);} else {IND2 &= ~(1 << 1);}
if (OUT_7==1){IND1 |= (1 << 7);} else {IND1 &= ~(1 << 7);}
if (OUT_8==1){IND1 |= (1 << 5);} else {IND1 &= ~(1 << 5);}
if (OUT_9==1){IND1 |= (1 << 3);} else {IND1 &= ~(1 << 3);}
if (digitalRead(INTPORT_1)==0){IND3 |= (1 << 2);} else {IND3 &= ~(1 << 2);}
if (digitalRead(INTPORT_2)==0){IND3 |= (1 << 0);} else {IND3 &= ~(1 << 0);}
if (digitalRead(INTPORT_3)==0){IND2 |= (1 << 6);} else {IND2 &= ~(1 << 6);}
if (digitalRead(INTPORT_4)==0){IND2 |= (1 << 4);} else {IND2 &= ~(1 << 4);}
if (digitalRead(INTPORT_5)==0){IND2 |= (1 << 2);} else {IND2 &= ~(1 << 2);}
if (digitalRead(INTPORT_6)==0){IND2 |= (1 << 0);} else {IND2 &= ~(1 << 0);}
if (digitalRead(INTPORT_7)==0){IND1 |= (1 << 6);} else {IND1 &= ~(1 << 6);}
if (digitalRead(INTPORT_8)==0){IND1 |= (1 << 4);} else {IND1 &= ~(1 << 4);}
if (digitalRead(INTPORT_9)==0){IND1 |= (1 << 2);} else {IND1 &= ~(1 << 2);}
//if (Rel_1==1){IND1 |= (1 << 1);} else {IND1 &= ~(1 << 1);}
if (digitalRead(RELAY_2)==1){IND1 |= (1 << 0);} else {IND1 &= ~(1 << 0);}
digitalWrite(IND_ST_CP, LOW);
shiftOut(IND_DS, IND_SH_CP, MSBFIRST, IND1);
shiftOut(IND_DS, IND_SH_CP, MSBFIRST, IND2);
shiftOut(IND_DS, IND_SH_CP, MSBFIRST, IND3);
digitalWrite(IND_ST_CP, HIGH);  }

Вот щас у меня вверху это переменные но мне от них надо избавится. ПРобывал конструкцию digitalRead для аналоговых партов не пашет( и analogread тоже не пашет. Вот я и спрашиваю ест ьеще варианты? или может я че не так делаю. 

А вот ниже порты которые работают на ввод они цифровые и там все пашет норм.

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

А обязательно в сетапе делать объяву такую:

pinMode(14, OUTPUT);
digitalWrite(14, HIGH);  ??? я просто не делал сразу в функции передаю на нужный порт значение через analogWrite

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Скетч неполный, поэтому сказть ничего нельзя.

о, судя по последнему посту, Вы пихаете что-то на пин 14 (он же A0) с помощью analogWrite, я Вас правильно понял? Если так, то это не работает и работаnь не может. Что у Вас за ардуино - видимо, большой секрет (ещё больший, чем текст программы), но если что-то типа UNO/Nano, то analogWrite работает только с цифровыми пинами 3, 11, 5, 6, 9, 10 и ни с какими другими.

И ещё, когда Вы показываете людям скетч, всегда делайте следующее:

1) скетч должен быть полным, чтобы человек мог его запустить.

2) скетч должен быть коротким. Никто не будет продираться через 100500 строк Вашего вывода на LCD или там чтения из порта - пишете короткий скетч (не более 10-20 строк) который запускается и демонстрирует проблему.

Тогда вероятность, что кто-то поможет велика. А так как Вы сделали. скетч неполный, чему равны используемые константы - ХЗ. И как тут разбираться? 

Т.е. совет-то простой, не создавайте лишних проблем тому, кто хочет Вам помочь и люди к Вам потянутся.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Аналоговые пины у вас это
аналоговые входы
или ШИМ выходы???
И те и другие могут выдавать сигнал на опртон,
но в абсолютно разных режимах.

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

В том то и дело. Что по простому тут нельзя((( Весь скетч огромный очень. Плата не ардуино!!! плата это ПЛК собственного производства. еще просто то там стоит атмега 2560 у нее 9 входом цифровых работают на вход и 9 аналогвых пинов работают на выход. Вот и вопрос как лучше организовать опрос пина чтобы узнать в каком он щас состоянии. МОгу кончено скетч сюда выложить но там реально ребят много всего((( Поэтому я не прошу вдаватся в код а просто порассждать в целом. Крч я так понял что мне правильнее объявить в сетапе пины как цифру двумя строчками так? как выше я писал. И после этого пробывать узнавать на них статус командой digitalread так?

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

Seltvik, создается впечатление, что Вы хотите сделать одно, а делаете совершенно другое.

И происходит это от того, что Вы не имеете ни малейшего понятия, что такое аналоговый порт, что именно делает analogWrite, и что, в частности, между ними нет никакой связи.

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

без комментариев))))

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

Seltvik пишет:

В том то и дело. Что по простому тут нельзя((( Весь скетч огромный очень. Плата не ардуино!!! плата это ПЛК собственного производства. еще просто то там стоит атмега 2560 у нее 9 входом цифровых работают на вход и 9 аналогвых пинов работают на выход. Вот и вопрос как лучше организовать опрос пина чтобы узнать в каком он щас состоянии. МОгу кончено скетч сюда выложить но там реально ребят много всего((( Поэтому я не прошу вдаватся в код а просто порассждать в целом. Крч я так понял что мне правильнее объявить в сетапе пины как цифру двумя строчками так? как выше я писал. И после этого пробывать узнавать на них статус командой digitalread так?

Если "просто порассждать в целом", то давайте начнем с ответов на некоторые вопросы (для 2560 меги):

1. Какие именно пины Вы считаете аналоговыми? Перечислите их.

2. Как именно работает analogWrite? Что при этом происходит с пином?

3. На каких именно пинах может работать analogWrite? Перечислите их.

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Вот давайте так. вот есть функция:

//Функция вывода индикации
void FNC_DISPLAY(){
if (digitalRead(OUTPORT_1)==1){IND3 |= (1 << 3);} else {IND3 &= ~(1 << 3);}
if (digitalRead(OUTPORT_2)==1){IND3 |= (1 << 1);} else {IND3 &= ~(1 << 1);}
if (digitalRead(OUTPORT_3)==1){IND2 |= (1 << 7);} else {IND2 &= ~(1 << 7);}
if (digitalRead(OUTPORT_4)==1){IND2 |= (1 << 5);} else {IND2 &= ~(1 << 5);}
if (digitalRead(OUTPORT_5)==1){IND2 |= (1 << 3);} else {IND2 &= ~(1 << 3);}
if (digitalRead(OUTPORT_6)==1){IND2 |= (1 << 1);} else {IND2 &= ~(1 << 1);}
if (digitalRead(OUTPORT_7)==1){IND1 |= (1 << 7);} else {IND1 &= ~(1 << 7);}
if (digitalRead(OUTPORT_8)==1){IND1 |= (1 << 5);} else {IND1 &= ~(1 << 5);}
if (digitalRead(OUTPORT_9)==1){IND1 |= (1 << 3);} else {IND1 &= ~(1 << 3);}
if (digitalRead(INTPORT_1)==0){IND3 |= (1 << 2);} else {IND3 &= ~(1 << 2);}
if (digitalRead(INTPORT_2)==0){IND3 |= (1 << 0);} else {IND3 &= ~(1 << 0);}
if (digitalRead(INTPORT_3)==0){IND2 |= (1 << 6);} else {IND2 &= ~(1 << 6);}
if (digitalRead(INTPORT_4)==0){IND2 |= (1 << 4);} else {IND2 &= ~(1 << 4);}
if (digitalRead(INTPORT_5)==0){IND2 |= (1 << 2);} else {IND2 &= ~(1 << 2);}
if (digitalRead(INTPORT_6)==0){IND2 |= (1 << 0);} else {IND2 &= ~(1 << 0);}
if (digitalRead(INTPORT_7)==0){IND1 |= (1 << 6);} else {IND1 &= ~(1 << 6);}
if (digitalRead(INTPORT_8)==0){IND1 |= (1 << 4);} else {IND1 &= ~(1 << 4);}
if (digitalRead(INTPORT_9)==0){IND1 |= (1 << 2);} else {IND1 &= ~(1 << 2);}
//if (Rel_1==1){IND1 |= (1 << 1);} else {IND1 &= ~(1 << 1);}
if (digitalRead(RELAY_2)==1){IND1 |= (1 << 0);} else {IND1 &= ~(1 << 0);}
digitalWrite(IND_ST_CP, LOW);
shiftOut(IND_DS, IND_SH_CP, MSBFIRST, IND1);
shiftOut(IND_DS, IND_SH_CP, MSBFIRST, IND2);
shiftOut(IND_DS, IND_SH_CP, MSBFIRST, IND3);
digitalWrite(IND_ST_CP, HIGH);  }

В ней переменные думаю все понятны. INы это байты на каждый сдвиг регистор свой байт. А в настройках у меня вот часть кода сетапа:

void setup() {
pinMode(OUTPORT_1, OUTPUT);                             //Настройка порта вывода
pinMode(OUTPORT_2, OUTPUT);                             //Настройка порта вывода
pinMode(OUTPORT_3, OUTPUT);                             //Настройка порта вывода
pinMode(OUTPORT_4, OUTPUT);                             //Настройка порта вывода
pinMode(OUTPORT_5, OUTPUT);                             //Настройка порта вывода
pinMode(OUTPORT_6, OUTPUT);                             //Настройка порта вывода
pinMode(OUTPORT_7, OUTPUT);                             //Настройка порта вывода
pinMode(OUTPORT_8, OUTPUT);                             //Настройка порта вывода
pinMode(OUTPORT_9, OUTPUT);                             //Настройка порта вывода
digitalWrite(OUTPORT_1, HIGH);
digitalWrite(OUTPORT_2, HIGH);
digitalWrite(OUTPORT_3, HIGH);
digitalWrite(OUTPORT_4, HIGH);
digitalWrite(OUTPORT_5, HIGH);
digitalWrite(OUTPORT_6, HIGH);
digitalWrite(OUTPORT_7, HIGH);
digitalWrite(OUTPORT_8, HIGH);
digitalWrite(OUTPORT_9, HIGH);
pinMode(INTPORT_1, INPUT_PULLUP);                       //Настройка порта ввода
pinMode(INTPORT_2, INPUT_PULLUP);                       //Настройка порта ввода
pinMode(INTPORT_3, INPUT_PULLUP);                       //Настройка порта ввода
pinMode(INTPORT_4, INPUT_PULLUP);                       //Настройка порта ввода
pinMode(INTPORT_5, INPUT_PULLUP);                       //Настройка порта ввода
pinMode(INTPORT_6, INPUT_PULLUP);                       //Настройка порта ввода
pinMode(INTPORT_7, INPUT_PULLUP);                       //Настройка порта ввода
pinMode(INTPORT_8, INPUT_PULLUP);                       //Настройка порта ввода
pinMode(INTPORT_9, INPUT_PULLUP);                       //Настройка порта ввода
pinMode(IND_ST_CP, OUTPUT);                             //Настройка порта управления индикацией
pinMode(IND_SH_CP, OUTPUT);                             //Настройка порта управления индикацией
pinMode(IND_DS, OUTPUT);                                //Настройка порта управления индикацией
pinMode(RELAY_2, OUTPUT);                               //Настройка порта управления реле 2

Должно работать в той функции опрос? если я где нит ьв программе буду делать вывод щас через digitalWrite на заданные пины? я щас попробую но это я просто в целом написал

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Я же Вам уже сказал - аналоговые пины не работают с analogWrite. НЕ РАБОТАЮТ! analogWrite работает только с цифровыми пинами и то не со всеми. В случае 2560, analogWrite можно использовать ТОЛЬКО с цифрвыми пинами 2-13 и 44-46 и ни с каким другими.  Вам что-то не понятно? 

Seltvik пишет:
просто порассждать в целом.
Это Вы форумом ошиблись. В целом можно порассуждать вот здесь.

 

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Вот какие пины:

int Protocol[5];                                        //Массив протокла обмена с помощью nRF2401
int OUTPORT_1=A0;                                       //Установка пина вывода
int OUTPORT_2=A1;                                       //Установка пина вывода
int OUTPORT_3=A2;                                       //Установка пина вывода
int OUTPORT_4=A3;                                       //Установка пина вывода
int OUTPORT_5=A4;                                       //Установка пина вывода
int OUTPORT_6=A5;                                       //Установка пина вывода
int OUTPORT_7=A6;                                       //Установка пина вывода
int OUTPORT_8=A7;                                       //Установка пина вывода
int OUTPORT_9=A8;                                       //Установка пина вывода
int INTPORT_1=41;                                       //Установка пина ввода
int INTPORT_2=40;                                       //Установка пина ввода
int INTPORT_3=37;                                       //Установка пина ввода
int INTPORT_4=36;                                       //Установка пина ввода
int INTPORT_5=35;                                       //Установка пина ввода
int INTPORT_6=34;                                       //Установка пина ввода
int INTPORT_7=33;                                       //Установка пина ввода
int INTPORT_8=32;                                       //Установка пина ввода
int INTPORT_9=31;                                       //Установка пина ввода
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Seltvik пишет:

Вот давайте так. вот есть функция:

нет, не давайте.

Я же Вам писал, код должен быть полным. Вот чему равны Ваши константы? ХЗ! А значит и ответ на Ваш вопрос

Seltvik пишет:

Должно работать в той функции опрос?

Точно такой же - ХЗ.

Вы не читаете, что Вам пишут или смысла не слова "полный" не понимаете?

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

Seltvik, как Вы сами думаете, приведенный Вами фрагмент откомпилируется?

Если "нет", то почему? (правильный ответ: "потому, что компилятору недостаточно информации, чтобы это правильно откомпилировать", а Вы всерьез считаете, что при явно недостаточной информации можно ответить на Ваши вопросы?)

Давайте начнем с начала: ответьте на вопросы из поста №13.

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Ок вот ваш весь скетч:

#define BLYNK_DEBUG                                     //Дебаг работы с Blynk
#define BLYNK_PRINT Serial3                             //Вывод данных в сериал порт
#include <SPI.h>                                        //Библиотека для SPI
#include "nRF24L01.h"                                   //Библиотека для nRF2401+
#include "RF24.h"                                       //Библиотека для nRF2401+
#include <ESP8266_Lib.h>                                //Библиотека для ESP
#include <BlynkSimpleShieldEsp8266.h>                   //Библиотека для Blynk
#include <SimpleModbusMaster.h>                         //Библиотека для протокола ModBUS
#include <DS3231.h>                                     //Библиотека для часов DS3231
#include <Wire.h>                                       //Библиотека Wire
#include <Eeprom24C04_16.h>                             //Библиотека для работы с памятью 24С04
char auth[] = "123123123";       //Ключ для подключения к WiFi
char ssid[] = "123123";                                  //Логин для подключения к WiFi
char pass[] = "123123";                               //Пароль для подключения к WiFi
#define EspSerial Serial2                               //Установка сериала для работы с ESP
#define ESP8266_BAUD 115200                             //Установка скорости для работы с ESP
ESP8266 wifi(&EspSerial);                               //Переменная для ESP
DS3231  rtc(SDA, SCL);                                  //Переменная для DS3231
Time  t;                                                //Переменная для хранения времени
#define baud        9600                                //Установка скорости для modbus
#define timeout     1000                                //Установка задержки для modbus
#define polling     200                                 //Установка          modbus
#define retry_count 10                                  //Установка повторов для modbus
#define TxEnablePin 4                                   //Установка номера пина управления для modbus
#define TOTAL_NO_OF_REGISTERS 100                       //Установка количества регистров для modbus
#define EEPROM_ADDRESS  0x50                            //Установка адреса памяти
static Eeprom24C04_16 eeprom(EEPROM_ADDRESS);
enum {                                                  //Установка пакетов для modbus
PACKET1, 
PACKET2,
PACKET3,
PACKET4,
TOTAL_NO_OF_PACKETS};
Packet packets[TOTAL_NO_OF_PACKETS];                    //Установка переменной пакетов modbus
unsigned int regs[TOTAL_NO_OF_REGISTERS];               //Установка переменной для регистров modbus
const uint64_t pipe = 0xF0F1F2F3F4LL;                   //Установка номера трубы для передачи и приема nRF2401
RF24 radio(8, 9);                                       //Установка пинов CE, CSN для nRF2401
int Protocol[5];                                        //Массив протокла обмена с помощью nRF2401
int OUTPORT_1=A0;                                       //Установка пина вывода
int OUTPORT_2=A1;                                       //Установка пина вывода
int OUTPORT_3=A2;                                       //Установка пина вывода
int OUTPORT_4=A3;                                       //Установка пина вывода
int OUTPORT_5=A4;                                       //Установка пина вывода
int OUTPORT_6=A5;                                       //Установка пина вывода
int OUTPORT_7=A6;                                       //Установка пина вывода
int OUTPORT_8=A7;                                       //Установка пина вывода
int OUTPORT_9=A8;                                       //Установка пина вывода
int INTPORT_1=41;                                       //Установка пина ввода
int INTPORT_2=40;                                       //Установка пина ввода
int INTPORT_3=37;                                       //Установка пина ввода
int INTPORT_4=36;                                       //Установка пина ввода
int INTPORT_5=35;                                       //Установка пина ввода
int INTPORT_6=34;                                       //Установка пина ввода
int INTPORT_7=33;                                       //Установка пина ввода
int INTPORT_8=32;                                       //Установка пина ввода
int INTPORT_9=31;                                       //Установка пина ввода
int AINTPORT_1=A9;                                      //Установка пина А.ввода
int AINTPORT_2=A10;                                     //Установка пина А.ввода
int AINTPORT_3=A11;                                     //Установка пина А.ввода
int AINTPORT_4=A12;                                     //Установка пина А.ввода
int AINTPORT_5=A13;                                     //Установка пина А.ввода
int RELAY_1=A14;                                        //Установка пина реле 1
int RELAY_2=26;                                         //Установка пина реле 2
int IND_ST_CP=45;                                       //Установка пина управления индикацией
int IND_SH_CP=46;                                       //Установка пина управления индикацией
int IND_DS=44;                                          //Установка пина управления индикацией
byte IND1=B00000000;                                    //Установка байта первой секции индикации
byte IND2=B00000000;                                    //Установка байта второй секции индикации
byte IND3=B00000000;                                    //Установка байта третей секции индикации
int BUZ=2;                                              //Установка пина бузера
int LOAD=29;                                            //Установка пина бузера                         
//////////////////////////////////////////////////////////////////////////////////////////////////
//ПЕРЕМЕННЫЕ ПОЛЬЗОВАТЕЛЯ/////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
int PIR_1=0;                                            //Переменная PIR датчика
int PIR_2=0;                                            //Переменная PIR датчика
int PIR_3=0;                                            //Переменная PIR датчика
int PIR_4=0;                                            //Переменная PIR датчика
int PIR_5=0;                                            //Переменная PIR датчика
int PIR_6=0;                                            //Переменная PIR датчика
int PIR_7=0;                                            //Переменная PIR датчика
int DEF_1=0;                                            //Переменная датчика охраны 1
int DEF_2=0;                                            //Переменная датчика охраны 2
int DEF_3=0;                                            //Переменная датчика охраны 3
int DEF_4=0;                                            //Переменная датчиков охраны 4
int OUT_1=0;                                            //Переменная состояния пина
int OUT_2=0;                                            //Переменная состояния пина
int OUT_3=0;                                            //Переменная состояния пина
int OUT_4=0;                                            //Переменная состояния пина
int OUT_5=0;                                            //Переменная состояния пина
int OUT_6=0;                                            //Переменная состояния пина
int OUT_7=0;                                            //Переменная состояния пина
int OUT_8=0;                                            //Переменная состояния пина
int OUT_9=0;                                            //Переменная состояния пина
int IN_1=0;                                             //Переменная состояния пина
int IN_2=0;                                             //Переменная состояния пина
int IN_3=0;                                             //Переменная состояния пина
int IN_4=0;                                             //Переменная состояния пина
int IN_5=0;                                             //Переменная состояния пина
int IN_6=0;                                             //Переменная состояния пина
int IN_7=0;                                             //Переменная состояния пина
int IN_8=0;                                             //Переменная состояния пина
int IN_9=0;                                             //Переменная состояния пина
float TEMP_1=0;                                         //Переменная для температуры 1
float TEMP_2=0;                                         //Переменная для температуры 2
float TEMP_3=0;                                         //Переменная для температуры 3
float TEMP_4=0;                                         //Переменная для температуры 4
float TEMP_5=0;                                         //Переменная для температуры 5
float TEMP_S=0;                                         //Переменная для температуры 6
float HUM_1=0;                                          //Переменная для влажности 1
float HUM_2=0;                                          //Переменная для влажности 2
float HUM_3=0;                                          //Переменная для влажности 3
float HUM_4=0;                                          //Переменная для влажности 4
float BAR_1=0;                                          //Переменная для давления
int LED_1=0;                                            //Переменная для статуса светодиода
int LED_2=0;                                            //Переменная для статуса светодиода
int LED_3=0;                                            //Переменная для статуса светодиода
int LED_4=0;                                            //Переменная для статуса светодиода
int MODE_1=0;                                           //Переменная для хранения режима охраны
int MODE_2=0;                                           //Переменная для хранения режима автоохраны
int MODE_3=0;                                           //Переменная для хранения режима автосвета
int MODE_4=0;                                           //Переменная для хранения режима автоклимата
int ALARM=0;                                            //Переменная для сброса охраны
float WATER_COLD=0;                                     //Переменная для хранения показания х.воды
float WATER_HOT=0;                                      //Переменная для хранения показания г.воды
float KWT=0;                                            //Переменная для хранения показания кВт
int Hour=0;                                             //Переменная для хранения часов
int Min=0;                                              //Переменная для хранения минут
const word address1 = 0;                                //Переменная адреса 1 
const word address2 = 0;                                //Переменная адреса 2 
const word address3 = 0;                                //Переменная адреса 3 
const word address4 = 0;                                //Переменная адреса 4 
const word address5 = 0;                                //Переменная адреса 5 
String Status1;
String Status2;
String Status3;
String Status4;

BlynkTimer timer;                                       //Объявление виджета светодиода таймера Blynk
BLYNK_WRITE(V0){OUT_1=1;} else {OUT_1=0;}               //Получение статуса света 1
BLYNK_WRITE(V1){FNC_LIVOLO(OUTPORT_2);}                 //Получение статуса света 2
BLYNK_WRITE(V2){FNC_LIVOLO(OUTPORT_3);}                 //Получение статуса света 3
BLYNK_WRITE(V3){FNC_LIVOLO(OUTPORT_4);}                 //Получение статуса света 4
BLYNK_WRITE(V4){FNC_LIVOLO(OUTPORT_5);}                 //Получение статуса света 5
BLYNK_WRITE(V5){FNC_LIVOLO(OUTPORT_6);}                 //Получение статуса света 6
BLYNK_WRITE(V6){FNC_LIVOLO(OUTPORT_7);}                 //Получение статуса света 7
BLYNK_WRITE(V21){MODE_1=param.asInt();}                 //Получение статуса режима охраны
BLYNK_WRITE(V41){MODE_2=param.asInt();}                 //Получение статуса режима автоохраны
BLYNK_WRITE(V39){MODE_3=param.asInt();}                 //Получение статуса режима автосвета
BLYNK_WRITE(V40){MODE_4=param.asInt();}                 //Получение статуса режима автоклимата
BLYNK_WRITE(V25){ALARM=param.asInt();}                  //Получение статуса сброса сирены

BLYNK_WRITE(V20){FNC_SEND_NRF(344,255);}                //Включение увлажнителя
BLYNK_WRITE(V22){FNC_SEND_NRF(344,255);}                //Включение кондиционера
BLYNK_WRITE(V19){FNC_SEND_NRF(344,255);}                //Включение диспенсера
BLYNK_WRITE(V33){FNC_SEND_NRF(344,255);}                //Закрыть клапана
BLYNK_WRITE(V34){FNC_SEND_NRF(344,255);}                //Открыть клапана

void TimerTemp(){
Blynk.virtualWrite(V7, TEMP_1);                         //Вывод температуры 1
Blynk.virtualWrite(V8, TEMP_2);                         //Вывод температуры 2
Blynk.virtualWrite(V9, TEMP_3);                         //Вывод температуры 3
Blynk.virtualWrite(V10, TEMP_4);                        //Вывод температуры 4
Blynk.virtualWrite(V15, TEMP_5);}                       //Вывод температуры 5
void TimerHum(){
Blynk.virtualWrite(V11, HUM_1);                         //Вывод влажности 1
Blynk.virtualWrite(V12, HUM_2);                         //Вывод влажности 2
Blynk.virtualWrite(V13, HUM_3);                         //Вывод влажности 3
Blynk.virtualWrite(V14, HUM_4);                         //Вывод влажности 4
Blynk.virtualWrite(V16, BAR_1);}                        //Вывод давления  1
void Batstatus(){
Blynk.virtualWrite(V29, LED_1);                         //Статус батарейки 1
Blynk.virtualWrite(V30, LED_2);                         //Статус батарейки 2
Blynk.virtualWrite(V31, LED_3);                         //Статус батарейки 3
Blynk.virtualWrite(V32, LED_4);}                        //Статус батарейки 4
void TimerWE(){
Blynk.virtualWrite(V26, KWT);                           //Вывод килловатт
Blynk.virtualWrite(V27, WATER_HOT);                     //Вывод г.воды
Blynk.virtualWrite(V28, WATER_COLD);}                   //Вывод х.воды
void TempDS(){
Blynk.virtualWrite(V17, TEMP_S);                        //Вывод температуры контроллера
FNC_DSTEMP();}
void TimeDS(){
Blynk.virtualWrite(V35, Hour);                          //Вывод часа
Blynk.virtualWrite(V36, Min);                           //Вывод минут
FNC_DSTIME();}
void TimerSecurity(){
Blynk.virtualWrite(V23, Status1);                       //Вывод статуса движение
Blynk.virtualWrite(V38, Status2);                       //Вывод статуса дым
Blynk.virtualWrite(V18, Status3);                       //Вывод статуса протечка
Blynk.virtualWrite(V24, Status4);                       //Вывод статуса дверь
}

//ПЕРВИЧНАЯ НАСТРОЙКА ПРИ ЗАПУСКЕ/////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
pinMode(OUTPORT_1, OUTPUT);                             //Настройка порта вывода
pinMode(OUTPORT_2, OUTPUT);                             //Настройка порта вывода
pinMode(OUTPORT_3, OUTPUT);                             //Настройка порта вывода
pinMode(OUTPORT_4, OUTPUT);                             //Настройка порта вывода
pinMode(OUTPORT_5, OUTPUT);                             //Настройка порта вывода
pinMode(OUTPORT_6, OUTPUT);                             //Настройка порта вывода
pinMode(OUTPORT_7, OUTPUT);                             //Настройка порта вывода
pinMode(OUTPORT_8, OUTPUT);                             //Настройка порта вывода
pinMode(OUTPORT_9, OUTPUT);                             //Настройка порта вывода
digitalWrite(OUTPORT_1, HIGH);
digitalWrite(OUTPORT_2, HIGH);
digitalWrite(OUTPORT_3, HIGH);
digitalWrite(OUTPORT_4, HIGH);
digitalWrite(OUTPORT_5, HIGH);
digitalWrite(OUTPORT_6, HIGH);
digitalWrite(OUTPORT_7, HIGH);
digitalWrite(OUTPORT_8, HIGH);
digitalWrite(OUTPORT_9, HIGH);
pinMode(INTPORT_1, INPUT_PULLUP);                       //Настройка порта ввода
pinMode(INTPORT_2, INPUT_PULLUP);                       //Настройка порта ввода
pinMode(INTPORT_3, INPUT_PULLUP);                       //Настройка порта ввода
pinMode(INTPORT_4, INPUT_PULLUP);                       //Настройка порта ввода
pinMode(INTPORT_5, INPUT_PULLUP);                       //Настройка порта ввода
pinMode(INTPORT_6, INPUT_PULLUP);                       //Настройка порта ввода
pinMode(INTPORT_7, INPUT_PULLUP);                       //Настройка порта ввода
pinMode(INTPORT_8, INPUT_PULLUP);                       //Настройка порта ввода
pinMode(INTPORT_9, INPUT_PULLUP);                       //Настройка порта ввода
pinMode(IND_ST_CP, OUTPUT);                             //Настройка порта управления индикацией
pinMode(IND_SH_CP, OUTPUT);                             //Настройка порта управления индикацией
pinMode(IND_DS, OUTPUT);                                //Настройка порта управления индикацией
pinMode(RELAY_2, OUTPUT);                               //Настройка порта управления реле 2
rtc.begin();                                            //Запуск часов
//rtc.setDOW(SUNDAY);                                   //Установка дня часов
//rtc.setTime(16, 02, 0);                               //Установка времени часов
//rtc.setDate(24, 6, 2018);                             //Установка даты часов
eeprom.initialize();                                    //Иницилизация EEPROM
Serial3.begin(9600);                                    //Запуск последовательного порта 3
EspSerial.begin(ESP8266_BAUD);                          //Запуск ESP
Blynk.begin(auth, wifi, ssid, pass);                    //Запуск Blynk
timer.setInterval(65000L, Batstatus);                    //Создание таймера для светодиодов
timer.setInterval(60000L, TimerWE);                     //Создание таймера для воды
timer.setInterval(7000L, TimerSecurity);               //Создание таймера для охраны
timer.setInterval(30000L, TimerHum);                    //Создание таймера для влажности
timer.setInterval(15000L, TimerTemp);                   //Создание таймера для температуры
timer.setInterval(10000L, TempDS);                      //Создание таймера для температуры к
timer.setInterval(5000L,  TimeDS);                      //Создание таймера для времени
radio.begin();                                          //Запуск приемо-передатчика nRF2401
delay(200);
radio.setChannel(100);                                  //Выбор канала nRF2401
radio.setDataRate(RF24_1MBPS);                          //Выбор скорости nRF2401    
radio.setPALevel(RF24_PA_HIGH);                         //Выбор мощности nRF2401
//radio.setAutoAck(false);                              //Отключение приема nRF2401
radio.openReadingPipe(1,pipe);                          //Открытие трубы nRF2401                                                              
radio.startListening();                                 //Запуск прослушивания эфира nRF2401   
modbus_construct(&packets[PACKET1], 3, READ_HOLDING_REGISTERS, 0, 12, 0); //Формаирование пакета modbus 1
modbus_construct(&packets[PACKET2], 2, READ_HOLDING_REGISTERS, 0, 7, 12); //Формаирование пакета modbus 2
modbus_construct(&packets[PACKET3], 4, READ_HOLDING_REGISTERS, 0, 3, 19); //Формаирование пакета modbus 3
//PRESET_MULTIPLE_REGISTERS
modbus_configure(&Serial, baud, SERIAL_8N2, timeout, polling, retry_count, TxEnablePin, packets, TOTAL_NO_OF_PACKETS, regs);
}

//ОСНОВНОЙ ЦИКЛ ПРОШИВКИ//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
digitalWrite(LOAD,HIGH);                                                                        //Включение светодиода цикла
Blynk.run();                                                                                    //Опрос сервера Blynk 
timer.run();                                                                                    //Выполнение таймеров
modbus_update();                                                                                //Запуск опроса по MODBUS
FNC_VARIABLE();                                                                                 //Работа с переменными
FNC_TAKE_NRF();                                                                                 //Запуск опроса по nRF2401
if (MODE_1==1){FNC_SECURITY();}                                                                 //Включение функции охарны
FNC_RESET_SECURITY();                                                                           //Сброс сигнализации
FNC_OUTPORTS();
FNC_DISPLAY();                                                                                  //Обновление индикации
digitalWrite(LOAD,LOW);                                                                         //Выключение светодиода цикла
}

//ПОЛЬЗОВАТЕЛЬСКИЕ ФУНКЦИИ////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
//Функция записи в доп.память
void FNC_WRITE_EEPROM(){
//eeprom.writeByte(address1, Temp);  
}

//Функция чтения доп.памяти
void FNC_READ_EEPROM(){
//data = eeprom.readByte(address);
}

//Функция охраны
void FNC_SECURITY(){
if (DEF_1==1){Status1="ALARM"; analogWrite(RELAY_1,255);}
if (DEF_2==1){Status2="ALARM"; analogWrite(RELAY_1,255);}
if (DEF_3==1){Status3="ALARM"; analogWrite(RELAY_1,255);}
if (DEF_4==1){Status4="ALARM"; analogWrite(RELAY_1,255);}
}

//Функция сброса охраны
void FNC_RESET_SECURITY(){
if (ALARM==1){
analogWrite(RELAY_1,0);  
Status1="NO EVENTS";
Status2="NO EVENTS";
Status3="NO EVENTS";
Status4="NO EVENTS";
ALARM=0;}}

//Функция автосвета
void FNC_AUTO_LIGHT(){}

//Функция полного отключения света
void FNC_OFF_LIGHT(){}

//Функция автоклимата
void FNC_AUTO_CLIMAT(){}
                                                                  
//Функция преобразования переменных
void FNC_VARIABLE(){
TEMP_1=regs[0];                                                                                 //Запись данных в переменные пользователя
TEMP_2=regs[3];                                                                                 //Запись данных в переменные пользователя
TEMP_3=regs[6];                                                                                 //Запись данных в переменные пользователя
TEMP_4=regs[9];                                                                                 //Запись данных в переменные пользователя
TEMP_1=TEMP_1/10;                                                                               //Запись данных в переменные пользователя
TEMP_2=TEMP_2/10;                                                                               //Запись данных в переменные пользователя
TEMP_3=TEMP_3/10;                                                                               //Запись данных в переменные пользователя
TEMP_4=TEMP_4/10;                                                                               //Запись данных в переменные пользователя
HUM_1=regs[1];                                                                                  //Запись данных в переменные пользователя
HUM_2=regs[4];                                                                                  //Запись данных в переменные пользователя
HUM_3=regs[7];                                                                                  //Запись данных в переменные пользователя
HUM_4=regs[10];                                                                                 //Запись данных в переменные пользователя
PIR_1=regs[12];                                                                                 //Запись данных в переменные пользователя
PIR_2=regs[13];                                                                                 //Запись данных в переменные пользователя
PIR_3=regs[14];                                                                                 //Запись данных в переменные пользователя
PIR_4=regs[15];                                                                                 //Запись данных в переменные пользователя
PIR_5=regs[16];                                                                                 //Запись данных в переменные пользователя
PIR_6=regs[17];                                                                                 //Запись данных в переменные пользователя
PIR_7=regs[18];                                                                                 //Запись данных в переменные пользователя
DEF_1=regs[19];                                                                                 //Запись данных в переменные пользователя
DEF_2=regs[20];                                                                                 //Запись данных в переменные пользователя
DEF_3=regs[21];                                                                                 //Запись данных в переменные пользователя
if (PIR_1==0){DEF_4=1;} else {DEF_4=0;}                                                           //Запись данных в переменные пользователя
  
if (regs[2]==1) {LED_1=255;} else {LED_1=0;}
if (regs[5]==1) {LED_2=255;} else {LED_2=0;}
if (regs[8]==1) {LED_3=255;} else {LED_3=0;}
if (regs[11]==1){LED_4=255;} else {LED_4=0;}
}

//Функция отправки данных с nRF2401
void FNC_SEND_NRF (int ID, int data) {
Protocol[0]=ID;
Protocol[1]=data;
radio.stopListening(); 
radio.openWritingPipe(pipe);
radio.write(&Protocol, sizeof(Protocol));
radio.openReadingPipe(1,pipe);                                                              
radio.startListening();}
    
//Функция приема данных с nRF2401
void FNC_TAKE_NRF(){
if (radio.available()){ radio.read(&Protocol, sizeof(Protocol));                                //Получение данных по nRF2401
if (Protocol[0]==556){TEMP_5=Protocol[1]; BAR_1=Protocol[2]; TEMP_5=TEMP_5/10; BAR_1=BAR_1/10;} //Данные с в.датчика температуры
if (Protocol[0]==333){KWT=Protocol[1];}                                                         //Данные с в.датчика эл.энергии
if (Protocol[0]==444){WATER_HOT=Protocol[1]; WATER_COLD=Protocol[2];}}                          //Данные с в.датчика воды
}

//Функция управления LIVOLO выключателями
void FNC_LIVOLO (int Butt){
  analogWrite(Butt,255);
  delay(100);
  analogWrite(Butt,0);}

//Функция вывода индикации
void FNC_OUTPORTS(){
if (OUT_1==1){analogWrite(OUTPORT_1,255);} else {analogWrite(OUTPORT_1,0);}
if (OUT_2==1){analogWrite(OUTPORT_2,255);} else {analogWrite(OUTPORT_2,0);}
if (OUT_3==1){analogWrite(OUTPORT_3,255);} else {analogWrite(OUTPORT_3,0);}
if (OUT_4==1){analogWrite(OUTPORT_4,255);} else {analogWrite(OUTPORT_4,0);}
if (OUT_5==1){analogWrite(OUTPORT_5,255);} else {analogWrite(OUTPORT_5,0);}
if (OUT_6==1){analogWrite(OUTPORT_6,255);} else {analogWrite(OUTPORT_6,0);}
if (OUT_7==1){analogWrite(OUTPORT_7,255);} else {analogWrite(OUTPORT_7,0);}
if (OUT_8==1){analogWrite(OUTPORT_8,255);} else {analogWrite(OUTPORT_8,0);}
if (OUT_9==1){analogWrite(OUTPORT_9,255);} else {analogWrite(OUTPORT_9,0);}
}
  
//Функция вывода индикации
void FNC_DISPLAY(){
if (digitalRead(OUTPORT_1)==1){IND3 |= (1 << 3);} else {IND3 &= ~(1 << 3);}
if (digitalRead(OUTPORT_2)==1){IND3 |= (1 << 1);} else {IND3 &= ~(1 << 1);}
if (digitalRead(OUTPORT_3)==1){IND2 |= (1 << 7);} else {IND2 &= ~(1 << 7);}
if (digitalRead(OUTPORT_4)==1){IND2 |= (1 << 5);} else {IND2 &= ~(1 << 5);}
if (digitalRead(OUTPORT_5)==1){IND2 |= (1 << 3);} else {IND2 &= ~(1 << 3);}
if (digitalRead(OUTPORT_6)==1){IND2 |= (1 << 1);} else {IND2 &= ~(1 << 1);}
if (digitalRead(OUTPORT_7)==1){IND1 |= (1 << 7);} else {IND1 &= ~(1 << 7);}
if (digitalRead(OUTPORT_8)==1){IND1 |= (1 << 5);} else {IND1 &= ~(1 << 5);}
if (digitalRead(OUTPORT_9)==1){IND1 |= (1 << 3);} else {IND1 &= ~(1 << 3);}
if (digitalRead(INTPORT_1)==0){IND3 |= (1 << 2);} else {IND3 &= ~(1 << 2);}
if (digitalRead(INTPORT_2)==0){IND3 |= (1 << 0);} else {IND3 &= ~(1 << 0);}
if (digitalRead(INTPORT_3)==0){IND2 |= (1 << 6);} else {IND2 &= ~(1 << 6);}
if (digitalRead(INTPORT_4)==0){IND2 |= (1 << 4);} else {IND2 &= ~(1 << 4);}
if (digitalRead(INTPORT_5)==0){IND2 |= (1 << 2);} else {IND2 &= ~(1 << 2);}
if (digitalRead(INTPORT_6)==0){IND2 |= (1 << 0);} else {IND2 &= ~(1 << 0);}
if (digitalRead(INTPORT_7)==0){IND1 |= (1 << 6);} else {IND1 &= ~(1 << 6);}
if (digitalRead(INTPORT_8)==0){IND1 |= (1 << 4);} else {IND1 &= ~(1 << 4);}
if (digitalRead(INTPORT_9)==0){IND1 |= (1 << 2);} else {IND1 &= ~(1 << 2);}
//if (Rel_1==1){IND1 |= (1 << 1);} else {IND1 &= ~(1 << 1);}
if (digitalRead(RELAY_2)==1){IND1 |= (1 << 0);} else {IND1 &= ~(1 << 0);}
digitalWrite(IND_ST_CP, LOW);
shiftOut(IND_DS, IND_SH_CP, MSBFIRST, IND1);
shiftOut(IND_DS, IND_SH_CP, MSBFIRST, IND2);
shiftOut(IND_DS, IND_SH_CP, MSBFIRST, IND3);
digitalWrite(IND_ST_CP, HIGH);  }

//Функция опроса времени с DS3231
void FNC_DSTIME(){
t = rtc.getTime();
Hour=t.hour;
Min=t.min;}

//Функция опроса температуры с DS3231
void FNC_DSTEMP(){TEMP_S=rtc.getTemp();}

//Функция BUZZER
void FNC_BUZZER(){
digitalWrite(BUZ,HIGH); 
delay(200);
digitalWrite(BUZ,LOW);}
 

 

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Да все компилится))) и даже работает)))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Seltvik пишет:

Ок вот ваш весь скетч:

Во-первых, скетч не наш, а Ваш.

Вы нам сделали одолжение, тем, что его выложили? А не пойти ли Вам на? Это Ваш скетч, и ваша проблема. Хотите её решать - делайте, что говорят, а не делайте нам одолжения.

И, да, для алтернативно одарённых повторяю

ЕвгенийП пишет:

2) скетч должен быть коротким. Никто не будет продираться через 100500 строк Вашего вывода на LCD или там чтения из порта - пишете короткий скетч (не более 10-20 строк) который запускается и демонстрирует проблему.

не создавайте лишних проблем тому, кто хочет Вам помочь и люди к Вам потянутся.

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Ладно ребят хватит этот концерт делать. Вы Евгений сами уже заговорились! То вы пишите нужен полный скетч! и в тоже время не большой! Я пишу что он большой! Вы пишите выложите счетч! Вы уже определитесь сами то! Крч закрываем тему!!!! Не надо мне такой помощи!!! я не делаю никому одолжения!!! На амперке люди как то попроще((( понимают меня. А тут как то не зашло. элементарный вопрос к тем кто делал а не тупо знает теорию! Теория и практика бывают вообще разные! Всем еще раз спасибо и хороших выходных!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

И Вам не хворать!

SLKH
Offline
Зарегистрирован: 17.08.2015

Seltvik пишет:

Да все компилится))) и даже работает)))

тогда к чему эта ветка?

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Поди Евгений вы не настолько знаете всю кухню. Вот скетч просто для теста! И все пашет! 

/*
  Blink

  Turns an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
  it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
  the correct LED pin independent of which board is used.
  If you want to know what pin the on-board LED is connected to on your Arduino
  model, check the Technical Specs of your board at:
  https://www.arduino.cc/en/Main/Products

  modified 8 May 2014
  by Scott Fitzgerald
  modified 2 Sep 2016
  by Arturo Guadalupi
  modified 8 Sep 2016
  by Colby Newman

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/Blink
*/

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(A0, OUTPUT);
    pinMode(A1, OUTPUT);
      pinMode(A2, OUTPUT);
        pinMode(A3, OUTPUT);
          pinMode(A4, OUTPUT);
            pinMode(A5, OUTPUT);
              pinMode(A6, OUTPUT);
                pinMode(A7, OUTPUT);
                  pinMode(A8, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  analogWrite(A0, 255); 
  analogWrite(A1, 255);
  analogWrite(A2, 255);
  analogWrite(A3, 255);
  analogWrite(A4, 255);
  analogWrite(A5, 255);
  analogWrite(A6, 255);
  analogWrite(A7, 255);
  analogWrite(A8, 255);
  delay(1000);                       // wait for a second
  analogWrite(A0, 0); 
  analogWrite(A1, 0);
  analogWrite(A2, 0);
  analogWrite(A3, 0);
  analogWrite(A4, 0);
  analogWrite(A5, 0);
  analogWrite(A6, 0);
  analogWrite(A7, 0);
  analogWrite(A8, 0);
  delay(1000);                       // wait for a second
}

А вы говорите не работает! Все ка краз и наоборот! Это так вам на будущее будет время проверьте вашу теорию)))) 

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Не знаю для чего. Просто хотел чтобы мне прояснили как дела обстоят на практике с опросом пина его состояния. При условии что пины у меня аналоговые и работают на выход через функцию analogWrite. Как узнать их состояние без лишних переменных и лишних сторок. digitalRead не работает почему то.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Seltvik пишет:

......... При условии что пины у меня аналоговые и работают на выход через функцию analogWrite

Вас читать учили в школе?
Вам уже три раза сказали что аналоговые пины настроенные как цифровые
и пины ШИМа которые понимают команду analogWrite -
это РАЗНЫЕ пины.

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Да я это знаю. То что выше я написал для Евгения который писал что типа на меге2560 команда для шима analogWrite не пашет типа с аналоговыми пинами))) вот код такой тоже пашет это работа как с цифровыми:

/*
  Blink

  Turns an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
  it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
  the correct LED pin independent of which board is used.
  If you want to know what pin the on-board LED is connected to on your Arduino
  model, check the Technical Specs of your board at:
  https://www.arduino.cc/en/Main/Products

  modified 8 May 2014
  by Scott Fitzgerald
  modified 2 Sep 2016
  by Arturo Guadalupi
  modified 8 Sep 2016
  by Colby Newman

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/Blink
*/

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(A0, OUTPUT);
    pinMode(A1, OUTPUT);
      pinMode(A2, OUTPUT);
        pinMode(A3, OUTPUT);
          pinMode(A4, OUTPUT);
            pinMode(A5, OUTPUT);
              pinMode(A6, OUTPUT);
                pinMode(A7, OUTPUT);
                  pinMode(A8, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(A0, HIGH); 
  digitalWrite(A1, HIGH); 
    digitalWrite(A2, HIGH); 
      digitalWrite(A3, HIGH); 
        digitalWrite(A4, HIGH); 
          digitalWrite(A5, HIGH); 
            digitalWrite(A6, HIGH); 
              digitalWrite(A7, HIGH); 
                digitalWrite(A8, HIGH); 
  delay(1000);                       // wait for a second
  digitalWrite(A0, LOW); 
  digitalWrite(A1, LOW); 
    digitalWrite(A2, LOW); 
      digitalWrite(A3, LOW); 
        digitalWrite(A4, LOW); 
          digitalWrite(A5, LOW); 
            digitalWrite(A6, LOW); 
              digitalWrite(A7, LOW); 
                digitalWrite(A8, LOW); 
  delay(1000);                       // wait for a second
}

Проблема в том что командой digitalRead нифига не получается снять статус на порте. почему не пойму(

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Всем спасибо вроде разобрался.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Seltvik пишет:

Поди Евгений вы не настолько знаете всю кухню. 

Да, где уж мне :)))

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

ЕвгенийП пишет:

Я же Вам уже сказал - аналоговые пины не работают с analogWrite. НЕ РАБОТАЮТ! analogWrite работает только с цифровыми пинами и то не со всеми. В случае 2560, analogWrite можно использовать ТОЛЬКО с цифрвыми пинами 2-13 и 44-46 и ни с каким другими.  Вам что-то не понятно? 

Seltvik пишет:
просто порассждать в целом.
Это Вы форумом ошиблись. В целом можно порассуждать вот здесь.

 

Ну это же ваши слова! Я их решил проверить на простом скетче блинк и все работает! Так что наверное что то вы упустили

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Да, действительно, что-то я упустил :)))

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Seltvik пишет:
все работает!

analogWrite(x, 255) - это просто digitalWrite(x, HIGH), а analogWrite(x, 0) - это просто digitalWrite(x, LOW).

Попробуй любое другое число (хоть 1 или 254), чтобы именно analogWrite работал.

Работает у него, дурашка.

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Вы видать плохо читаете посты выше? Я написал пояснение к словам Евгения который сказал следующее цитирую:

Я же Вам уже сказал - аналоговые пины не работают с analogWrite. НЕ РАБОТАЮТ! analogWrite работает только с цифровыми пинами и то не со всеми. В случае 2560, analogWrite можно использовать ТОЛЬКО с цифрвыми пинами 2-13 и 44-46 и ни с каким другими.  Вам что-то не понятно? 

То что аналоговыми портами можно управлять функцией analogWrite и функцией digitalWrite это я и так знал. Но мне нужен именно analogWrite ибо спомощью него я регулирую открытие транзистора! Да я знаю что когда с шимом работают тоже применяют эту же функцию. Поэтому я его в скетче прописал и он работает с аналоговыми портами. Точнее это только название "аналоговые" я тоже понимаю. Так что думаю вы просто не так поняли мои слова. Т.е. чтобы вы понимали у меня все пашет как и задумано. Просто вопрос был с опросом портов я его сделал. Проблема была вообще в задержках моих поэтому я не успевал увидить вывод индикации. 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Seltvik пишет:

То что аналоговыми портами можно управлять функцией analogWrite ............ это я и так знал.

По моему это какая-то неизлечимая болезнь косит людей и затуманивает  разум...........

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Вы трудный? вы мое устроиство не видели. Да мне нужен шим и я его применяю но на некоторых пинах цифровых которые заточены на это!!! это я и так знаю и все пашет!!! Речь тут уже пошла не за начальную тему как понял. И вернусь еще раз к началу. Евгений написал что не будет она работать! Она работает просто не как для ШИМА а просто на включение, но работает. Да функция была задумана как управление ШИМ сигналом. Вам на будущее не приводите людям картинки ибо те кто реально не шарят не поймут все равно. Лучше вот так ссылку дайте http://arduino.ru/Reference/AnalogWrite и все))) А изначально речь тут шла не за это. Просто приципились к тому что я пинами управляю этой функцией и сказали что типа не работает нет она работает просто не как ШИМ и все тут. Всего Вам хорошего!!! 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Seltvik,

тебе умный человек написал, что analogWrite на эти пины не работает. Но analogWrite устроен так, что  когда параметры 255 или 0 - он просто вызывает digitalWrite. Т.е. в твоём примере работает digitalWrite. Самый обыкновенный digitalWrite.

И какой ты бред несёшь о том, что тебе нужен именно analogWrite я не знаю. В твоём примере он из себя digitalWrite вызывает. Точно также как ты бы вызвал его сам.

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

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Ну каждый вмеру умен! вы то точно боги топиков_)))) Надо было просто сказать что в платформе Arduino IDE analogWrite вызывает функцию digitalWrite. Этог оя не знал. Да я изначально просто так сделал такие фукнции из за того что просто начал я с шим пинов и для аналоговых сделал как то тоже так же. Тупость моя да, но речь то про другое. Евгений просто сказал вообщем если прочтете его цитату то там говорится в общем. Так что вы просто все тут любите не посуществу. На амперке да мне по человечески сразу так и так проверь то и то. Тут нет надо людям скетч весь, и в тоже время не весь и т.д. и то  исе и вообще ты неучь)))) Ну эт окак посмотреть я не топ умник по ARduino IDE, зато в других областях вроде не тупой))) Так что хорошего вам вечера! Спасибо что уделили свое бесценное время)

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Писец упоротый :) Ему говорят - вот эта машина предназначена, чтобы копать траншеи, на трассе общего пользования ей не место. Тело в ответ - ну так колёса есть, хуле ей не ездить по трассе-то?

Знаю таких товарищей - хитрожопые донельзя, всегда пытаются выкрутиться и сохранить лицо.

Гений - прочитай описание к analogWrite - ты даже сылочку приводил. И осознай, что эта функция предназначена для ШИМ, поэтому своё предназначение она на аналоговых портах не выполняет, т.е. - не работает. Что и пытался сказать тебе ЕвгенийП.

А то, что для название функции тупое (уж лучше бы назвали pwmWrite), и тот факт, что создатели Wiring озаботились, чтобы она хоть что-то делала на любом пине, если обезьяна, написавшая скетч для своего проЭкта, не озаботилась чтением документации - не оправдывает идиотизма ситуации,  в которую ты сам себя загнал.

Продолжай виться ужом, недоразумение.

З.Ы. Будешь борзеть тут - в следующий раз на хер пошлю. И не только я.

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Мда... Даже не знаю как называть людей которые не могут пройти мима и хотят что то написать тут умное. кидать лишний раз камнем или еще чем потяжелее))) Просто без комментариев ребят. Вы тут ппц конечно. Не часто тут сижу но как то было раньше проще. Просто если вы все внимаетльно прочтете, вы поймете никто и не говорил о том, что я правильно делаю. это да я же с этим и не спорил(((( Просто я не понял слов Евгения и все он имел ввиду прямое назначения функции а я иммел ввиду то как я думал что и та и та будет давать логическую единицу как бы на порт. Но Вам все насрать! Я же написал что я понял. И да я профан отчасти в программирвоании. Мой косяк!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DIYMan, да ладно Вам, ну всё ж понятно. Человек - крутой спец, всех придурков и недоумков урыл и ткнул носом, ну и хрен с ним.

После того, как один тут доказывал, что можно и нужно использовать пин Reset 85-ой тиньки как ADC, и что мол типа всё работает, а другой - что можно арифметические действия в дефайне писать без скобок (и при том оба говорили, что оппоненты просто заучили догмы, без понимания, а мы мол всё понимаем и потому делаем как хотим, и у нас работает), меня уже ничего не удивляет, и желания с кем-то спорить и кого-то вразумлять нет. Ну, появился ещё один упоротый недоумок, у которого всё работает и чего? Мало ли их тут околачивалось? Ну, нравится человеку использовать analogWrite с крайними значениями вместо digital- и флаг ему в руки, пусть использует.

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Евгений вы вот я туповат! в программировании. Но даже я понимаю что такую подачу надо поискать как у Вас. Вы раздули тут ужас что. Я уже извинился там выше  и все равно одн ои тоже. ДА я вам показал ответ на вашу фразу что не работает функция, но это ведб не так! Она работает просто как другая и все. И меня это удивило. Почему она пашет вообще. Но тут человек мне объяснил что так и так что так было задумано. Что есть такой косяк у разработчиков и в этом мой промах. Я сразу ее написал она работала и я даже не вник сразу в то что это линее и лучше и нужн осдедать по другому. Так что не злитесь на меня=))) Да мы такие туповатые переодичсески тут появляемся))0 Так что еще раз всем спасибо и извините!!!!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Да, ради Бога, никто на Вас не злится, с чего Вы Вы взяли? Мне вообще как-то без разницы, тупой Вы или острый - мне то что? Ради Бога. Живите как хотите.

bwn
Offline
Зарегистрирован: 25.08.2014

Гарик, это капец!!! ((с)Заповедник).

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

bwn пишет:

Гарик, это капец!!! ((с)Заповедник).

Ничо-ничо, у ТС всё работает!

cygb9i
Offline
Зарегистрирован: 18.03.2019

У меня такой вопрос, как у человека никогда ранее не использовавшего Ардуино, но разбирающегося в контроллерах, ибо имел дело с ними через родную среду разработки: Вот откуда Вы взяли что пин 14 - это реальный вывод А0 микроконтроллера ? Есть какая то таблица соответствия ? Где ее можно посмотреть ?

nik182
Offline
Зарегистрирован: 04.05.2015

Может быть просто почитать информацию на сайте об аналоговых и цифровых входах выходах?

http://arduino.ru/Tutorial/AnalogInputPins