Tag Archives: 프로그래밍

[iPhone/QR Code] XZing QR코드 리더 사용하기

QR코드 리더를 구현하기 위해 이리저리 알아보던중에 정말 멋지다 못해 거의 완벽한 라이브러리를 발견하였습니다. XZing이라는 것인데요. 다음과 같이 다양한 바코드를 읽을 수 있습니다.


UPC-A and UPC-E
EAN-8 and EAN-13
Code 39
Code 93
Code 128
QR Code
ITF
Codabar
RSS-14 (all variants)
Data Matrix
PDF 417 (‘alpha’ quality)

또한 이 라이브러리의 강점은 정말 다양한 플랫폼에서 동일하게 동작한다는 것인데요, 다음과 같은 다양한 언어/OS에서 동작할 수 있습니다.


javame: JavaME client
csharp: Partial C# port
cpp: Partial C++ port
rim: RIM/Blackberry-specific client build
iphone: iPhone client + port to Objective C / C++ (QR code only)
bug: Client for BugLabs’s BUG
jruby: Ruby wrapper
actionscript: partial port to Actionscript


정말 안되는게 없네요. 하지만 우선 아이폰 기반에서 어떻게 사용하는지에 대해 적어보도록 하겠습니다. 중요한 소스코드는 iphone/안에 모두 모여있습니다. iphone/ZXingWidget/프로젝트가 범용적으로 사용할 수 있는 뷰컨트롤러 형태의 라이브러리 프로젝트입니다. 이것을 실제로 사용한 샘플을 제작해 둔 것이 iphone/ScanTest/입니다. ScanTest를 면밀히 분석해 보면 어떻게 ZXingWidget라이브러리를 사용하는지 알 수 있지만 과정을 적어보도록 하겠습니다.

결과적으로 마지막에는 ScanTest소스를 보여드리겠지만 ZXingWidget프로젝트를 가지고 내가 새로운 프로젝트를 생성하여 개발한다고 가정해 보겠습니다.

1. ZXingWidget 디렉토리 안에 있는 ZXingWidget.xcodeproj 파일을 새로운 프로젝트의 Groups and Files 사이드바로 드래그하여 넣어줍니다. 이때에 파일을 복사할꺼냐고 물어보는데 복사는 하지 않습니다. Reference TypeRelative to Project로 선택해 줍니다.

사용자 삽입 이미지
2. 추가한 파일을 선택(1)하면 오른쪽에 libZXingWidget.a 파일이 리스팅됩니다. 그 옆(2)에 체크해 줍니다.

사용자 삽입 이미지3. 이제 Targets(1)이하의 프로젝트를 선택하여 Info(2)를 눌러 설정으로 들어갑니다.

사용자 삽입 이미지
4. General(1)탭안의 Direct Dependencies+(2)를 눌러 ZXingWidget(3)을 추가해 줍니다.

사용자 삽입 이미지
5. 이제 프로젝트의 설정창에 들어가 Header Search Paths(3)설정을 찾아 ZXingWidget라이브러리 프로젝트 안의 Classes의 상대 경로(5)를 추가해줍니다. 이때에 Recursive에 체크를 하셔야 합니다.

6. 이제 설정은 모두 끝났습니다. 다음의 헤더 파일이 핵심이 됨을 잊지 마세요.

[code]#import “ZXingWidgetController.h” // QR코드 리더 뷰 컨트롤러
#import “QRCodeReader.h” // QR코드 파싱을 위한 리더 등록용[/code]
7. 마지막으로 ScanTest 프로젝트의 샘플 코드를 잠깐 보겠습니다.

[code]- (IBAction)scanPressed:(id)sender
{
  // QR코드 리더 전용 뷰 컨트롤러 생성
  ZXingWidgetController *widController =
  [[ZXingWidgetController alloc] initWithDelegate:self showCancel:YES OneDMode:NO];

  // QR코드 분석기 생성
  QRCodeReader* qrcodeReader = [[QRCodeReader alloc] init];
  NSSet *readers = [[NSSet alloc ] initWithObjects:qrcodeReader,nil];
  [qrcodeReader release];
  widController.readers = readers;
  [readers release];

  // 인식 성공시에 플레이될 음악
  NSBundle *mainBundle = [NSBundle mainBundle];
  widController.soundToPlay =
  [NSURL fileURLWithPath:
    [mainBundle pathForResource:@”beep-beep” ofType:@”aiff”] isDirectory:NO];

  // 뷰를 보여준다
  [self presentModalViewController:widController animated:YES];
  [widController release];
}


#pragma mark –
#pragma mark ZXingDelegateMethods


– (void)zxingController:(ZXingWidgetController*)controller didScanResult:(NSString *)result {
  // 정상적으로 QR코드를 읽었을때 – 해독된 문자열이 result에 담겨있다.
  self.resultsToDisplay = result;
  if (self.isViewLoaded)
  {
    [resultsView setText:resultsToDisplay];
    [resultsView setNeedsDisplay];
  }
  [self dismissModalViewControllerAnimated:NO];
}


– (void)zxingControllerDidCancel:(ZXingWidgetController*)controller
{
  // 사용자가 취소했을 경우
  [self dismissModalViewControllerAnimated:YES];
}[/code]


참고로 ZXingWidget 라이브러리의 BaseSDK가 정상적으로 설정이 되어있다면 ScanTest에서 정상적으로 빌드가 될 때 ZXingWidget의 Product 폴더에 .a파일이 생성됨을 볼 수 있습니다. 이 파일만을 복사해다가 프로젝트안에 추가하면 위의 복잡한 설정없이 바로 사용 가능합니다.

[PXA270] 임베디드 시스템 프로그래밍 기말 프로젝트

사용자 삽입 이미지
예전에 임베디드 시스템 프로그래밍 수업시간에 제작했던 기말 프로젝트를 기록해둘까 한다. 당시에 몇가지 주제가 있었는데 Dot Matrix를 이용한 레이싱 게임을 만들기로 하였다.

PXA270이라는 장비는 교육용 장비로써 등치는 중국집 배달원의 철가방만하지만 요즘 나오는 안드로이드만 못한 성능을 보여주는 장비이다. 하지만 교육용으로는 최고의 느낌이다. 무언가 다루기 쉽다고나 할까. 직접 커널을 수정후에 올려서 돌려볼 수 있다는 점은 재미있는 경험이었던것 같다.

당시에 레이싱 게임을 만들기 위해 정해진 세부 구현 사항은 다음과 같았다.


– Dot Matrix 에 레이싱 트랙을 출력하고, 키를 이용하여 차를 조정
– 차의 진행에 따라 트랙이 아래로 스크롤
– 차는 한개의 점으로 표시
– 키를 이용하여 좌우로 장애물 회피(Key Matrix 혹은 GPIO키를 활용)
– 충돌하면 어디까지 갔는지 표시
– 트랙의 움직이는 속도는 적절히 결정

우리팀은 프로젝트가 다음과 같은 특성을 가지도록 개발하기로 하였다.


– 레벨은 끝이 없는 무제한
– 맵은 5개의 패턴을 이용하여 계속 이어붙여 끝없는 레이싱이 가능토록 함
– FND를 활용하여 현재 레벨과 점수를 표기
– 자동차를 단순한 한점으로 표기해야 하는 단점이 있어 벽과 구별이 어려워 깜빡이도록 함
– Character LCD에는 제작자 이름을 지속적으로 출력하도록 함
– 시작 및 자동차 충돌시 화려한 에니메이션 효과 추가

그렇게 해서 다음과 같은 작품이 탄생하였다. (Thanks to 5DMK2)



제작하였던 소스를 첨부하였다. 하지만 왜인지 리눅스 개발 환경도 UTF-8이었는데 인코딩이 죄다 깨져있는 문제가 있다. 수정을 할려다가 어차피 앞으로 돌릴수도 없을꺼 같아 그냥 올려둔다.

1006931823.zip
어떤분이 디바이스 드라이버를 요청하여 겸사겸사 딸려있던 파일들 다 올려둡니다.

1158138039.tgz