Автор Тема: ARDUINO надо или нет  (Прочитано 13573 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #90 : 08 Октября 2017, 23:08:11 »
мой вариант, вообще на работу с тумблерами рассчитан и ничего там не суммируется.
а смысл задавать имульс определенной длительности ? - не будете же вы кнопку спецом держать,так перестраховка получается.
вообще, механический дребезг контактов ни кто не отменял.
есть спецом библиотека debounce , в случае с тумблером не факт что нужно.Почему тумблер? - он механически указывает ,например куда стрелка та же переведена.
а именно для тумблера нужно формирование импульса в случае с соленоидом ( состояние изменилось и осталось до нового перевода, а длительность импульса от него не зависит ) .
int LedPin1 = 9;
int LedPin2 = 10;
int ButPin1 = 2;
int ButPin2 = 3;
int flag = 0;           
int lastTime1 ;
int lastTime2 ;

void setup()
{
  pinMode(LedPin1, OUTPUT);
  pinMode(LedPin2, OUTPUT);   
  lastTime1 = 0;
  lastTime2 = 0;

void loop()
{   
  if(digitalRead(ButPin1) == HIGH && flag == 0)     
    {                                             
      digitalWrite(LedPin1, HIGH);   
      flag = 1;
    }  if ( millis() - lastTime1 >1000 ) {
        digitalWrite(LedPin1,LOW) ; lastTime1=millis();}
   if(digitalRead(ButPin2) == HIGH && flag == 0)     
    {                                             
      digitalWrite(LedPin2, HIGH);   
      flag = 1;
    }  if ( millis() - lastTime2 >1000 ) {
        digitalWrite(LedPin2,LOW) ; lastTime2=millis();}
  if(digitalRead(ButPin1) == LOW && digitalRead(ButPin2) == LOW && flag == 1) { 
      flag = 0;
    }     
}     
DR/DB/FS/MAV

Оффлайн qvan22

  • Постоялец
  • ***
  • Сообщений: 174
  • Репутация: +41/-0
  • Откуда: Минск
  • Имя: Владимир
Re: ARDUINO надо или нет
« Ответ #91 : 09 Октября 2017, 08:06:32 »
Спойлер (кликните для показа/скрытия)



Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #92 : 09 Октября 2017, 10:31:09 »
А смысл, тогда вообще ардуино использовать?
да хотя бы потому что считывать с того же датчика ИК или еще какого-нить - проще.А тумблер + кнопка - это перебор уже,не находите ?)

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

Сами то пробовали свою программу?
пробовал,работает как ни странно.нажатием на одну из кнопок нужный светодиод включается на заданное время ( 1с ).
if ( millis() - lastTime1 >1000 ) - формулу гугл подсказал ,не советуют временные формулы делать с суммированием к текущему времени.
DR/DB/FS/MAV

Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #93 : 09 Октября 2017, 17:39:39 »
Ах... так все таки нужно? Хорошо, чтобы не путаться в понятиях, абстрагируемся от стрелок, семафоров и т.п., будем говорить о соленоидах...
Ставите по тумблеру на соленоид и кнопку на все тумблера, выставляете тумблера в положение, в которое нужно перевести соленоиды и нажимаете кнопку. Все. За одно нажатие перевели все соленоиды.
а потом переведя лишь часть тумблеров в др.положение подаем кнопкой в т.ч. и на те, которым это свовсем не требуется .
в этом варианте непонятно одно - ЗАЧЕМ ИСПОЛЬЗОВАТЬ ТУМБЛЕРЫ ,если есть кнопки или как вы заметили тумблеры без фиксации.
сли нужна обработка именно по фронту или тылу импульса, то делать обработчик именно на это событие, а не сбрасывать флаг по обратному. В вашем варианте, попробуйте нажать и держать первую кнопку и нажать вторую. Что произойдет? Правильно, ничего. Потому что флаг у вас сбросится только при условии, что обе кнопки отпущены. Тут варианта два - используем библиотеку bounсе, которая делает это за нас или пишем свой обработчик
Приведите все виде примеров.Ваш вариант формирования импульса не заработал вообще.никак.
а что будет, если у вас 16 кнопок?
на одну про мини у меня никак не может быть 16 кнопок - или 4 сервы + 4 кнопки/датчика или 2 семафора / 4 датчика ( + кнопки может быть )
в начале loop я бы назначал currentTime=millis()
за это СПС! - по крайней мере понял суть этого действия)
6. готового решения бесплатно вам ни кто не даст. тукнуть - пожалуйста.
Готовое решение никто не просит и любая работа должна быть оплачена.Но вот непонятно тогда зачем или почему Филипп Гатов и иже с ним выкладывают много более сложные истории ,( чем примеры которых нет в библиотеках дуни ) в свободный доступ...
DR/DB/FS/MAV

Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #94 : 09 Октября 2017, 20:56:19 »
void loop(){
  .....
  if (условие перевода семафора){
    digitalWrite(pin, HIGH);
    pinPulseFlag = millis()+500; // текущее время + 500 мс, ну или сколько вам нужна длина импульса
  }
  if(pinPulseFlag>0 && pinPulseFlag<millis()){ //если флаг больше нуля и меньше текущего времени
    digitalWrite(pin, LOW);
    pinPulseFlag=0;
  }
  ......
}
этот пример вставлялся в скетчи которые в итоге вылились в мои 2 вышеприведенных.

DR/DB/FS/MAV

Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #95 : 10 Октября 2017, 01:11:40 »
видео - это всегда прекрасно.
можете вышеизложенное перевести с русско-албанского на язык ардуины,я примерно логику улавливаю но не на столько что бы из этого что-то сваять путное .Все таки у ардуины логика немного отличается от обычной жизненной или применимой в аналоговой электронике.
( в реальной жизни те же currentMillis = millis () и просто millis() -  тождественно равны,у ардуино свой подход к этим моментам ).

покрутив немного соленоид семафора  понял что надолго его не хватит ,буду городить с сервами.
но остался момент для переезда,суть - переход в 0-е состояние с задержкой.(если уровни обоих датчиков меньше определенного уровня - через несколько сек. перейти в соотв. состояние )
реалтизовано вот так - int pin1 = A0; //
int pin2 = A1;
const int ledPin1 = 9;
const int ledPin2 = 10;
int ledState1 = LOW;
int ledState2 = LOW;
int crossState = 0;
int val1 =0;
int val2 = 0;
const int p=100;
unsigned long previousMillis = 0;
unsigned long pinPulseFlag;
unsigned long loopTime; 
const long interval = 600;
const long timer = 5000;
long LastTime = 0;
     
void setup() {
Serial.begin(9600) ;
pinMode(ledPin1,OUTPUT);
pinMode(ledPin2,OUTPUT);
pinMode(pin1,INPUT);
pinMode(pin2,INPUT);
pinPulseFlag = 0;

}
void loop() {
unsigned long currentMillis = millis();
 {
 val1 = analogRead(A0);
 val2 = analogRead(A1);

if ( val1 > p || val2 > p )  { 
                                   
    crossState = 1 ;
   
   
    }                     
 else  {
  if (millis() - LastTime > timer ) { LastTime = millis();     
    crossState = 0; pinPulseFlag=0;}
 }
 }

 
  switch(crossState) {
  case 0:
   Serial.println(crossState);
  ledState1 = LOW ;ledState2 = LOW ; digitalWrite(ledPin1,LOW);
   digitalWrite(ledPin2,LOW);
  break;
     
  case 1:
    Serial.println(crossState);
    if (currentMillis - previousMillis >= interval) {
      previousMillis = currentMillis;
    if (ledState1 == LOW ) {
      ledState1 = HIGH;ledState2 = LOW;
    } else {
      ledState1 = LOW;ledState2 = HIGH;
    }
    digitalWrite(ledPin1, ledState1);digitalWrite(ledPin2, ledState2);
  }
 
  break;
}
}
DR/DB/FS/MAV

Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #96 : 10 Октября 2017, 13:15:02 »
там нет ничего сложного
если то иначе if/else
присвоение знак =
с этим все понятно )
чем это они равны? в первом случае вы присваиваете переменной сurrentMillis значение функции millis(), во втором - вы просто упоминаете функцию
вот тут и непонятна разница между переменной и функцией.или они расходятся в процессе выполнения действия ( лупа )? прямое упоминание функции взято из примеров в сети .
ledState1 = !ledState1;
ledState2 = !ledState2;
в чем приемущество этого варианта ?
я конечно дам, даже не кусок кода, а весь код

спс!,я пробовал сделать с циклом ( со счетом переменной для формирования задержки ) и с  while,но не получилось ( не работало ни то ни то ).
зачем скобка после unsigned long currentMillis = millis(); ?
зачем Serial.println(crossState); в каждом кейсе? не проще один раз перед свич поставить?
  - скобка - остаток попыток заставить работать программу - объеденить действия ))
печать поставил наверняка что бы )
дам вам вариант своего скетча
у вас несколько отличаются условия срабатывания от моих - в моем случае 2 ИК датчика с 2х сторон от переезда,если сработал любой из них ( значение по аналоговому входу выше заданного ) - включается сигнализация переезда.Для выключения сигнализации показание обоих датчиков должны быть ниже заданного в течении определенного времени ( 1-3с ) что бы не было реагирования на межвагоные зазоры.
заодно видео срабатывания ИК пар - ( пришлось зазиповать )
DR/DB/FS/MAV

Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #97 : 11 Октября 2017, 00:03:08 »
так если у вас все работает - в сем проблема тогда?
вы нашли некоторые моменты спорные -  я и спросил. А про ИК датчики - у вас некогда сомнения были -  вот и приложил по факту.
собственно вопрос по моему скетчу был с созданием задержки срабатывания по отрицательному фронту датчика ( скажем так ).
еньше памяти расходуется на хранение переменных, так как boolean занимает всего один бит, тогда как int - 16 бит.
а оно много актуально когда мини про только за одну функцию отвечает ?
Условие сработки от двух датчиков (один вкл, второй выкл) - думайте сами.
с условиями у меня все ОК или около того - условия ,может и топорно, но прописаны так как мне надо
( если делать 2 датчика а не 4 для большей детальности, но сигнализация переездов отключается не моментально после ухода последнего вагона с оного ).

вышеупомянутые false / true - чем лучше HIGH/LOW или  1/0 ?
DR/DB/FS/MAV

Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #98 : 11 Октября 2017, 13:12:00 »
ну у меня сомнения были про те, которые на отражение работают, а вы на прерывание используете.
так они на отражении от лока или вагона срабатывают.Пока я между рельс ставил,сейчас думаю как их замаскировать если как-то рядом с путями ставить.
если состав остановится и датчик в просвете окажется.
датчика 2 и ситуация с остановкой на переезде можно сказать аварийная )
DR/DB/FS/MAV

Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #99 : 12 Октября 2017, 10:49:25 »
какая модель датчика?
RPR220
DR/DB/FS/MAV

Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #100 : 12 Октября 2017, 23:12:41 »
а можно видео?
я же видео приложил,чувствительность регулируется переменной ( в примерах в сети >200 используют ),и думаю можно поиграться с ограничивающим резистором на ик-светодиоде.где-то я выкладывал видео как на путях она срабатывает и семафор переключает.
вы про спидометр писали - какой именно имеется в виду ?

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

ЗЫ если успею - сделаю видео с модуля ( если получится,мыльница та еще )))
DR/DB/FS/MAV

Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #101 : 13 Октября 2017, 11:17:51 »
странно, почему готовые модули на черный так не реагируют 
может там другой модели датчик стоит ? я на эти случайно наткнулся искал что-то более редкое ))) а так на али есть еще какие-то и похожие внешне ( 2 линзы торчат ).

DR/DB/FS/MAV

Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #102 : 13 Октября 2017, 19:25:38 »
с черным цветом все понятно,у нас он не идеальный для полного поглащения ,нужно нечто глобально матовое ) да и частота волн ИК пониже светового спектра.
( тот же кусок черной бумаги от набора Кибри на видео довольно глянцевый ,свет не пропускает но отражает нормально )
DR/DB/FS/MAV

Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #103 : 23 Октября 2017, 19:13:12 »
а вагоны у вас тоже глянцевые?
смотря какое освещение ) идеальное поглощение у черной дыры только )
факт, что работает со всем пс имеющимся в наличии ).

сейчас меня больше занимает как датчик максимально спрятать,пока я между рельс их ставил,думаю попробовать сбоку и замаскировать.
 
на колеса прекрасно срабатывает.
DR/DB/FS/MAV

Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #104 : 23 Октября 2017, 20:01:39 »
а если в кусты или в ландшафт как-то,ракурсом "от зрителя"

а если на колеса сфокусировать ?
ну вот это здорово, потому как мои по черным бочкам срабатывали исключительно на белых декалях.
а вы по какой схеме включали ? ( у меня запитано от +5 ,катод светодиода через 220 Ом на землю,коллектор транзистора к +5,эмиттер через 10Ком на землю,сигнал на дуню с эмиттера снимается ,рабочее значение по аналоговому входу >150 )
DR/DB/FS/MAV