현재 코드는 아래와 같습니다.
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);
}
}
|