При нажатии кнопки Servo поворачивается на 180, а через 3 секунды обратно.
- Войдите на сайт для отправки комментариев
Пнд, 24/04/2017 - 09:00
Всем привет!Делаю электронный замок в дверь.Установил RFID, LCD дисплей, Servo. А вот кнопку чтоб выходить можно было не поднося карты - не получается!Куда вписать и что вписать, чтоб при нажатии серва вращалась на 180 градусов?А кнопку подобие такой:https://yandex.ru/images/search?text=%D0%9A%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0%20%D0%B2%D1%8B%D1%85%D0%BE%D0%B4%D0%B0%20PB-26&noreask=1&img_url=http%3A%2F%2Fkupit-cable.ru%2Fupload%2Fiblock%2F4d4%2F4d475cd20b0865777c56a99b4785b1b4.jpg&pos=26&rpt=simage&lr=10865
Вот скетч:
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Servo.h>
#include <SPI.h>
#include <MFRC522.h> // библиотека "RFID".
byte bukva_B[8] = {B11110,B10000,B10000,B11110,B10001,B10001,B11110,B00000,}; // Буква "Б"
byte bukva_G[8] = {B11111,B10001,B10000,B10000,B10000,B10000,B10000,B00000,}; // Буква "Г"
byte bukva_D[8] = {B01111,B00101,B00101,B01001,B10001,B11111,B10001,B00000,}; // Буква "Д"
byte bukva_ZH[8] = {B10101,B10101,B10101,B11111,B10101,B10101,B10101,B00000,}; // Буква "Ж"
byte bukva_Z[8] = {B01110,B10001,B00001,B00010,B00001,B10001,B01110,B00000,}; // Буква "З"
byte bukva_I[8] = {B10001,B10011,B10011,B10101,B11001,B11001,B10001,B00000,}; // Буква "И"
byte bukva_IY[8] = {B01110,B00000,B10001,B10011,B10101,B11001,B10001,B00000,}; // Буква "Й"
byte bukva_L[8] = {B00011,B00111,B00101,B00101,B01101,B01001,B11001,B00000,}; // Буква "Л"
byte bukva_P[8] = {B11111,B10001,B10001,B10001,B10001,B10001,B10001,B00000,}; // Буква "П"
byte bukva_Y[8] = {B10001,B10001,B10001,B01010,B00100,B01000,B10000,B00000,}; // Буква "У"
byte bukva_F[8] = {B00100,B11111,B10101,B10101,B11111,B00100,B00100,B00000,}; // Буква "Ф"
byte bukva_TS[8] = {B10010,B10010,B10010,B10010,B10010,B10010,B11111,B00001,}; // Буква "Ц"
byte bukva_CH[8] = {B10001,B10001,B10001,B01111,B00001,B00001,B00001,B00000,}; // Буква "Ч"
byte bukva_Sh[8] = {B10101,B10101,B10101,B10101,B10101,B10101,B11111,B00000,}; // Буква "Ш"
byte bukva_Shch[8]= {B10101,B10101,B10101,B10101,B10101,B10101,B11111,B00001,}; // Буква "Щ"
byte bukva_Mz[8] = {B10000,B10000,B10000,B11110,B10001,B10001,B11110,B00000,}; // Буква "Ь"
byte bukva_IYI[8] = {B10001,B10001,B10001,B11001,B10101,B10101,B11001,B00000,}; // Буква "Ы"
byte bukva_Yu[8] = {B10111,B10101,B10101,B11101,B10101,B10101,B10111,B00000,}; // Буква "Ю"
byte bukva_Ya[8] = {B10001,B10001,B10001,B01010,B00100,B01000,B10000,B00000,}; // Буква "Я"
LiquidCrystal_I2C lcd(0x3F, 16, 2);
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
unsigned long uidDec, uidDecTemp; // для храниения номера метки в десятичном формате
Servo servo;
void setup() {
pinMode (4, OUTPUT);
pinMode (3, OUTPUT);
digitalWrite(4, HIGH);
digitalWrite(3, LOW);
lcd.init();
lcd.backlight();
SPI.begin(); // инициализация SPI / Init SPI bus.
mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card.
servo.attach(6);
servo.write(0); // устанавливаем серву в закрытое сосотояние
}
void loop()
{
lcd.createChar(1, bukva_P); // Создаем символ под номером 1
lcd.createChar(2, bukva_D); // Создаем символ под номером 2
lcd.createChar(3, bukva_I); // Создаем символ под номером 2
lcd.createChar(4, bukva_Y); // Создаем символ под номером 2
lcd.setCursor(0, 0);
lcd.setCursor(3, 0);
lcd.print("\1");
lcd.setCursor(4, 0);
lcd.print("O");
lcd.setCursor(5, 0);
lcd.print("\2");
lcd.setCursor(6, 0);
lcd.print("H");
lcd.setCursor(7, 0);
lcd.print("E");
lcd.setCursor(8, 0);
lcd.print("C");
lcd.setCursor(9, 0);
lcd.print("\3");
lcd.setCursor(10, 0);
lcd.print("T");
lcd.setCursor(11, 0);
lcd.print("E");
lcd.setCursor(5, 1); //вторая строка
lcd.print("K");
lcd.setCursor(6, 1);
lcd.print("A");
lcd.setCursor(7, 1);
lcd.print("P");
lcd.setCursor(8, 1);
lcd.print("T");
lcd.setCursor(9, 1);
lcd.print("\4");
// Поиск новой метки
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;
}
lcd.clear();
lcd.setCursor(4, 1);
delay(500);
Serial.println("Card UID: ");
Serial.println(uidDec); // Выводим UID метки в консоль.
if (uidDec == 1882236028) // Сравниваем Uid метки, если он равен заданому то серва открывает.
{
lcd.createChar(1, bukva_P);
lcd.createChar(2, bukva_D);
lcd.createChar(3, bukva_I);
lcd.createChar(4, bukva_Y);
lcd.createChar(5, bukva_B);
lcd.createChar(6, bukva_ZH);
lcd.createChar(7, bukva_L);
lcd.setCursor(0, 0);
lcd.setCursor(5, 0);
lcd.print("\1");
lcd.setCursor(6, 0);
lcd.print("P");
lcd.setCursor(7, 0);
lcd.print("\3");
lcd.setCursor(8, 0);
lcd.print("B");
lcd.setCursor(9, 0);
lcd.print("E");
lcd.setCursor(10, 0);
lcd.print("T");
lcd.setCursor(11, 0);
lcd.print("!");
lcd.setCursor(5, 1); //вторая строка
lcd.print("B");
lcd.setCursor(6, 1);
lcd.print("X");
lcd.setCursor(7, 1);
lcd.print("O");
lcd.setCursor(8, 1);
lcd.print("\2");
lcd.setCursor(9, 1);
lcd.print("\3");
lcd.setCursor(10, 1);
lcd.print("T");
lcd.setCursor(11, 1);
lcd.print("E");
tone(5, 200, 500); // Делаем звуковой сигнал, Открытие
servo.write(180); // Поворациваем серву на угол 180 градусов(Отпираем какой либо механизм: задвижку, поворациваем ключ и т.д.)
delay(1500); // пауза 1.5 сек и механизм запирается.
tone(5, 500, 500); // Делаем звуковой сигнал, Закрытие
servo.write(0); // устанавливаем серву в закрытое сосотояние
}
else
{
lcd.createChar(1, bukva_P);
lcd.createChar(2, bukva_Sh);
lcd.createChar(3, bukva_L);
lcd.createChar(1, bukva_P);
lcd.createChar(1, bukva_P);
lcd.setCursor(5, 0);
lcd.print("\1");
lcd.setCursor(6, 0);
lcd.print("O");
lcd.setCursor(7, 0);
lcd.print("\2");
lcd.setCursor(8, 0);
lcd.print("E");
lcd.setCursor(9, 0);
lcd.print("\3");
lcd.setCursor(5, 1); //вторая строка
lcd.print("B");
lcd.setCursor(6, 1);
lcd.print("O");
lcd.setCursor(7, 1);
lcd.print("H");
lcd.setCursor(8, 1);
lcd.print("!");
lcd.setCursor(9, 1);
lcd.print("!");
lcd.setCursor(10, 1);
tone(5, 200, 800); // Делаем звуковой сигнал, Открытие
delay(1500); // пауза 3 сек и механизм запирается.
delay(500);
}
lcd.clear();
}
1. http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii - иначе Ваш код с высокой вероятность и читать никто не будет.
2. http://arduino.ru/forum/obshchii/prezhde-chem-sprosit-pro-servomashinku-servo-posmotri-tut - название темы говорит само за себя.