BASIC4MCU | 질문게시판 | qr 코드 스캔 후 서보모터 작동 다시 한번 질문드립니다..
페이지 정보
작성자 안두이노 작성일2019-11-25 20:24 조회5,092회 댓글1건본문
#include <usbhid.h>
#include <usbhub.h>
#include <hiduniversal.h>
#include <hidboot.h>
#include <SPI.h>
#include <stdint.h>
//
#include <Servo.h>
Servo myservo;
//
int val=-1,tp=-1;
//
class MyParser:public HIDReportParser{
public:
MyParser();
void Parse(USBHID *hid,bool is_rpt_id,uint8_t len,uint8_t *buf);
protected:
uint8_t KeyToAscii(bool upper,uint8_t mod,uint8_t key);
virtual void OnKeyScanned(bool upper,uint8_t mod,uint8_t key);
virtual void OnScanFinished();
};
//
MyParser::MyParser(){ }
//
void MyParser::Parse(USBHID *hid,bool is_rpt_id,uint8_t len,uint8_t *buf){
if(buf[2]==1||buf[2]==0){ tp=-1; return; }
//
tp=0;
for(uint8_t i=7; i>=2; i--){
if(buf[i]==0)continue; // If empty,skip
//
if(buf[i]==UHS_HID_BOOT_KEY_ENTER){ val=tp; OnScanFinished(); }
else { OnKeyScanned(i>2,buf,buf[i]); }
//
return;
}
}
//
uint8_t MyParser::KeyToAscii(bool upper,uint8_t mod,uint8_t key){
if(VALUE_WITHIN(key,0x04,0x1d)){ // Letters
if(upper){ tp=-1; return(key-4+'A'); }
else { tp=-1; return(key-4+'a'); }
}
else if(VALUE_WITHIN(key,0x1e,0x27)){ // Numbers
if(tp==-1)tp=0;
uint8_t i=(key==UHS_HID_BOOT_KEY_ZERO)?0:key-0x1e1;
tp=tp*10+i;
return i+'0';
}
//
return 0;
}
//
void MyParser::OnKeyScanned(bool upper,uint8_t mod,uint8_t key){
uint8_t ascii=KeyToAscii(upper,mod,key);
Serial.print((char)ascii);
}
//
void MyParser::OnScanFinished(){
Serial.println("-Finished");
}
//
USB Usb;
USBHub Hub(&Usb);
HIDUniversal Hid(&Usb);
MyParser Parser;
//
void setup(){
myservo.attach(10);
Serial.begin(115200);
Serial.println("Start");
if(Usb.Init()==-1){ Serial.println("OSC did not start."); }
delay(200);
Hid.SetReportParser(0,&Parser);
}
//
void loop(){
Usb.Task();
//
if(val>0)myservo.write(val);
}
저희가 좀 더 수정하여서 작동시켰는데 시리얼 모니터에 o-finished 가 뜨고 서보모터는 작동하지 않습니다..
어떤 부분을 더 수정 해야할까요..?
댓글 1
조회수 5,092master님의 댓글
master 작성일
디버깅은 보드가 있어야지 할 수 있습니다.
제가 더 도와드릴 방법은 없는 것 같습니다.
//
if(buf[i]==UHS_HID_BOOT_KEY_ENTER){ val=tp; OnScanFinished(); }
위 코드에서 시리얼 모니터 출력을 추가해보세요
if(buf[i]==UHS_HID_BOOT_KEY_ENTER){ val=tp; OnScanFinished(); Serial.print("val="); Serial.println(val); }
val에 무슨 값이 들어가는지 체크하면 디버깅이 수월해질겁니다.
//
만약 tp도 시리얼모니터에 출력한다면
tp=tp*10+i;
Serial.print("tp="); Serial.println(tp); // <-- 추가하세요
return i+'0';
}