Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

г0сть
2019-08-14 09:07:10

if(!digitalRead(buttonPin)) {
delay(10);               
while(!digitalRead(buttonPin)) {}                 
servo.write(0);
digitalWrite(ledPin, LOW);
digitalWrite(relayPin, LOW);
  }

vvr
2019-08-14 06:53:31

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

STALKER7538
2019-08-14 06:24:20

Почему если удалить строки с RFID то кнопка работает как положено?

STALKER7538
2019-08-14 05:12:02

Да

г0сть
2019-08-13 23:03:39
STALKER7538 пише:

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

Я правильно понял: в данном случае кнопка - это имитация сигнала с какой-то хрени? Поднесли карточку, сработало реле, подало питание на эту хрень, с выхода этой хрени пришел сигнал на ардуину. Выключили хрень, сигнал пропал, ардуина отключила реле?
Cигнал - низкий уровень LOW?

г0сть
2019-08-13 22:00:14

что значит "при отпускании кнопки"? Нажать на кнопку и удерживать нажатой - ничего не меняется, отпустить - реле выключилось. Или под отпусканием имеется ввиду разорвать цепь?

STALKER7538
2019-08-13 21:57:00

Подправил код. Реле тепер вкючаэтся. А с кнопкой по прежнему не могу разобратся. Может кто то помочь?

Когда подношу карточку. Серво поворачивается и реле включается. А кнопка не реагируэт.

При нажатой кнопке подношу карточку Серво поворачивается и реле включается и через секунду возвращается обратно.

Как сделать чтобы Возвращалось назад сервомотор и выключалось реле после отпускания кнопки без карточки?

Включить карточкой а выключить по отпускании кнопки.

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


// constants won't change. They're used here to set pin numbers:
const int buttonPin = 3;     // the number of the pushbutton pin
const int ledPin =  4;      // the number of the LED pin
const int relayPin =  2;      // the number of the RELAY pin

int buttonState = 0;         // variable for reading the pushbutton status



Servo servo;
void setup() {
    // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);

  Serial.begin(9600);
  Serial.println("Waiting for card...");
  SPI.begin();  //  инициализация SPI / Init SPI bus.
  mfrc522.PCD_Init();     // инициализация MFRC522 / Init MFRC522 card.
  servo.attach(6);
  servo.write(0);  // устанавливаем серву в закрытое сосотояние

}
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 == 1475896523) || (uidDec == 4786935279)) // Сравниваем Uid метки, если он равен заданому то серва открывает.
  { 
   digitalWrite(ledPin, HIGH);
   digitalWrite(relayPin, HIGH);
   servo.write(90); // Поворациваем серву на угол 90 градусов(Отпираем какой либо механизм: задвижку, поворациваем ключ и т.д.)
      delay(1000); // пауза 0,5 сек.
  
   buttonState = digitalRead(buttonPin); 
    // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
  if (buttonState == HIGH)
      {
   servo.write(0); // Поворациваем серву на угол 90 градусов(Отпираем какой либо механизм: задвижку, поворациваем ключ и т.д.)
   digitalWrite(ledPin, LOW);
   digitalWrite(relayPin, LOW);}
    
  }
  }
  
Kaka
2019-08-13 12:22:04

UU, ему это уже говорили на другом форуме, но он не верит smile

UU
2019-08-13 10:14:46

Автор, с этим

if (uidDec == 1475896523 or 4786935279)

Ваша сигналка будет срабатывать от абсолютно любой карты.

Можете легко это проверить - вставьте в условие вместо своих номеров любые другие, например

if (uidDec == 1111111111 or 4444444444)

и убедитесь, что сервы продолжают поворачиваться

г0сть
2019-08-12 23:07:30

проверяйте внимательно что вы накуролесили. Скопировал и ничего более не меняя добавил в ваш код три строки
  pinMode(3,INPUT);
  pinMode(relay_lights,OUTPUT);
  pinMode(relay_lights2,OUTPUT);
у меня нормально все скомпилировалось

STALKER7538
2019-08-12 23:01:17

Оно так сначала было написано но все равно не компилируется

г0сть
2019-08-12 22:55:40

да

STALKER7538
2019-08-12 22:54:39

Где после?
pinMode(buttonPin, INPUT);

г0сть
2019-08-12 22:42:49

ну а ; после ) кто ставить будет?

STALKER7538
2019-08-12 22:40:29
г0сть пише:

pinMode(xxx,INPUT) или pinMode(xxx,OUTPUT)
где xxx - сответствующий пин

не работает Arduino: 1.8.9 (Windows 7), Плата:"Arduino Nano, ATmega328P (Old Bootloader)"

sketch_aug05a:11:8: error: expected constructor, destructor, or type conversion before '(' token

pinMode(3,INPUT)

        ^

C:\Users\Lex\Desktop\RFID LESSON\sketch_aug05a\sketch_aug05a.ino: In function 'void setup()':

sketch_aug05a:19:3: error: 'servo' was not declared in this scope

   servo.attach(6);

   ^

C:\Users\Lex\Desktop\RFID LESSON\sketch_aug05a\sketch_aug05a.ino: In function 'void loop()':

sketch_aug05a:45:5: error: 'servo' was not declared in this scope

     servo.write(90); // Поворациваем серву на угол 90 градусов(Отпираем какой либо механизм: задвижку, поворациваем ключ и т.д.)

     ^

sketch_aug05a:55:1: error: 'servo' was not declared in this scope

servo.write(0);

^

exit status 1
expected constructor, destructor, or type conversion before '(' token

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