BASIC4MCU | 질문게시판 | 아두이노 세븐 세그먼트 제어
페이지 정보
작성자 전전전전 작성일2019-08-29 15:43 조회6,556회 댓글0건본문
아두이노에서 인터럽트 기능을 통해 버튼을 누르면 블루투스로 받은 숫자를 세븐 세그먼트에 뜨도록 하고 있는데 버튼을 누르면 1의 자리 숫자가 안뜨네요
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif#define A 3
#define B 4
#define C 8
#define D 10
#define E 9
#define F 7
#define G 11#define digit1 6
#define digit2 5#define PIN 12
#define NUMPIXELS 20
#define buttonPin 2Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int buttonState = 0;
int bookled;
int delayval = 500;
int k=0;
int j=0;int i=0;
const int segs[7]={A,B,C,D,E,F,G};
const int numbers[10][7]={{1,1,1,1,1,1,0},{0,1,1,0,0,0,0},{1,1,0,1,1,0,1},{1,1,1,1,0,0,1},{0,1,1,0,0,1,1},{1,0,1,1,0,1,1},{1,0,1,1,1,1,1},{1,1,1,0,0,1,0},{1,1,1,1,1,1,1},{1,1,1,1,0,1,1},};
const int NUMBER_OF_FIELDS = 2;
int fieldIndex = 0;
int values[NUMBER_OF_FIELDS];
int randomNum = 0;
char ch;
char store=0;void setup(){
Serial.begin(9600);#if defined (__AVR_ATtiny85__)
if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endifpixels.begin();
pinMode(buttonPin, INPUT_PULLUP);
for(int i=0;i<7;i++){
pinMode(segs[i],OUTPUT);
}
pinMode(digit1,OUTPUT);
pinMode(digit2,OUTPUT);
}void loop(){
if(Serial.available())
{
ch = Serial.read();if(store!=ch)
{
if(store >= '0' && store <= '9')
{
if(fieldIndex < NUMBER_OF_FIELDS)
{
values[fieldIndex]=(values[fieldIndex] * 10) + ((int)store - '0');
}
}
else if(store == ',')
{
fieldIndex++;
}
else
{
randomNum = values[0];
bookled = values[1];
fieldIndex = 0;
values[0]=0;
}
store=ch;
}
}
lightnumber1(randomNum%10);
delay(10);
lightnumber2(randomNum/10);
delay(10);pixels.clear();
pixels.show();
buttonState=digitalRead(buttonPin);
if(buttonState==LOW)
{
randomNum=0;
for(j=0;j<5;j++)
{
for(k=0;k<3;k++)
{
pixels.setPixelColor(bookled-2+k, pixels.Color(10,10,10));
}
pixels.show();
delay(500);
pixels.clear();
pixels.show();
delay(delayval);
}
}
}void lightnumber1(int num1){
digitalWrite(digit1,LOW);
digitalWrite(digit2,HIGH);
for(int i=0;i<7;i++){
digitalWrite(segs[i],numbers[num1][i]);
}
}
void lightnumber2(int num2){
digitalWrite(digit1,HIGH);
digitalWrite(digit2,LOW);
for(int i=0;i<7;i++){
digitalWrite(segs[i],numbers[num2][i]);
}
}
댓글 0
조회수 6,556등록된 댓글이 없습니다.