Вопрос по лог.операторам || почему не работает ИЛИ ?

Baby
Offline
Зарегистрирован: 08.02.2018

Здравствуйте братья!

Суть: диод должен включатся по кнопке, а отключатся по кнопки ИЛИ по данным с датчика. В отдельности все осуществимо, соблюсти ИЛИ не получается...ткните мордой где окарался, пожалуйста!

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
int flag=0;
int glaf=0;
int ledPin = 8;
Adafruit_BMP280 bme; // I2C
 

void setup()    {   
  pinMode(8, OUTPUT);
  Serial.begin(9600);
  Serial.println(F("BMP280 test"));
  
  if (!bme.begin()) 
  {  
    Serial.println("Could not find a valid BMP280 sensor, check wiring!");
    while (1);
  }
      
               
} 

void loop() 

 {    if(digitalRead(9)==HIGH&&flag==0)    
     
       {    
       digitalWrite(ledPin,!digitalRead(ledPin)); 
       flag=1; 
       } 
        
     if((bme.readAltitude(1013.25)>54)&&(flag==1)||((digitalRead(9)==LOW)&&(flag==1)))
       
       { 
       flag=0; 
       } 
     
   

    Serial.print("Approx altitude = ");
    Serial.print(bme.readAltitude(1013.25)); 
    Serial.println();
    
 } 

PS: А как указать условия, что данные с датчика постоянны? Типо: if(bme.readAltitude()==const) ? =)

PPS: Спасибо за отклик! Если оскорбил Ваш взор своим кодом - извиняйте, чукча только учится.

5N62V
Offline
Зарегистрирован: 25.02.2016

а кнопку надо еще раз нажать, или отпустить?

b707
Offline
Зарегистрирован: 26.05.2017

Baby пишет:

Здравствуйте братья!

Суть: диод должен включатся по кнопке, а отключатся по кнопки ИЛИ по данным с датчика. В отдельности все осуществимо, соблюсти ИЛИ не получается...ткните мордой где

ну как где - посмотрите свой код У вас диод включается и выключается только по кнопке. А по датчику вы НЕ ВЫКЛЮЧАЕТЕ диод, а только меняете flag на ноль. Этого недостаточно.

И не надо гнать на "ИЛИ" - оно работает :)

Baby
Offline
Зарегистрирован: 08.02.2018

нажать.

Baby
Offline
Зарегистрирован: 08.02.2018

не отуплю, никак. можно пример?

b707
Offline
Зарегистрирован: 26.05.2017

Baby пишет:

не отуплю, никак. можно пример?

пример чего? Скажите - вы этот код сами писали или в инете нашли?

Baby
Offline
Зарегистрирован: 08.02.2018

Если вот так:
 

if((bme.readAltitude(1013.25)>54)&&(flag==1))
       
       { 
       flag=0;}

то по датчику отключает...меня бы тыкнуть всетаки) прям носом :D

 

Baby
Offline
Зарегистрирован: 08.02.2018

Скрещенный из двух прмиеров. Пример отключения диода с оператором ||

5N62V
Offline
Зарегистрирован: 25.02.2016

У Вас переключение состояния диода в строке 30. Происходит когда флаг = 0 и нажата кнопка.    От датчика может измениться только флаг, но чтобы погас/загорелся диод все равно надо нажать кнопку. 

b707
Offline
Зарегистрирован: 26.05.2017

Baby пишет:

Если вот так:
 

if((bme.readAltitude(1013.25)>54)&&(flag==1))
       
       { 
       flag=0;}

то по датчику отключает.

 

так чего вас не устраивает?

Вы обьясните толком - как должно работать. И что не работает.

5N62V
Offline
Зарегистрирован: 25.02.2016

Baby пишет:

Если вот так:
 

if((bme.readAltitude(1013.25)>54)&&(flag==1))
       
       { 
       flag=0;}

то по датчику отключает...

 

Та ладно! 

Baby
Offline
Зарегистрирован: 08.02.2018

1.Нажимаем кнопку(сенсор емкостный) загорается диод. Нажимаем кнопку диод гаснет.

или(и то и другое должно быть, т.е диод отключается 2-мя способами.)

2.Нажимаем кнопку(сенсор емкостный) загорается диод. Поднимаемся выше 54м. диод гаснет.

b707
Offline
Зарегистрирован: 26.05.2017

Baby пишет:

1.Нажимаем кнопку(сенсор емкостный) загорается диод. Нажимаем кнопку диод гаснет.

или(и то и другое должно быть, т.е диод отключается 2-мя способами.)

2.Нажимаем кнопку(сенсор емкостный) загорается диод. Поднимаемся выше 54м. диод гаснет.

Милое дитя (baby) - ты мысли вообще не умеешь выражать?  В тексте выше - к чему относится "или"?

Открою тебе секрет - потому у тебя в программе ИЛИ и не работает. что ты даже по-русски выразить нужный алгоритм не можешь.

5N62V
Offline
Зарегистрирован: 25.02.2016

Baby пишет:

2.Нажимаем кнопку(сенсор емкостный) загорается диод. Поднимаемся выше 54м. диод гаснет.

у Вас пункт 2 работать не будет, так в условии смены состояния диода жирным по толстому прописано условие нажатия кнопки:

if(digitalRead(9)==HIGH&&flag==0)   
28      
29        {   
30        digitalWrite(ledPin,!digitalRead(ledPin));
31        flag=1;
32        }

 

Baby
Offline
Зарегистрирован: 08.02.2018

Может я не русский. Кроме как оскорблений ничего не сказали. Нехороший Вы человек - редиска.

kalapanga
Offline
Зарегистрирован: 23.10.2016
void loop()
{ 
  if (flag)
  {
    if ((bme.readAltitude(1013.25) > 54) || (digitalRead(9) == HIGH))
    {
      digitalWrite(ledPin, LOW);
      flag = 0;
    }
  } 
  else
  {
    if (digitalRead(9) == HIGH)
    {
      digitalWrite(ledPin, HIGH);
      flag = 1;
    }  
  }
}

Предполагается, что нажатая кнопка это HIGH на входе. Можно и в 13 строке датчик проверять. Типа светодиод выключен, нажимаете кнопку, а по показаниям датчика включаться и не надо.

 

Baby
Offline
Зарегистрирован: 08.02.2018

Это строка из примера и я её не понял толком. Вроде как она(строка) обеспечивает 1 действие с каждым нажатием. Как добавить условие на отключение датчиком? 
 

5N62V
Offline
Зарегистрирован: 25.02.2016

Baby пишет:

Может я не русский. Кроме как оскорблений ничего не сказали. Нехороший Вы человек - редиска.

Это у Вас от того. что  Вы новенький на форуме. ;) 

Baby
Offline
Зарегистрирован: 08.02.2018

Я б сказал это взгляд с другой стороны. Работает спасибо! Правда "дребезжание" (вроде это так называется) высокое-диод через раз включается, при удерживании кнопки диод мерцает...

Baby
Offline
Зарегистрирован: 08.02.2018

Да не только на форуме...в программирование..химик по фото в паспорте)

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

Вы изначально неправильно поставили вопрос:

Baby пишет:

почему не работает ИЛИ ?

Нипочему - она работает! ИЛИ работает! Только вот как именно она работает Вы

Baby пишет:

не понял толком

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

Вам необходимо понять, что правильный вопрос у Вас должен быть не "почему не работает ИЛИ?" а "почему не работают мои мозги?". Вот когда до Вас это дойдёт, когда Вы поставите такой вопрос и ответите на него, тогда ИЛИ (и много чего другого) у Вас волшебным образом заработает.

Удачи!

Baby
Offline
Зарегистрирован: 08.02.2018

И Вам здоровья, добрый молодец.

Baby
Offline
Зарегистрирован: 08.02.2018

Спасибо еще раз, добавил delay. Стало корректнее, но все равно не идеально. Есть какие то еще способы хитрые, чтоб от "дребезга" избавиться?

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

Baby пишет:

Есть какие то еще способы хитрые, чтоб от "дребезга" избавиться?

Очень подробное и грамотное руководство по борьбе с дребезгом.

А обиделись Вы на меня зря. Обижайтесь или нет, а пока не сделаете о чём я говорил, всё равно ничего не заработает.

Baby
Offline
Зарегистрирован: 08.02.2018

Думаете человек без *желания думать* способен читать на иностранном языке? Человек ведь даже родной язык плохо знает. Врядли Вам подобные смогут обидеть мне подобных. Спасибо за руководство.

b707
Offline
Зарегистрирован: 26.05.2017

Baby - ВАЖНО! - когда отвечаете на чье-то сообщение, либо цитируйте 1-2 строчки. либо просто пишите ник адресата  - иначе непонятно, какой ответ на какой вопрос.

Теперь по делу - без всякого глума - в программировании очень важно уметь четко и конкретно описать алгоритм работы программы в виде ясных и однозначных последовательных пунктов. У вас с этим полный швах. Без этого вы никогда не будете писать хорошие программы.

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

Удачи.

И не расстраивайтесь - химик это не приговор, химики тоже могут программировать - по себе знаю, Менделавку заканчивал :)

fogary
Offline
Зарегистрирован: 05.03.2016

Baby пишет:

1.Нажимаем кнопку(сенсор емкостный) загорается диод. Нажимаем кнопку диод гаснет.

или(и то и другое должно быть, т.е диод отключается 2-мя способами.)

2.Нажимаем кнопку(сенсор емкостный) загорается диод. Поднимаемся выше 54м. диод гаснет.

Кнопка одна?

void loop(){
  if (digitalRead(9) == HIGH){
    flag = !flag;
  }

  if (bme.readAltitude(1013.25) > 54){
      flag = LOW;
  }

  digitalWrite(ledPin, flag);
}

 

Baby
Offline
Зарегистрирован: 08.02.2018

b707 пишет:

Baby - ВАЖНО! - когда отвечаете на чье-то сообщение, либо цитируйте 1-2 строчки. либо просто пишите ник адресата  - иначе непонятно, какой ответ на какой вопрос.

Теперь по делу - без всякого глума - в программировании очень важно уметь четко и конкретно описать алгоритм работы программы в виде ясных и однозначных последовательных пунктов. У вас с этим полный швах. Без этого вы никогда не будете писать хорошие программы.

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

Удачи.

И не расстраивайтесь - химик это не приговор, химики тоже могут программировать - по себе знаю, Менделавку заканчивал :)

Спасибо, буду знать. Старался ясно и кратко описать. 
Еще раз: При нажатии сенсора загорается диод, а тухнет при изменение давления(высоты) или при нажатии кнопки. Я не знаю как еще Вам сказать....(И́ли — слово русского языка, союз, выражающий альтернативу.) Т.Е. в диод отключается разными, альтернативными способами...

И не подумаю.

Baby
Offline
Зарегистрирован: 08.02.2018

fogary пишет:

Baby пишет:

1.Нажимаем кнопку(сенсор емкостный) загорается диод. Нажимаем кнопку диод гаснет.

или(и то и другое должно быть, т.е диод отключается 2-мя способами.)

2.Нажимаем кнопку(сенсор емкостный) загорается диод. Поднимаемся выше 54м. диод гаснет.

Кнопка одна?

void loop(){
  if (digitalRead(9) == HIGH){
    flag = !flag;
  }

  if (bme.readAltitude(1013.25) > 54){
      flag = LOW;
  }

  digitalWrite(ledPin, flag);
}

 

Спасибо, уже решен вопрос выше. 

kalapanga
Offline
Зарегистрирован: 23.10.2016

Baby пишет:

Спасибо еще раз, добавил delay. Стало корректнее, но все равно не идеально. Есть какие то еще способы хитрые, чтоб от "дребезга" избавиться?

А почитать форум, минимум темы, прикрепленные в начале раздела, не судьба? Ну конечно, с 2011 года это ни разу ни кем не обсуждалось!