정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

아두이노 전압 오류입니다. 원인을 모르겠습니다
애스크 | 2021-11-26

현재 코드는 아래와 같습니다.

2~9번 핀에 전류가 흐를 시, 시리얼 모니터에 전류가 흐른 핀 번호가 뜨고 point변수에 10씩 추가되며, 그 point가 8x32 도트 매트릭스에 표시되는 형태입니다

이 외에 PCA9685 서보모터 드라이버를 사용했습니다.

회로는 두 모듈의 VCC는 5V, GND는 GND에 했으며,

 도트 매트릭스는 CS, CLK, DIN 순으로 10, 11, 12에 연결했으며, 서보모터 드라이버는 A4, A5에 연결했습니다.

그런데 작동을 시켜보니 2~9번 핀에 전류가 흐르지 않아도, 심지어 선 조차 연결하지 않아도 도트 매트릭스의 숫자가 게속 올라가는 현상이 발생했습니다.

시리얼 모니터로 확인해보니 몇초에 한번씩 선을 연결하면 연결한 핀의 숫자가, 연결하지 않았으면 2~9번 핀에서 랜덤하게 숫자가 출력되고 있었습니다.

 

정말 도저히 이해가 안됩니다.

문제점을 고칠 방법이 있을까요?

 

#include "LedControl.h"
#include "Wire.h"
#include "Adafruit_PWMServoDriver.h"

LedControl lc=LedControl(12,11,10,4);

Adafruit_PWMServoDriver pwm=Adafruit_PWMServoDriver();

int point = 0;

int t2,t3,t4,t5,t6,t7,t8,t9;


byte num[11][8] = {
  {
    B00111000,
    B01000100,
    B01000100,
    B01000100,
    B01000100,
    B01000100,
    B01000100,
    B00111000
  },
  {
    B00010000,
    B00110000,
    B00010000,
    B00010000,
    B00010000,
    B00010000,
    B00010000,
    B00111000
  },
  {
    B00111000,
    B01000100,
    B00000100,
    B00000100,
    B00001000,
    B00010000,
    B00100000,
    B01111100
  },
  {
    B00111000,
    B01000100,
    B00000100,
    B00011000,
    B00000100,
    B00000100,
    B01000100,
    B00111000
  },
  {
    B00000100,
    B00001100,
    B00010100,
    B00100100,
    B01000100,
    B01111110,
    B00000100,
    B00000100
  },
  {
    B01111100,
    B01000000,
    B01000000,
    B01111000,
    B00000100,
    B00000100,
    B01000100,
    B00111000
  },
  {
    B00111000,
    B01000100,
    B01000000,
    B01111000,
    B01000100,
    B01000100,
    B01000100,
    B00111000
  },
  {
    B01111100,
    B00000100,
    B00000100,
    B00001000,
    B00010000,
    B00100000,
    B00100000,
    B00100000
  },
  {
    B00111000,
    B01000100,
    B01000100,
    B00111000,
    B01000100,
    B01000100,
    B01000100,
    B00111000
  },
  {
    B00111000,
    B01000100,
    B01000100,
    B01000100,
    B00111100,
    B00000100,
    B01000100,
    B00111000
  },
  {
    B00000000,
    B01111100,
    B01100110,
    B01100110,
    B01100110,
    B01111100,
    B01100000,
    B01100000
  }
};


void sb() {
  int s1 = point/100;
  int s2 = point0/10;
  int s3 = point0/1;
  
  for (int i=0; i<10; i++) {
    for (int j=0; j<8; j++) {
      lc.setRow(0, j, num[s3][j]);
    }
  }
  for (int i=0; i<10; i++) {
    for (int j=0; j<8; j++) {
      lc.setRow(1, j, num[s2][j]);
    }
  }
  for (int i=0; i<10; i++) {
    for (int j=0; j<8; j++) {
      lc.setRow(2, j, num[s1][j]);
    }
  }
  for (int i=0; i<10; i++) {
    for (int j=0; j<8; j++) {
      lc.setRow(3, j, num[10][j]);
    }
  }
}


void setup() {
  Serial.begin(9600);
  
  for(int i=0; i<4; i++) {
    lc.shutdown(i,false);
    lc.setIntensity(i,2);
    lc.clearDisplay(i);
  }

  pwm.begin();
  pwm.setPWMFreq(51);

  pinMode(2, INPUT);
  pinMode(3, INPUT);
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  pinMode(6, INPUT);
  pinMode(7, INPUT);
  pinMode(8, INPUT);
  pinMode(9, INPUT);

  for (int fs=0; fs<10; fs++) {
    pwm.setPWM(fs,0,0);
  }
}

void loop() {
  sb();
  
  int pin2 = digitalRead(2);
  int pin3 = digitalRead(3);
  int pin4 = digitalRead(4);
  int pin5 = digitalRead(5);
  int pin6 = digitalRead(6);
  int pin7 = digitalRead(7);
  int pin8 = digitalRead(8);
  int pin9 = digitalRead(9);

  if (pin2 == 1) {
    point = point+10;

    int r2 = constrain(map(10, 0, 180, 150, 600), 150, 600);
    pwm.setPWM(2,0,r2);
    Serial.println("2");
  }
  if (pin3 == 1) {
    point = point+10;

    int r3 = constrain(map(10, 0, 180, 150, 600), 150, 600);
    pwm.setPWM(3,0,r3);
    Serial.println("3");
  }
  if (pin4 == 1) {
    point = point+10;

    int r4 = constrain(map(10, 0, 180, 150, 600), 150, 600);
    pwm.setPWM(4,0,r4);
    Serial.println("4");
  }
  if (pin5 == 1) {
    point = point+10;

    int r5 = constrain(map(10, 0, 180, 150, 600), 150, 600);
    pwm.setPWM(5,0,r5);
    Serial.println("5");
  }
  if (pin6 == 1) {
    point = point+10;

    int r6 = constrain(map(10, 0, 180, 150, 600), 150, 600);
    pwm.setPWM(6,0,r6);
    Serial.println("6");
  }
  if (pin7 == 1) {
    point = point+10;

    int r7 = constrain(map(10, 0, 180, 150, 600), 150, 600);
    pwm.setPWM(7,0,r7);
    Serial.println("7");
  }
  if (pin8 == 1) {
    point = point+10;

    int r8 = constrain(map(10, 0, 180, 150, 600), 150, 600);
    pwm.setPWM(8,0,r8);
    Serial.println("8");
  }
  if (pin9 == 1) {
    point = point+10;

    int r9 = constrain(map(10, 0, 180, 150, 600), 150, 600);
    pwm.setPWM(9,0,r9);
    Serial.println("9");
  }

  for (int i=2; i<10; i++) {
    pwm.setPWM(i,0,0);
  }
}

 

이전글   |    아두이노 우노 적외선 센서로 인원 수 카운팅...... 2021-11-16
다음글   |    반갑습니다. 2021-12-08