본문 바로가기

코딩과 교육/아두이노

MFS FND 기본사용법

멀터펑션실드를 사용한 FND 기본 사용법이다. 별도 라이브러리없이 기능할 수 있는 소스코드이다.

라이브러리를 사용하면 편리하지만 제공되는 기능 외에 다른 기능을 쓸수 없다. 반면 이렇게 만들면 원하는 기능을 사용자가 추가할 수 있다.

버튼 사용 소스

#include <TimerOne.h>
#include <Wire.h>
#include <MultiFuncShield.h>

void setup() 
{
  Serial.begin(9600);
  Timer1.initialize();
  MFS.initialize(&Timer1);
}

int count = 0;

void loop() 
{
  byte btn = MFS.getButton();
  
  if (btn)
  {
    byte buttonNumber = btn & B00111111;    // 1, 2, 3
    byte buttonAction = btn & B11000000;

    if ((buttonNumber == 1) && (buttonAction == BUTTON_SHORT_RELEASE_IND))
      count++;
  }
  if (count%2==0) 
  {
    MFS.write(1234);
    Serial.println("1234");
  }
  else 
  {
    MFS.write(5678);
    Serial.println("5678");
  }

}

 

 

기본 소스

/* Define shift register pins used for seven segment display */
#define LATCH_DIO 4
#define CLK_DIO 7
#define DATA_DIO 8
 
/* Segment byte maps for numbers 0 to 9 */
const byte SEGMENT_MAP[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90};
/* Byte maps to select digit 1 to 4 */
const byte SEGMENT_SELECT[] = {0xF1,0xF2,0xF4,0xF8};
 
void setup ()
{
  /* Set DIO pins to outputs */
  pinMode(LATCH_DIO,OUTPUT);
  pinMode(CLK_DIO,OUTPUT);
  pinMode(DATA_DIO,OUTPUT);
  }
 
/* Main program */
void loop()
{
 
  /* Update the display with the current counter value */
  WriteNumberToSegment(0 , 0);
  WriteNumberToSegment(1 , 1);
  WriteNumberToSegment(2 , 2);
  WriteNumberToSegment(3 , 3);
}
 
/* Write a decimal number between 0 and 9 to one of the 4 digits of the display */
void WriteNumberToSegment(byte Segment, byte Value)
{
  digitalWrite(LATCH_DIO,LOW);
  shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_MAP[Value]);
  shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_SELECT[Segment] );
  digitalWrite(LATCH_DIO,HIGH);
}