아두이노 digitalRead 관련 질문

아두이노 digitalRead 관련 질문

작성일 2023.12.23댓글 1건
    게시물 수정 , 삭제는 로그인 필요

현재 아두이노 2개를 사용하여 NFC 터치가 감지되면 두 개의 스테핑 모터가 연동되는 프로그램을 짜고 있습니다.
아두이노1 12번 핀(pin name: feedback1)과 아두이노2 7번 핀(pin name: feedback2)을 선으로 연결해서 아두이노1 12번핀이 HIGH상태가 되면 아두이노2 7번 핀이 HIGH 상태가 되어 스테핑모터2가 동작하도록 프로그래밍해뒀습니다.
그런데 2번 스테핑 모터가 NFC 터치가 한 번이라도 감지되면 그 다음부터는 감지가 되지 않았음에도 계속해서 동작을 하더군요?
그래서 LED(아두이노2 13번 핀, pin name: on)를 사용해서 출력을 확인해본 결과 
if(digitalRead(feedback2) == HIGH)가 계속 만족되어서 LED가 계속 켜져있더라구요.
혹시 몰라서 feedback1 값이 HIGH로 남아있는지도 확인해봤는데 그건 아니었습니다.

1. 혹시 digitalRead 값은 제가 직접 바꿔주기 전까지는 값을 변화시킬 수는 없나요?
2. 만약 그렇다면 값을 변화시키는 명령어가 따로 있나요?

참고로 스테핑 모터는 28BYJ-48 , NFC모듈은 PN532, UNO보드 사용했습니다.

<코드>
//UNIT1(ARDUINO1 & RFID & STEPPING1)
/*
#include <Adafruit_PN532.h>
#include <Stepper.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_PN532.h>

#define PN532_SCK  (2)
#define PN532_MOSI (3)
#define PN532_SS   (4)
#define PN532_MISO (5)

#define PN532_IRQ   (2)
#define PN532_RESET (3)

Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);

#if defined(ARDUINO_ARCH_SAMD)
  #define Serial SerialUSB
#endif
int steps = 2048;
int a=0;
int stop=1;
int feedback1 = 12;

Stepper stepper(steps,  11, 9, 10, 8);
void setup() {
  stepper.setSpeed(10);
  pinMode(12,OUTPUT);
  #ifndef ESP82266
    while(!Serial);
  #endif
  Serial.begin(115200);
  Serial.println("Hello!");

  nfc.begin();

  uint32_t versiondata = nfc.getFirmwareVersion();
  if (! versiondata) {
    Serial.print("Didn't find PN53x board");
    while (1);
  }

  Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX);
  Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC);
  Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);

  nfc.SAMConfig();

  Serial.println("Waiting for an ISO14443A card");
}

void loop() {
  uint8_t success;
  uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 };
  uint8_t uidLength;
 
  success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);

  if(success && stop) a=1;

  if(a)
  {
    stop=0;
    digitalWrite(feedback1,HIGH);
    stepper.step(steps/360*120);
    delay(5000);
    stepper.step(-steps/360*120);
    delay(1000);
    digitalWrite(feedback1,LOW);
    a=0;
    stop=1;
  }
}
*/

//UNIT2(ARDUINO2 & STEPPING2)
/*
#include <Stepper.h>
int steps = 2048;
int feedback2 = 7;
int on=13;
int a=0;

Stepper stepper(steps,  11, 9, 10, 8);

void setup() {
  stepper.setSpeed(10);
  pinMode(7,INPUT);
  pinMode(13,OUTPUT);
}

void loop() {
  if(digitalRead(feedback2) == HIGH)
  {
    digitalWrite(on,HIGH);
  }
  else
  {
    digitalWrite(on,LOW);
  }
}
*/


#아두이노 digitalread #아두이노 digitalread 속도 #아두이노 digitalread 전압

profile_image 익명 작성일 -

혹시 양측 아두이노의 전원이 서로 별개의 전원을 쓰고 계신건지요?

이럴 경우 두개의 핀을 같이 연결하더라도

GND기준이 맞지 않아 인식이 안될 수 있습니다.

이런 경우 양측 아두이노의 GND를 연결해주면 해결됩니다.

물론 양측의 전원공급장치의 차이로 문제가 발생할 수 있으나......이건 별개의 문제이겠지요.

그 외에는 스텝모터에서 발생하는 노이즈와 공급전원의 부족 등이 떠오릅니다.

스텝모터의 연결을 완전히 해제한 후에 테스트해보셔서

(이미 하셨다시피 LED등을 응용하여 상태 체크 정도만 하시면 되겠죠.)

정상작동을 한다면 노이즈나 공급전원의 문제일 것입니다.

아두이노 관련 질문드립니다.

... if(digitalRead(sensor_pin1)==HIGH && digitalRead(sensor_pin2)==HIGH... noTone(BUZ3); } break; } } 질문소스에서 제일 아래의 else는 부합되는...

아두이노 관련 질문 드립니다.

... if(digitalRead(sensor_pin1)==LOW && digitalRead(sensor_pin2)==HIGH) { if... tone(buzzer2,510, 100); } } if(digitalRead(sensor_pin1)==HIGH && digitalRead(sensor...

아두이노 관련 질문

... 이 아두이노의 하얀색 LED가 켜지고 피에조에서 소리가... if(digitalRead(buttonPin1) == LOW) { if(arr[4] == 0) { digitalWrite(LED4, HIGH)...

아두이노 관련 질문이요

아두이노 코딩하고있는데 전선스위치를 연결하면... 질문이 중의적입니다. 한마디로 구체적인 내용이... println(num); } void loop(){ if(digitalRead(12)==0){ num...