#1 Re: Програмування Arduino » Вроде с таймерами разобрался, но никак не могу реализовать задуманное. » 2017-10-14 13:47:35

Короче , я понял, тут хрен дождешься реальной помощи, в основном все советуют учить язык, напрягать мозги и т.п. GREENу еще раз спасибо за реальную помощь, благодаря его коду я понял работу millis(). Куда пиво отправлять?)

#2 Re: Програмування Arduino » Вроде с таймерами разобрался, но никак не могу реализовать задуманное. » 2017-10-13 11:05:15

Так с бузером мне смогут показать как выйти из ситуации? Тупо не могу запустить автоцикл. Есть еще мысль постоянно инвертировать состояние/флаг, наверное заработает, но мне кажется это будет некорректный код.  Может именно по этой теме есть у кого-то литература, статья?

#3 Re: Програмування Arduino » Вроде с таймерами разобрался, но никак не могу реализовать задуманное. » 2017-10-12 21:14:03

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

#4 Re: Програмування Arduino » Вроде с таймерами разобрался, но никак не могу реализовать задуманное. » 2017-10-12 20:53:58

Код Вячеслав Азарова интересный, но я его пока не понимаю. Оператор switch еще не использовал, но хочу освоить.

#5 Re: Програмування Arduino » Вроде с таймерами разобрался, но никак не могу реализовать задуманное. » 2017-10-12 20:48:04

GREEN, огромное спасибо! Код работает, на его основе вроде разобрался с таймером этого типа, уже пишу сам, не подсматривая в подсказки)). Переписал его под конкретные нужны: в место леда бузер, а потом сирена. Запуск с концевика.
Теперь столкнулся с другой проблемой: нужна звук с пьезоизлучателя разных тонов в цикле, с возможностью его отключить. Не проблема его запустить чем то типа кнопка и несколько раз скопировать код, но хочу поставить эту часть кода вызывать как функцию, но не понимаю как при вызове функции, она стартовала. Как сделать в виде функции знаю.

#define button1Pin 5        
#define BUZZER 2
unsigned long interv;

void setup() {                              /////////SETUP/////////

pinMode(button1Pin, INPUT_PULLUP);
}
                                        
void loop(){                                 /////////LOOP/////////
boolean button_1 = !digitalRead(button1Pin);


if (button_1 == HIGH) {
  tone(BUZZER,600,500);
interv = millis();  
}

if(interv&&millis() - interv > 500) {
interv = 0;
tone(BUZZER, 300,500);
interv = millis();
}

if(interv&&millis() - interv > 500) {
interv = 0;
tone(BUZZER, 300);
interv = millis();
}

}

#6 Re: Програмування Arduino » Вроде с таймерами разобрался, но никак не могу реализовать задуманное. » 2017-10-11 13:32:33

Уважаемый, GREEN! Вроде код работает, это я начал переводить кнопки с резисторов на INPUT_PULLUP. Но печему то отрабатывает по 15 секунд вместо 10. Опять таки пока посмотрел поверхностно.

#7 Re: Програмування Arduino » Вроде с таймерами разобрался, но никак не могу реализовать задуманное. » 2017-10-11 12:27:10

Уважаемый, GREEN! Я пробовал подобным способом, но у меня не получилось. Пока, что код не работает. Горит 13, при нажатии, гаснет. У меня сейчас клиент по компу, закончу посмотрю скеч, может я что то нахомутал не так. А за отзыв на пой призыв о помощи ОГРОМНОЕ СПАСИБО. А как заработает без проблем с меня пивасик)). Я обязательно отпишусь сегодня.

#8 Re: Програмування Arduino » Вроде с таймерами разобрался, но никак не могу реализовать задуманное. » 2017-10-11 10:36:48

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

P.S.

Я не программер, я самоучка, что в компьютерной тематике, что в программировании ардуины. С компьютерами я больше 15 лет работаю и было у кого спросить, то в программировании даже посоветоваться, кроме форума не с кем.  Хотя есть мысли пойти на курсы программирования и этим зарабатывать на жизнь, но это пока мысли, сейчас я битву с ардуиной проигрываю(.

#9 Програмування Arduino » Вроде с таймерами разобрался, но никак не могу реализовать задуманное. » 2017-10-11 00:34:13

ForestCrow
відповідей: 19

Затея какая: от нажатия кнопки должен загореться один светодиод. По истечении 10 секунд первый светодиод должен погаснуть, а второй зажечься тоже на 10 секунд. При этом всем, нужно при нажатии второй кнопки весь этот процес прервать и вернуться в основную программу. Вот взял чужой скетч и на его основе пытаюсь реализовать. Второй LED либо совсем не зажигается, либо зажигается автоматически. Может другой подход к реализации должен быть, не через milles() ?

const int button1Pin = 5;
const int button2Pin = 3;
const int led1Pin = 13;
const int led2Pin =4 ;
unsigned long led1OnTime;
unsigned long led2OnTime;
//bool led1On;                             //Изначально было влючены везде эти переменные, но я их отключил и разницы в работе не увидел.
//bool led2On;

void setup() {                              /////////SETUP/////////
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(button1Pin, INPUT);
pinMode(button2Pin, INPUT);
//led1On = false;
//led2On = false;
}
                                       
void loop(){                                 /////////LOOP/////////

if (digitalRead(button1Pin) == HIGH) {       //Кнопка1 нажата, лед включен, статус вкл,
digitalWrite(led1Pin, HIGH);
//led1On = true;
led1OnTime = millis();
}

if (digitalRead(button2Pin) == HIGH) {       //Кнопка2 нажата, лед включен, статус вкл,
digitalWrite(led2Pin, HIGH);
//led2On = true;
led2OnTime = millis();   
}

//if(led1On)
if(millis() - led1OnTime > 10000) {
digitalWrite(led1Pin, LOW);
//led1On = false;

}

//if(led2On)
if(millis() - led2OnTime > 10000) {   
digitalWrite(led2Pin, LOW);
//led2On = false;
}
}

#10 Re: Програмування Arduino » RFID не получается сделать включение и выключение. » 2017-10-08 00:12:18

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

#11 Програмування Arduino » RFID не получается сделать включение и выключение. » 2017-10-07 20:25:36

ForestCrow
відповідей: 3

Приветствую!!!
Нужно, что бы с RFID метки включалась сигнализация и выключалась при повторном подношении. В интернете куча того, что включается и через паузу отключается, но мне нужно именно по карточке и включение и отключение. С инфракрасным датчиком работает все, с ДУ тоже с одной кнопки всё работает, а вот с RFID не в какую. При подношении он снимает снимает с охраны, а через 2 секунды снова ставит. Но карточку я второй раз не подношу. Целый день убил, ничего не понимаю. Подскажите, пожалуйста, только по существу, где я облажался, сил больше нет.

#include <SPI.h>
#include <MFRC522.h> // библиотека "RFID".
#define SS_PIN 10
#define RST_PIN 9
#define STATE_LED 7
MFRC522 mfrc522(SS_PIN, RST_PIN);
unsigned long uidDec, uidDecTemp;  // для храниения номера метки в десятичном формате


int State=1;


void setup() {
  Serial.begin(9600);
  Serial.println("Waiting for card...");
  SPI.begin();  //  инициализация SPI / Init SPI bus.
  mfrc522.PCD_Init();     // инициализация MFRC522 / Init MFRC522 card.

 pinMode(STATE_LED, OUTPUT);


}
void loop() {
  // Поиск новой метки
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }
  // Выбор метки
  if ( ! mfrc522.PICC_ReadCardSerial()) {
    return;
  }
  uidDec = 0;
  // Выдача серийного номера метки.
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    uidDecTemp = mfrc522.uid.uidByte[i];
    uidDec = uidDec * 256 + uidDecTemp;
  }
  Serial.println("Card UID: ");
  Serial.println(uidDec); // Выводим UID метки в консоль.

///////////////////////////////////////////////////////////////////////////////////////////////////////

  
  if (uidDec == 3309163877 && State==1){
  
   Serial.println("Security state: Off");
    tone(2, 700, 500); // Делаем звуковой сигнал, Открытие
    
    State = 0;
  delay(2000); // пауза 3 сек и механизм запирается.
  }
  
 if (uidDec == 3309163877 && State==0){
State=1;
   Serial.println("Security state: On");
    tone(2, 700, 1000); // Делаем звуковой сигнал, Открытие
    delay(2000); // пауза 2 сек и механизм запирается.
  }
  
}

#12 Re: Програмування Arduino » Помогите, объясните. Всё работает, но как не понимаю. А нужно. » 2017-02-08 15:55:52

Уважаемый, yus12! Спасибо, что откликнулись на мой зов!) Все, что Вы написали мне полностью понятно. Я не могу понять саму логику кода. В первом скетче
if (press == HIGH)  - это уловие что в момент нажатия кнопки? Это понятно.
  {
if(toggle)   - если taggle истина? Если так, то зачем его обозначать здесь если он уже прописан как переменная = истина?Или как??
    {                                 
      servo.write(90);            то серва на 90 и после этой операции taggle не истина?
      toggle = !toggle;
    }
    else
    {
      servo.write(20);          - ну это и так понятно.
      toggle = !toggle;

Это все что я хочу понять для себя в первом счетче. Во втором все понятно кроме самой пошаговой логике этой строчки :digitalWrite(LedPin, !digitalRead(LedPin));. Или это вообще готовая функция, кроме LedPin и она не поддается пошаговой расшифровке, а сразу означает изменение состояния?  Может я не правильно выражаюсь, но надеюсь суть вопроса понятна.

#13 Re: Програмування Arduino » Помогите, объясните. Всё работает, но как не понимаю. А нужно. » 2017-02-08 13:24:17

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

#14 Re: Програмування Arduino » Помогите, объясните. Всё работает, но как не понимаю. А нужно. » 2017-02-08 10:39:04

А я как по Вашему учусь? С потолка? Или Вы учились чисто по книгам, без наставников, преподавателей и никогда никому не задавали вопросов? И вообще, было бы не плохо найти тут друзей с общими интересами и взаимовыручкой. А книга по С++ и уроки в ютюбе так могут?

#15 Програмування Arduino » Помогите, объясните. Всё работает, но как не понимаю. А нужно. » 2017-02-08 01:07:16

ForestCrow
відповідей: 13

Cкетч №1  управления сервой одной кнопкой. Я не могу понять пошаговую логику как оно работает, а без понимания не могу продвинуться дальше. Есть скетч №2 - простой триггер для светодиода. Я не понимаю выражение: digitalWrite(LedPin, !digitalRead(LedPin));. Получается две разных функции и обе на LedPin? И можно ли во втором скетче вместо светодиода управлять сервой как в первом скетче? Не помешает и литература по программным триггерам (если я правильно выражаюсь). Может кому-то не лень в телефонном режиме растолковать мне неучу)? Заранее спасибо, очень жду, реально застрял в этом месте.
Виталий. Киев, Деснянский.

Скетч №1
#include <Servo.h>
int button = 5; //button pin, connect to ground to move servo
int press = 0;
Servo servo;
boolean toggle = true;

void setup()
{
  pinMode(button, OUTPUT); //arduino monitor pin state
  servo.attach(7); //pin for servo control signal
  digitalWrite(5, LOW); //enable pullups to make pin high
}

void loop()
{
  press = digitalRead(button);
  if (press == HIGH)
  {
    if(toggle)
    {
      servo.write(90);
      toggle = !toggle;
    }
    else
    {
      servo.write(20);
      toggle = !toggle;
    }
  }
  delay(500);  //delay for debounce
}

Скетч №2

int LedPin = 13;             // Подключаем светодиод к порту 13
int ButPin = 4;             // Подключаем кнопку к выходу 10

void setup()
{
  pinMode(LedPin, OUTPUT);   // Инициализируем порт "ledPin" как выходной

void loop(){
  if(digitalRead(ButPin) == HIGH)        // если кнопка нажата
    {
      digitalWrite(LedPin, !digitalRead(LedPin));        // то переключаем состояние LedPin
      delay(500);
    }
}

Підвал форуму