바쁘신 와중에 두서 없이 질문을 드려서 죄송합니다.
제가 조도값을 받아와 패킷을 분석하고 분석한 조도값이 일정값 이하이면 해당 MOTE로 메시지를 전송하여 RELAY 보드를 제어하여 조명을 관리하는 시스템을 만들고 있습니다.
아래같이 "TOSH_SET_PW5_PIN();"의 명령문을 넣어서 릴레이보드의 스위치를 ON시키는 것을 구현하였고, 또한 실제로 보드에도 INC.1 LED가 불이 들어와 설정을 제대로 했다고도 표시를 하는데 막상 꼬마전구와 건전지를 외부전력으로 전선은 "+"단과 "COM" 단에 각각 연결을 했는데도 켜지지가 않습니다. 혹시나 해서 "+"단의 전선을 "-"단에 연결해보니 꼬마전구에 불이 들어와버립니다. 이는 스위치가 OFF상태인 걸로 알고 있는데 제가 잘못 알고 있는 것입니다까? 원인이 무엇인지 알고 싶습니다. 부탁드리겠습니다.
event TOS_MsgPtr ReceiveMsg.receive(TOS_MsgPtr m) {
struct exUSN_Msg *pack;
if(m->length ==2)
{
memcpy(&RXUartPacket, m->data, sizeof(struct TestUart));
if (RXUartPacket.CMDtype == TOS_LOCAL_ADDRESS) {
if (RXUartPacket.CMD_1 == LED_ON){
call Leds.redOn();
TOSH_SET_PW5_PIN();
TOSH_SET_PW6_PIN();
} else if (RXUartPacket.CMD_1 == LED_OFF){
call Leds.redOff();
TOSH_CLR_PW5_PIN();
TOSH_CLR_PW6_PIN();
}
}
else
{
call SendMsg.send(TOS_BCAST_ADDR, sizeof(struct TOS_Msg), m);
call Leds.yellowToggle();
}
}
else
{
pack = (struct exUSN_Msg *)m->data;
}
// PRI정보와 pack->seq, pack->SenderID 값을 비교하여 예전에 전송한 패킷인지 겁사
// ... (직접 작성해 보시기 바랍니다.)
// 만약 전송한 패킷을 경우 바로 return.
// If packet has been generated by local node
if ((pack->originNode == TOS_LOCAL_ADDRESS) && (pack->TTL == 0))
{
pack->seq = getSeqNo();
}
// If message is new at node
else if (inLog(pack->seq, pack->originNode) == FALSE)
{
pack->SenderID = TOS_LOCAL_ADDRESS;
pack->TTL--;
}
else
{
dbg(DBG_TEMP, "MHFloodingPSM - Failed to select route for duplicate packet\n");
return FAIL;
}
if ( TOS_LOCAL_ADDRESS == 0 )
{
if (call SendMsg.send(TOS_UART_ADDR, sizeof(struct TOS_Msg), m)){
call Leds.yellowToggle();
}
} else {
pack->TTL--;
if (pack->TTL == 0) //TTL CHECK
return m;
pack->SenderID = TOS_LOCAL_ADDRESS;
// 전송할 패킷의 정보를 PRI에 저장
// ... (직접 작성해 보시기 바랍니다.)
addLogEntry(pack->seq, pack->originNode);
if (call SendMsg.send(TOS_BCAST_ADDR, sizeof(struct TOS_Msg), m)){
call Leds.redToggle();
}
}
return m;
}
}
|