Ви не увійшли.
Сторінки 1
Скетч работает некоректно. Помогите разобратся
При поднисении правильной РФИД метки должен проворачиватся сервомотор и влючатся два реле, а при нажатии на кнопку сервомотор должен возвращатся в ноль а реле выключатся.
А у меня кнопка и реле не работает.
#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;
int relay_lights = 5; // Определение пина для реле включения зажигания
int relay_lights2 = 4; // Определение пина для реле включения насоса
Servo servo;
void setup() {
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); // устанавливаем серву в закрытое сосотояние
digitalWrite(relay_lights, HIGH);
digitalWrite(relay_lights2, HIGH);
}
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 or 4786935279) // Сравниваем Uid метки, если он равен заданому то серва открывает.
{
tone(5, 200, 500); // Делаем звуковой сигнал, Открытие
servo.write(90); // Поворациваем серву на угол 90 градусов(Отпираем какой либо механизм: задвижку, поворачиваем ключ и т.д.)
digitalWrite(relay_lights, LOW);
digitalWrite(relay_lights2, LOW);
delay(1000); // пауза 1 сек.
flag==0;
}
if(digitalRead(3)==LOW&&flag==1)//если кнопка нажата
if(digitalRead(3)==HIGH&&flag==0)
{
servo.write(0);
digitalWrite(relay_lights, HIGH);
digitalWrite(relay_lights2, HIGH);
tone(5, 500, 500); // Делаем звуковой сигнал, Закрытие
flag=1;
}
}
Неактивний
вы бы определились когда у вас кнопка нажата
if(digitalRead(3)==LOW&&flag==1)//если кнопка нажата
или
if(digitalRead(3)==HIGH&&flag==0)
и вы бы указали в сетапе где у вас вход, а где выход
да и это выражение
if (uidDec == 1475896523 or 4786935279)
вызывает сомнение
if(digitalRead(3)==LOW&&flag==0)//если кнопка нажата
Неактивний
и вы бы указали в сетапе где у вас вход, а где выход
да и это выражение
if (uidDec == 1475896523 or 4786935279)
вызывает сомнение
Как это указать?
Неактивний
pinMode(xxx,INPUT) или pinMode(xxx,OUTPUT)
где xxx - сответствующий пин
и это if(digitalRead(3)==LOW&&flag==1) тогда уберите
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
Неактивний
ну а ; после ) кто ставить будет?
Где после?
pinMode(buttonPin, INPUT);
Неактивний
да
Оно так сначала было написано но все равно не компилируется
Неактивний
проверяйте внимательно что вы накуролесили. Скопировал и ничего более не меняя добавил в ваш код три строки
pinMode(3,INPUT);
pinMode(relay_lights,OUTPUT);
pinMode(relay_lights2,OUTPUT);
у меня нормально все скомпилировалось
Автор, с этим
if (uidDec == 1475896523 or 4786935279)
Ваша сигналка будет срабатывать от абсолютно любой карты.
Можете легко это проверить - вставьте в условие вместо своих номеров любые другие, например
if (uidDec == 1111111111 or 4444444444)
и убедитесь, что сервы продолжают поворачиваться
Подправил код. Реле тепер вкючаэтся. А с кнопкой по прежнему не могу разобратся. Может кто то помочь?
Когда подношу карточку. Серво поворачивается и реле включается. А кнопка не реагируэт.
При нажатой кнопке подношу карточку Серво поворачивается и реле включается и через секунду возвращается обратно.
Как сделать чтобы Возвращалось назад сервомотор и выключалось реле после отпускания кнопки без карточки?
Включить карточкой а выключить по отпускании кнопки.
#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);}
}
}
Неактивний
что значит "при отпускании кнопки"? Нажать на кнопку и удерживать нажатой - ничего не меняется, отпустить - реле выключилось. Или под отпусканием имеется ввиду разорвать цепь?
Кнопка это отпицательний сигнал с зажигания. Когда зажигание выключить сигнал пропадает и система должна вернутся в истодное состояние
Я правильно понял: в данном случае кнопка - это имитация сигнала с какой-то хрени? Поднесли карточку, сработало реле, подало питание на эту хрень, с выхода этой хрени пришел сигнал на ардуину. Выключили хрень, сигнал пропал, ардуина отключила реле?
Cигнал - низкий уровень LOW?
Да
Неактивний
Почему если удалить строки с RFID то кнопка работает как положено?
Неактивний
if(!digitalRead(buttonPin)) {
delay(10);
while(!digitalRead(buttonPin)) {}
servo.write(0);
digitalWrite(ledPin, LOW);
digitalWrite(relayPin, LOW);
}
Сторінки 1