아두이노

7-Segment

iseohyun 2022. 1. 18.

목차

    void printDigit(int input);
    
    byte Pins[] = {9, 8, 3, 4, 5, 7, 6, 2};
    byte Digit[] = {
    	0xFC, // 0
    	0x60, // 1
    	0xDA, // 2
    	0xF2, // 3
    	0x66, // 4
    	0xB6, // 5
    	0xBE, // 6
    	0xE4, // 7
    	0xFE, // 8
    	0xF6, // 9
    };
    byte read = 0, tmp;
    void (*func)(byte);
    
    void setup(){
    	Serial.begin(9600);
    	for(int i=0; i<8; i++) {
    		pinMode(Pins[i], OUTPUT);
    		digitalWrite(Pins[i],HIGH);
    	}
    	func = mode1;
    }
    
    void loop(){
    	if(Serial.available() > 0){
    		tmp = read;
    		read = Serial.read();
    		switch(read){
    		case 'a': case 'A':
    			func = mode1;
    			mode1(true);
    			read = 0;
    			break;
    		case 'b': case 'B':
    			func = mode2;
    			read = 0;
    			break;
    		case '0': case '1': case '2': case '3': case '4':
    		case '5': case '6': case '7': case '8': case '9':
    			if(func == mode2) read -= '0';
    			else read = tmp;
    			break;
    		default:
    			read = tmp;
    		}
    	}
    	func(read);
    }
    
    void mode2(byte digit) {
    	printDigit(digit);
    	delay(10);
    }
    
    void mode1(byte bStart){
    	static byte i = 0;
    	
    	if(bStart) i = 0;
    	
    	printDigit(i++);
    	
    	if(i > 9) i = 0;
    	
    	delay(1000);
    }
    
    void printDigit(int input){
    	byte mask = 0x80;
    	for(int i = 0; mask; i++, mask>>=1){
    		if(Digit[input] & mask)
    			digitalWrite(Pins[i],LOW);
    		else
    			digitalWrite(Pins[i],HIGH);
    	}
    }

    '아두이노' 카테고리의 다른 글

    RTC(Real Time Clock) - DS3231  (0) 2022.01.18
    스텝모터(28BYJ-48)  (0) 2022.01.18
    인체감지센서  (0) 2022.01.18
    키패드  (0) 2022.01.18
    초음파센서  (0) 2022.01.18

    댓글