请问应该怎么改才能刷卡之后停留在90度不自动转回-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2013|回复: 8

[未解决] 请问应该怎么改才能刷卡之后停留在90度不自动转回

[复制链接]
发表于 2020-12-20 20:14 | 显示全部楼层 |阅读模式
写了一个用RFID板刷卡开门的程序 然后再按碰撞传感器把门关上 但是接上电之后识别卡之后舵机旋转了90度之后会旋转回0度 所以按碰撞传感器也没有反应 请问这个应该怎么改才能刷卡之后停留在90度不自动转回 只有按下碰撞传感器才回回到0度?
  1. #include <SPI.h>
  2. #include <MFRC522.h>
  3. #include <Servo.h>

  4. #define id_0 0x09
  5. #define id_1 0x2F
  6. #define id_2 0x7E
  7. #define id_3 0xE7
  8. #define SS_PIN 53
  9. #define RST_PIN 49

  10. MFRC522 rfid(SS_PIN,RST_PIN);
  11. MFRC522::MIFARE_Key key;

  12. Servo servo;

  13. int crash = 7;
  14. int cnt = 0;
  15. int value = 0;

  16. void setup() {
  17.   Serial.begin(9600);
  18.   SPI.begin();
  19.   rfid.PCD_Init();
  20.   servo.attach(6);
  21.   pinMode(crash,INPUT);
  22.   for(byte i = 0;i < 6 ; i++){
  23.     key.keyByte[i]=0xff;
  24.   }
  25.   Serial.println(F("Using the following key:"));
  26.   printHex(key.keyByte,MFRC522::MF_KEY_SIZE);
  27. }

  28. void loop() {
  29.   
  30.   if(cnt == 1){
  31.     servo.write(90);
  32.   }else{
  33.     servo.write(0);
  34.   }
  35.   delay(2000);
  36.   
  37.    if(digitalRead(crash)== 0){
  38.     cnt=0;
  39.   }
  40.   if(! rfid.PICC_IsNewCardPresent())
  41.   return;
  42.   if(! rfid.PICC_ReadCardSerial())
  43.   return;  
  44.   Serial.print("카드 ID :\n");
  45.   printHex(rfid.uid.uidByte,rfid.uid.size);
  46.   Serial.println("\n");

  47.   if(rfid.uid.uidByte[0] == id_0 ||
  48.     rfid.uid.uidByte[1] == id_1 ||  
  49.     rfid.uid.uidByte[2] == id_2 ||  
  50.     rfid.uid.uidByte[3] == id_3){
  51.     cnt = 1;
  52.   }
  53. }

  54. void printHex(byte *buffer,byte bufferSize){
  55.   for(byte i = 0;i < bufferSize; i++){
  56.     Serial.print(buffer[i] < 0X10 ? "0":" ");
  57.     Serial.print(buffer[i],HEX);
  58.   }
  59. }
复制代码


发表于 2020-12-21 10:22 | 显示全部楼层
你这个代码效果是不是,开始舵机在0度,然后刷卡之后到90度,过了几秒后又回到零度?
 楼主| 发表于 2020-12-21 10:47 | 显示全部楼层
int_i 发表于 2020-12-21 10:22
你这个代码效果是不是,开始舵机在0度,然后刷卡之后到90度,过了几秒后又回到零度? ...

对的 我不想让他回到0度 回去的话我的碰撞感应器就没用了
发表于 2020-12-21 11:35 | 显示全部楼层
eobeom 发表于 2020-12-21 10:47
对的 我不想让他回到0度 回去的话我的碰撞感应器就没用了

我觉得可能是碰撞感应器那里出了问题,碰撞感应器总是判断为触发状态,是不是线的问题呢,代码看起来没有啥子问题。
,
 楼主| 发表于 2020-12-21 11:45 | 显示全部楼层
int_i 发表于 2020-12-21 11:35
我觉得可能是碰撞感应器那里出了问题,碰撞感应器总是判断为触发状态,是不是线的问题呢,代码看起来没有 ...

我是刷卡之后马达会转到90度然后会转回0度 所以我加了一个delay 要是不加delay的话他就会马上转回0度 所以碰撞感应器没用上他就已经回到0度了
发表于 2020-12-21 11:52 | 显示全部楼层
是的程序是这样运行的。变量初始值0,舵机在0度,然后刷卡变量为1,第一个if开始判断,判断成立舵机转到90度延时两秒,碰撞感应器触发变量为0,然后再回到第一个if判断,不成立执行else回到0度两秒。  所以最终的问题还是在碰撞感应器那边,你单独测一下碰撞感应的返回值试试是不是正常
 楼主| 发表于 2020-12-21 12:02 | 显示全部楼层
int_i 发表于 2020-12-21 11:52
是的程序是这样运行的。变量初始值0,舵机在0度,然后刷卡变量为1,第一个if开始判断,判断成立舵机转到90 ...

我用的这个代码测试的
  1. int CrashSensor = 7;

  2. void setup()
  3. {
  4. Serial.begin(9600);
  5. pinMode(CrashSensor, INPUT);
  6. }

  7. void loop()
  8. {
  9. int val = digitalRead(CrashSensor);
  10. Serial.println(val);
  11. delay(100);
  12. }
复制代码

没有按的时候是0,按了之后是1.但是我看教程说应该是没有按的时候是1,按了之后才是0.这个要怎么办呀?
 楼主| 发表于 2020-12-21 12:07 | 显示全部楼层
int_i 发表于 2020-12-21 11:52
是的程序是这样运行的。变量初始值0,舵机在0度,然后刷卡变量为1,第一个if开始判断,判断成立舵机转到90 ...

我发现问题了 是我vcc和GND接反了 终于解决了 谢谢
发表于 2020-12-21 14:24 | 显示全部楼层
eobeom 发表于 2020-12-21 12:07
我发现问题了 是我vcc和GND接反了 终于解决了 谢谢

不客气
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 17:33 , Processed in 0.095037 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表