Работа с двумя датчиками

sergin
Offline
Зарегистрирован: 26.08.2014

Уважаемые участники форума.

Пришло время и мне начать учиться чему-то новому, и оказалось, что новая тема для меня - Ардуино.

Если у кого есть желание помочь - большое спасибо.

На данный момент делаю обработку двух датчиков: один - ультра, с замером дистанции, и второй - инфра,

с пороговым включением (при срабатывании - на выходе - "0").

По раздельности оба датчика работают как положено в программе. А вот при объединении, выход сходит с ума.

Ткните меня , чего это я не догоняю:

01const int Trig = 8; //ultra
02const int Echo = 9;  //ultra
03const int ledPin = 11; //Led
04const int Infra = 10;  //infra
05 
06void setup ( ) {
07  pinMode(Trig, OUTPUT);
08  pinMode(Echo, INPUT);
09  pinMode(ledPin, OUTPUT);
10  pinMode(Infra, INPUT);
11   
12  Serial.begin (9600);
13}
14 
15unsigned int time_us = 0;
16unsigned int distance_sm = 0;
17 
18void  loop ()
19{
20  digitalWrite(Trig,  HIGH);
21  delay (10);
22  digitalWrite(Trig, LOW);
23  time_us=pulseIn(Echo, HIGH);
24  distance_sm=time_us/58;
25  Serial.println(distance_sm);
26  if (distance_sm<50 || Infra == LOW)
27  {
28    digitalWrite(ledPin, 1);
29  }
30  else
31  {
32 
33  digitalWrite(ledPin, 0);
34  }
35delay (100);
36}
37 
38//end

 

Coolerr
Offline
Зарегистрирован: 30.06.2014

 

1if (distance_sm<50||digitalRead(Infra) == LOW)

нехватает чтения состояния ноги.

sergin
Offline
Зарегистрирован: 26.08.2014

Спасибо.

Заработало. Обнаружил , что ЖК экраны сбрасывают датчик  ультра MC-SR04 на "0" см. (может кому пригодится)

sergin
Offline
Зарегистрирован: 26.08.2014

Пришёл сын, посмотрел на моё творение и всё ...

Тут же мне рассказал, что так начинать учить негоже - надо сразу по-настоящему,

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

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

Насколько верна такая постановка скетча ?:

01#define Trig  8
02#define Echo  9
03#define ledPin  11
04#define Infra  10
05 
06void setup ( ) {
07  pinMode(Trig, OUTPUT);
08  pinMode(Echo, INPUT);
09  pinMode(ledPin, OUTPUT);
10  pinMode(Infra, INPUT);
11   
12  Serial.begin (9600);
13}
14 
15unsigned int time_us = 0;
16unsigned int distance_sm = 0;
17 
18void  loop ()
19{
20  digitalWrite(Trig,  HIGH);
21  delay (10);
22  digitalWrite(Trig, LOW);
23  time_us=pulseIn(Echo, HIGH);
24  distance_sm=time_us/58;
25  Serial.println(distance_sm);
26  if (distance_sm<50 || digitalRead(Infra) == LOW)
27  {
28    digitalWrite(ledPin, 1);
29  }
30  else
31  {
32 
33  digitalWrite(ledPin, 0);
34  }
35delay (100);
36}
37 
38//end

 

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

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

Coolerr
Offline
Зарегистрирован: 30.06.2014

если это весь размер скетча, то я б вообще не заморачивался. pinMode(8,OUTPUT) и досвидос.

faraddin
Offline
Зарегистрирован: 11.08.2013

Что такое #define? Как он работает? В чем отличие от первой версии? Если Ваш сын Вам это объяснил то это плюс, если просто сказал делать так и Вы запомнили но не поняли, тогда однозначно минус.

sergin
Offline
Зарегистрирован: 26.08.2014

faraddin пишет:

Что такое #define? Как он работает? В чем отличие от первой версии? Если Ваш сын Вам это объяснил то это плюс, если просто сказал делать так и Вы запомнили но не поняли, тогда однозначно минус.

То, что он объяснил - прямое обращение к компилятору, без задействования ресурсов программы.

БЫл у меня пробегом на 5 минут, в следующий раз обещал рассказать больше.

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

кодами программ.

faraddin
Offline
Зарегистрирован: 11.08.2013

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

sergin
Offline
Зарегистрирован: 26.08.2014

faraddin пишет:

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

К сожаленью серьёзно заниматься с азов не получится - семья , дети , работа (другая специальность).

На этой же работе нагрузили требованием - знание электроники и начальное (хотя бы) Ардуино.

С электроникой проблем нет , а вот с Ардуино - только-только учусь.

Спасибо всем за помощь. По мере проблем буду обращаться ещё.