Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2019, 17:19   #1
123Василий
Пользователь
 
Регистрация: 21.01.2019
Сообщений: 19
По умолчанию Работа с Aduino. Присвоение переменной значение с датчика

Доброго времени суток.
Надеюсь, здесь кто-нибудь знаком с платфорой Arduino.
Я наткнулся на такую проблему:
мне надо присвоить одной переменной (t) лишь первое значение, которые выводит датчик, то есть у меня датчик температуры, показания идут потоком и мне надо взять только самое первое
Код:
#include <dht11.h>
dht11 DHT;
#define DHT11_PIN 4
int a, t, b;
void setup(){
  Serial.begin(9600);
  Serial.println("DHT TEST PROGRAM ");
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHT11LIB_VERSION);
  Serial.println();
  Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
  pinMode (2, OUTPUT); 
}
 
void loop(){
  int chk;
  Serial.print("DHT11, \t");
  chk = DHT.read(DHT11_PIN);    // READ DATA
  switch (chk){
    case DHTLIB_OK:  
                Serial.print("OK,\t"); 
                break;
    case DHTLIB_ERROR_CHECKSUM: 
                Serial.print("Checksum error,\t"); 
                break;
    case DHTLIB_ERROR_TIMEOUT: 
                Serial.print("Time out error,\t"); 
                break;
    default: 
                Serial.print("Unknown error,\t"); 
                break;
  }
  
  Serial.print(DHT.humidity,1);
  Serial.print(",\t");
  Serial.println(DHT.temperature,1);
  delay(1000);
  
 
 
 
  a=DHT.temperature;
  b=0;
  if (a!=b)  {
  t=a;
  b=a;
  }
Код до присвоения переменной "а" значение температуры вроде бы правильный, в любом случае, он функционирует.
Но переменная t присваивает не только первое значение, ее значения, как бы идут тоже потоком.
Надеюсь, понятно объяснил
Буду крайне благодарен за помощь
123Василий вне форума Ответить с цитированием
Старый 23.05.2019, 17:22   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Заведите флаг присваивали или нет и используйте.
p51x вне форума Ответить с цитированием
Старый 23.05.2019, 17:26   #3
123Василий
Пользователь
 
Регистрация: 21.01.2019
Сообщений: 19
По умолчанию

Тут я не совсем знаю как это сделать
123Василий вне форума Ответить с цитированием
Старый 23.05.2019, 17:28   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Где тут? Это обычный С код... Заводите переменную false, проверяете если false - присваиваете и устанавливаете в true.
p51x вне форума Ответить с цитированием
Старый 23.05.2019, 17:37   #5
123Василий
Пользователь
 
Регистрация: 21.01.2019
Сообщений: 19
По умолчанию

Если я правильно понял, то код должен выглядеть вот так?
Код:
 a=false;
 b=DHT.temperature;
  if (a=false)  {
  t=b;
  a=true;
 }
Serial.print(t);
Только переменная выводит 0

Последний раз редактировалось 123Василий; 23.05.2019 в 17:41.
123Василий вне форума Ответить с цитированием
Старый 23.05.2019, 17:41   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Нет. Не так.

Код:
a=false;
Это же в цикле будет выполняться. Ничего не изменится.

Код:
if (a=false)  {
= и == - разные операторы
p51x вне форума Ответить с цитированием
Старый 23.05.2019, 18:03   #7
123Василий
Пользователь
 
Регистрация: 21.01.2019
Сообщений: 19
По умолчанию

Я еще почитал об этом, но все-таки никак не могу понять..
Первое значение (красный квадрат) должно дублироваться ниже (синий), даже при других изменениях (зеленый)
может быть я просто не так объяснил, а может быть и нет
Изображения
Тип файла: png 2.png (6.4 Кб, 95 просмотров)
123Василий вне форума Ответить с цитированием
Старый 23.05.2019, 21:39   #8
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Код:
void setup(){   // это разовая процедура
...
}

void loop(){  // это работает непрерывно в цикле
...
}
Если в setup() некоторой логической переменной присвоить false,
Код:
void setup() {
...
tst = false;
...
}
то в loop() можно проверить эту переменную и сохранить нужное значение один раз:
Код:
void loop() {
...
if (! tst) {
   ...
   tst=true
}
}
Вопрос: "А что потом?". Как получить следующее первое значение через некоторое время?
Нужна будет перезагрузка или вызов прерывания, например, по нажатию кнопки. В процедуре обработки прерывания можно восстановить значение переменной tst.
Другое решение - это реализовать такую выборку в приёмной части, там, куда посылаются сообщения. В этом случае нажатие определённой клавиши может быть использовано для принятия решения о выборке нового значения ...
Ещё один вариант, организовать обратный канал (к Arduino) и посылать по нему некоторый условный символ или слово, которые, могут быть приняты, проанализированы и исполнены (tst = false).
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 24.05.2019, 08:07   #9
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Зачем лишняя переменная то?

Код:
int FirstTempValue;
void setup(){
// код инициализации
FirstTempValue  = -1;
}
 
void loop(){
 // код обработки
 
  a=DHT.temperature;
if(FirstTempValue<0) FirstTempValue  = a;  
}
И будет там только первое полученное значение. только нафига такое действительно?
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 24.05.2019, 08:53   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
Сообщение от WorldMaster Посмотреть сообщение
Зачем лишняя переменная то?
А температура отрицательной не бывает? Можно, конечно, использовать что-то типа -255, но лучше на это не полагаться.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
присвоение переменной строки файла С++ DaiHajime Помощь студентам 8 28.02.2014 11:03
Присвоение значения ячейки переменной VoSKreS Microsoft Office Excel 1 01.07.2013 18:30
Присвоение переменной gajubas PHP 1 21.04.2010 20:18
присвоение переменной текущей даты KaimNotark Помощь студентам 1 29.01.2010 08:17