как сделать чтобы все работало.

cudla1973
Offline
Зарегистрирован: 21.02.2013

есть три скетча, как склеить их вместе чтобы всё работало, только начинаю, но подобного не нашел

#include <dht11.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

/*-----( Declare objects )-----*/
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27
dht11 DHT11;

/*-----( Declare Constants, Pin Numbers )-----*/
#define DHT11PIN 2
int i =0;
  int valueSensor = LOW;
  void setup()
  {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  pinMode(3,INPUT); 
  Serial.begin(9600); //(Remove all 'Serial' commands if not needed)
  lcd.init(); // initialize the lcd
  lcd.backlight();
  // Print a message to the LCD.
  //lcd.setCursor(0, 1);
  lcd.print("Temp Vlagnost");

}
void loop() 
{


  int chk = DHT11.read(DHT11PIN);

  Serial.print("Read sensor: ");
  switch (chk)
  {
    case 0: Serial.println("OK"); break;
    case -1: Serial.println("Checksum error"); break;
    case -2: Serial.println("Time out error"); break;
    default: Serial.println("Unknown error"); break;
  }
  lcd.setCursor(0, 1);

  lcd.print("C=");
  lcd.print((float)DHT11.temperature, 0);
  Serial.print("Temperature (oC): ");
  Serial.println((float)DHT11.temperature, 2);

  lcd.print(" F=");
  lcd.print(Fahrenheit(DHT11.temperature), 0);
  Serial.print("Temperature (oF): ");
  Serial.println(Fahrenheit(DHT11.temperature), 2);
  
  lcd.print("  H=");
  lcd.print((float)DHT11.humidity, 0);
  lcd.print("%");
  Serial.print("Humidity (%): ");
  Serial.println((float)DHT11.humidity, 2);  

  Serial.print("Temperature (K): ");
  Serial.println(Kelvin(DHT11.temperature), 2);

  Serial.print("Dew Point (oC): ");
  Serial.println(dewPoint(DHT11.temperature, DHT11.humidity));

  Serial.print("Dew PointFast (oC): ");
  Serial.println(dewPointFast(DHT11.temperature, DHT11.humidity));

  delay(2000);
}/* --(end main loop )-- */

/*-----( Declare User-written Functions )-----*/
//
//Celsius to Fahrenheit conversion
double Fahrenheit(double celsius)
{
        return 1.8 * celsius + 32;
}

//Celsius to Kelvin conversion
double Kelvin(double celsius)
{
        return celsius + 273.15;
}

// dewPoint function NOAA
// reference: http://wahiduddin.net/calc/density_algorithms.htm 
double dewPoint(double celsius, double humidity)
{
        double A0= 373.15/(273.15 + celsius);
        double SUM = -7.90298 * (A0-1);
        SUM += 5.02808 * log10(A0);
        SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
        SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
        SUM += log10(1013.246);
        double VP = pow(10, SUM-3) * humidity;
        double T = log(VP/0.61078);   // temp var
        return (241.88 * T) / (17.558-T);
}

// delta max = 0.6544 wrt dewPoint()
// 5x faster than dewPoint()
// reference: http://en.wikipedia.org/wiki/Dew_point
double dewPointFast(double celsius, double humidity)
{
        double a = 17.271;
        double b = 237.7;
        double temp = (a * celsius) / (b + celsius) + log(humidity/100);
        double Td = (b * temp) / (a - temp);
        return Td;



  int valueSensor = digitalRead(3);
  if (valueSensor==HIGH){
    Serial.println(i);
    digitalWrite(13, HIGH);
    i=i+1;
  }else{
    digitalWrite(13, LOW);
    i = 0;
  }
  delay(1000);  
}

 

maksim
Offline
Зарегистрирован: 12.02.2012

Мы за вас рады что у вас 3 скейтча, только вот нам видно только один. Понятие "что бы все работало" ну ооочень растяжимое. И здесь в разделе Программирование есть практически все для того "что бы все работало".

cudla1973
Offline
Зарегистрирован: 21.02.2013

может я не правильно выразился но каким образом разделять команды в скетче чтоб всё работало ,

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

toc
Offline
Зарегистрирован: 09.02.2013

cudla1973, http://button.dekel.ru/ (шутка) :)

cudla1973
Offline
Зарегистрирован: 21.02.2013

toc пишет:

cudla1973, http://button.dekel.ru/ (шутка) :)

Какие вы все добрые знающие ,я же не прошу исправить код подскажите что использовать.

maksim
Offline
Зарегистрирован: 12.02.2012

Вы понимаете, что никому не ясно что вы хотите, какой еще датчик движения... к сожалению, с таким подходом вам только экстрасенсы с ТНТ могут помочь. Начните с мигания светодиодом просмотрите все ссылки из Программирование и т.д. и т.п. может тогда у вас получится сформулировать вопрос.

Вот попробуйте сами ответить на вопрос, который вы пытаетесь задать - "У меня не едет машина, как сделать что бы ехала?" Какой по вашему должен быть ответ?

maksim
Offline
Зарегистрирован: 12.02.2012

Не, надо кнопку что бы все заработало, а не что бы все хорошо.

cudla1973
Offline
Зарегистрирован: 21.02.2013

а вот так ,есть программа работает и есть другая программа которая тоже работает как совместить их в один код или срастить 

где про это почитать ?

renoshnik
Offline
Зарегистрирован: 11.04.2013

cudla1973 пишет:

а вот так ,есть программа работает и есть другая программа которая тоже работает как совместить их в один код или срастить 

где про это почитать ?

 

Здесь - http://arduino.ru/Reference

maksim
Offline
Зарегистрирован: 12.02.2012

Я вам еще раз повторяю - мы за вас рады что у вас есть две рабочие программы. Но во-первых нам так и не ясно в чем ваша проблема... возьмите и соедините. А во-вторых нам ваших программ не видно.

leshak
Offline
Зарегистрирован: 29.09.2011

maksim пишет:

Я вам еще раз повторяю - мы за вас рады что у вас есть две рабочие программы. Но во-первых нам так и не ясно в чем ваша проблема... возьмите и соедините. А во-вторых нам ваших программ не видно.

2maksim: У меня закралось подозрение что вас просто тролят. Уж как-то слишком анекдотично "хочу что-бы работало", да еще повторами.

paf
Offline
Зарегистрирован: 25.01.2013

Это аксиома - азы - соглашение о терминах.  Для того, что бы объяснить свое затруднение специалистам необходимо стать самому специалистом. Что значит стать самому специалистом. Это значит необходимо изучить суть специальности. Или иметь в самом себе ясное представление о цели, средстве достижения и способах. 

Допустим, приезжает в автосервис чел и заявляет: У меня есть три тачки. У одной работает печка, у другой исправна левая дверца, а у третей заводится двигатель, как собрать это в кучу и вжик - поехал? Что ему скажут в сервисе? Попробуйте синтезировать несколько ответов, это не сложно! :) 

Когда смотришь как Джереми Блюм вытворяет "всякие крутые штучки" моментально приходит "озарение - блин, да это же как ясный день! Чего тут трудного?!"  И верно, ничего. И повторить тоже не трудно. Только вот как соединить? Допустим, звоним Блюму. "Хай, бой! Май трабл ту скетч жойн тугеда". Блюм, парень занятой... И он пошлет... изучать азы, соглашения о терминах... а может назвать свой тариф. Это будет спец серия на DVD. :)  

Но! Я знаю как без этого! Причем, быстро, профессионально! Есть раздел форума - Ищу исполнителя.  Создаем тему. Описываем красочно желания. В конце спрашиваем - Скока? Ответ буду ждать на - указать где.  Это самый короткий и продуктивный вариант. 

Иначе... иначе см. первый абзац. 

 

paf
Offline
Зарегистрирован: 25.01.2013

toc пишет:

cudla1973, http://button.dekel.ru/ (шутка) :)

:0 :0!!!

Я хочу ЭТО в свой телефон!   Скока?!   

cudla1973
Offline
Зарегистрирован: 21.02.2013

Собралась стайка ........ и хохочут, сами то разбираетесь ? или сидите здесь да новичков хаите, из всей этой галимотьи  один одекватный ответ хотел спасибо сказать не знаю как . а в коде все понятно что там подключено только вторая программа не работает. Отвечать не надо, прикалывайтесь в другом месте.

 

step962
Offline
Зарегистрирован: 23.05.2011

cudla1973 пишет:

Собралась стайка ........ и хохочут,

Да, это наша поляна. И мы здесь иногда чудим - когда повод появляется

Цитата:
сами то разбираетесь ? или сидите здесь да новичков хаите, из всей этой галимотьи  один одекватный ответ хотел спасибо сказать не знаю как .

Задайте себе труд почитать немного посты этого форума и вы увидите, что не только хаянием здесь занимаются. Когда со стороны новичков, кроме пускания пузырей обиды, имеется что-то конструктивное, то и ответы, как правило, тоже конструктивные. 

Цитата:
а в коде все понятно что там подключено только вторая программа не работает.

Вам тут уже в ...надцатый раз говорят, что в понятие "не работает" можно вложить очень разные смыслы. Пока вы сами не поймете, чего вы хотите и не скажете об этом внятно-конкретно, в ответ будете получать заряды идЫётских шуточек. Ну что уж тут поделать - ну козлы мы, козлы...

Цитата:
Отвечать не надо, прикалывайтесь в другом месте.

Это, вообще-то наша поляна и мы на ней пасемся. Поэтому правильнее было бы с вашей стороны заявить:

"получу ответ в другом месте".

 

А по существу.

У вас есть три программы. В этих трех программах выполняемую ими полезную работу можно выделить в отдельные функции. После того, как сделаете это, скопируйте полученные функции в новую программу, в функции loop() которой напишите:

call_function_1();
call_function_2();
call_function_3();

И все - есть 10% уверенности, что заработает.

А не заработает - расскажите о том, что конкретно не работает. Только без пузырей.

Хотя, конечно же заработает. Но не так, как вы ожидали. А как вы ожидали, мы до сих пор и не знаем... 

cudla1973
Offline
Зарегистрирован: 21.02.2013

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

step962
Offline
Зарегистрирован: 23.05.2011

Это может быть и так:

void loop() {
  for (условие) {
// ваш первый скетч
  }
  for (условие) {
// ваш второй скетч
  }
  for (условие) {
// ваш третий скетч
  }
}

или так:

void loop() {
  while (условие1) {
// ваш первый скетч
  }
  while (условие2) {
// ваш второй скетч
  }
  while (условие3) {
// ваш третий скетч
  }
}

наконец, так:

void loop() {
  if(условие1) {
 // ваш первый скетч
 }
  if(условие2) {
// ваш второй скетч
  }
  if(условие3) {
// ваш третий скетч
  }
}

или совсем просто:

void loop() {
  function_1();
  function_2();
  function_3();
}

Это может быть любая комбинация из вышеприведенных вариантов, а также еще тьма-тьмущая разных способов.

Вы опять ведете себя как тот перец из бородатого анекдота:

"Уважаемые товарищи ученые, у меня в подвале стук. Объясните, пожалуйста, причину этого стука"

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

leshak
Offline
Зарегистрирован: 29.09.2011

cudla1973 пишет:

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

Послушайте, вам уже несколько разных человек, на разные лады сказали одно и тоже - вас не понимают. Не понимают что вы хотите. Возможно вам кажется что "вы дали все что нужно" и все видно из вашего стартового поста. Но... это не так. Воспримите как факт - это не понятно людям. Возможно они тупые, возможно наоборот они видят кучу разных путей которые вам не видны и поэтому "для вас все однозначно сказано", может еще что-то  - не важно. Важно что не понятно. А значит уточнение "в пару слов" - тут дело не исправит. А пока не поймут "что вы хотите" - никто вам не поможет. И кроме зубоскальства - ничего не будет. И зубоскальство не по поводу "вы не знаете как напрограмить", а по поводу "неспособности выразить мысль".

Поробуйте зайти с другого конца. Предствте что у вас вообще нет никаких трех скетчей (которые вы упорно не показываете и ТУПО игнорируете указание на это). Попробуйте просто описать какое устройство вы хотите собрать и что оно должно делать.

Можете попробовать объяснить соседу и попросить его написать "как он понял что вы хотели". Может стиль другого/постороннего человека будет более понятным....

А пока, ваши посты больше похоже на троллинг. На то что вы сознательно наводите "тень на плетень". На то что вам никакие скетчи вообще не нужны, и вы просто развлекаетесь тем  как все пытаются угадать что вам нужно. Вообщем "включили дурачка".

cudla1973
Offline
Зарегистрирован: 21.02.2013
void loop() {
  if(при достижении температуры 25 с  срабатывает светодиод пин13 если меньше гаснет) {
 // ваш первый скетч
 }
  if(срабатывает светодиод на пин12 если есть движение если нет гаснет) {
// ваш второй скетч
  }
  if(пока нет но будет датчик температуры просто отображать температуру улицы) {
// ваш третий скетч
  }
}

так вот первый скетч работает и всё на второй скетч ардуино наплевать потому что я неправильно делаю я это уже понял.

Snubist
Offline
Зарегистрирован: 18.02.2013

наверно вестаки так

void loop() {
  if(если температура >= 25 с) 
 {
  //срабатывает светодиод пин13 
 }
 else
 {
 //если меньше гаснет
 }
  if(если есть движение) 
 {
  //срабатывает светодиод на пин12
  }
 else
 {
 //если нет гаснет

 }
  if(если получили данные с  датчика температуры) 
 {
  //отобразили температуру улицы
 }

И  самом первом посте я не увидел вызова функции движения.

 

cudla1973
Offline
Зарегистрирован: 21.02.2013

Так ещё не пробовал ,попробую .Вот я и хотел спросить как ардуино понимает что процес один закончен начинается второй или оно по очереди выполняет в зависимости от написания 1 потом 2 потом 3 потом опять все сначало и так до бесконечности.

Snubist
Offline
Зарегистрирован: 18.02.2013

Да поочереди.

Для вызова внеочередных процессов есть прерывания.

msng
Offline
Зарегистрирован: 07.06.2012

cudla1973 пишет:

оно по очереди выполняет в зависимости от написания 1 потом 2 потом 3 потом опять все сначало и так до бесконечности.

 

именно так

PS конечно не до бесконечности.... (солнце когда нибудь погаснет)))) шутка

cudla1973
Offline
Зарегистрирован: 21.02.2013

Snubist пишет:

наверно вестаки так

void loop() {
  if(если температура >= 25 с) 
 {
  //срабатывает светодиод пин13 
 }
 else
 {
 //если меньше гаснет
 }
  if(если есть движение) 
 {
  //срабатывает светодиод на пин12
  }
 else
 {
 //если нет гаснет

 }
  if(если получили данные с  датчика температуры) 
 {
  //отобразили температуру улицы
 }

И  самом первом посте я не увидел вызова функции движения.

 

вот получилось 

#include <dht11.h>

dht11 DHT11;

#define DHT11PIN 2
int ledPin = 12;
int i =0;
  int valueSensor = LOW;


void setup()  
{
  Serial.begin(9600);
  Serial.println("DHT11 TEST PROGRAM ");
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHT11LIB_VERSION);
  Serial.println();
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  pinMode(3,INPUT); 
}/*--(end setup )---*/

void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{
  Serial.println("\n");

  int chk = DHT11.read(DHT11PIN);

  Serial.print("Read sensor: ");
  switch (chk)
  {
    case 0: Serial.println("OK"); break;
    case -1: Serial.println("Checksum error"); break;
    case -2: Serial.println("Time out error"); break;
    default: Serial.println("Unknown error"); break;
  }

  Serial.print("Humidity (%): ");
  Serial.println((float)DHT11.humidity, 2);

  Serial.print("Temperature (oC): ");
  Serial.println((float)DHT11.temperature, 2);

 

 

  Serial.print("Dew PointFast (oC): ");


  delay(500);



if (DHT11.temperature > 29)
	{
	  digitalWrite(ledPin,HIGH);
	}
	else
	{
	  digitalWrite(ledPin,LOW);
	
  
 
 delay(500);



}

 {

  int valueSensor = digitalRead(3);
  if (valueSensor==HIGH){
    Serial.println(i);
    digitalWrite(13, HIGH);
    i=i+1;
  }else{
    digitalWrite(13, LOW);
    i = 0;
  }
  delay(1000);  

}
}
 
теперь хочу  датчик ds18b20 с ним попробовать в место dht11, но пока не получается именно не включается светодиод на температуре выше 25с

 

 

 

Snubist
Offline
Зарегистрирован: 18.02.2013

 

а ты назначил ledPin на выход?

Я вижу что он 12

а на вывод только пин 13

pinMode(13, OUTPUT);

 

на будущее что бы не путатся, определи пины 

ledPinTemperature=12;

и назначай

pinMode(ledPinTemperature, OUTPUT);

cudla1973
Offline
Зарегистрирован: 21.02.2013

я их местами поменял 13 же встроенный а 12 нет вот и когда отлаживал датчик движения я и назначил 13

на датчик движения чтоб видно было рботает или нет ,диоды это для отладки вместо них будет реле точнее блок реле на 12 вольт .

теперь вопрос такой про датчик ds18d20 что здесь нужно писать 

if (DHT11.temperature > 25)
	{
	  digitalWrite(ledPin,HIGH);
	}
	else
	{
	  digitalWrite(ledPin,LOW);
	
  
 
 delay(1000);

вместо dht11, 

или опять вопрос не понятен?

msng
Offline
Зарегистрирован: 07.06.2012

просто так поменять не получится, все переменные и библиотеку от dht надо убирать и добавлять чтото прочитав вот эту  статью.

ну или сначало попробывать запустить ds18b20 отдельно, а потом совместить ваши скетчи.

ps а на форуме действительно бывает отсылают в гугль, вроде спрашиваешь простые вещи а тебе "вот пришел новичек, иди гугль кури... ну или в таком духе..." мне тоже не понятны некоторые вещи... постепенно доходит... эмоции тут не помогут... задавайте вопросы по другому... хотя на многие вопросы ответы на форуме уже есть... есть еще форум на амперке, там спросите, возможно там другая манера общения и вам она понравится... удачи

cudla1973
Offline
Зарегистрирован: 21.02.2013

Библиотеку я убрал добавил другую датчик работает все хорошо вот только как заставить его включать светодиод.   а за статью спасибо ,буду разбираться и кажется понял где собака зарыта.Как все соберу до кучи, выложу здесь может кому пригодится для частного дома с паровым отоплением ,конечно с описанием и подключением что куда .

msng
Offline
Зарегистрирован: 07.06.2012

ну у вас появиласть новая переменная которая и показывает температуру с ds1820, вот вы ее и сравнивайте с +25С и зажигайте светодиод...

leshak
Offline
Зарегистрирован: 29.09.2011

cudla1973 пишет:

Так ещё не пробовал ,попробую .Вот я и хотел спросить как ардуино понимает что процес один закончен начинается второй или оно по очереди выполняет в зависимости от написания 1 потом 2 потом 3 потом опять все сначало и так до бесконечности.

У ардуины, в отличие от большого компа, есть всего один процесс/поток исполнения. Никаких многозадачностей, никаких "одновременностей". Скетч - набор инструкций который выполняется последовательно. Только пошаговое выполнение интсрукций. Когда дошли до конца (конца фунции loop()) - опять начиает выполнять ее с начала.

Есть еще, как говорили выше, "прерывания". Это значит по наступлению какой-нибудь события (сработки таймера, нужно уровня на пине и т.п.) - текущие выполнение скетчка останавливает. запоминается состояни. и управление передается в специальную функцию-обработчик прерывания. Но и в этом случае - одновременности нет. Выполняется обработчик - основной скетч стоит. Закончил - все продолжается с того места где прервалось.

Представте себе что вы однорукий повар на кухне. И вам нужно одновременно и хлеб резать и суп мешать. А рука - одна. Значит мы должны либо "порезать хлеб, а потом мешать суп", либо "двинули ножом, крутнули ложку, двинули ножом, крутнули ложку, двинули ножом...". Если мы руку с ножа на ложку переносим быстро - возникает иллюзия одновременности. Если в этот момент зазвенел будильник (сработал таймер), бросаем все и выключаем духову (выполнили функцию обработки прерывания), после чего продолжили "двинули, крутнули".

Так что в 8-битных мироконтроллерах (ардуине) возможно только "псевдо-одновременность". Если у нас есть несколько задач которые нужно "одновременно" - дробим их на маленькие кусочки, и выполняет по кусочку от каждой задачи на каждом проходе loop(). Следя за тем что-бы ни в одном кусочке не застревать надолго (не используем delay(), длинные/бесконечные циклы и т.п.) - иначе "одновременность" разрушится.