Dear members,
Please any one help me. I am literally don't know how to start working with that.
I need to fix sensors to CC2530DK
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Hi Amudha..!
I shall be able to help if you describe your application, what kind of sensors are involved, what type of data will be transmitted.
If you just want see how zigbee works, refer to CC2530ZDKQuickStartGuide_swra274a.pdf
regards Gautam
Dear Yikai Chen,
I am using CC2530DK kit , i want to develop project using IAR 8.10.3, I have installed SmartRF studio 7 , i don't know how to connect Kit to the IAR . Pls give me a clue how to start working with
There are some steps for starter in CC2530 Development Kit User's guide (http://www.ti.com/lit/ug/swru208b/swru208b.pdf).
Sir Yikai,
This is Amudha, I have got CC2530DK kit, i have gone through the steps in 208 and 208b . but i don't know where to get the sensors to be fixed.
Dear Gautam,
I am using CC2530DK kit, please can u suggest me how to start working with. please help me.
Dear Gautum,
I just want to built a wireless sensor node and i should detect if there is more than one node with same identifier .
ie., clone detection.
Pls help me .
sir,
i have got CC2530DK kit with the intention to start working in reality instead of simulation.
so i have gone through the notes what u have suggested and got IAR workbench.
now i need to start programming the kit.
i have got two nodes (with cc2530EM) and one coordinator.
but i am not knowing how to start. u have suggested me to go through Zstack but i am not getting any idea.
sorry to ask this type of silly questions, but pls help me.
excuse me mam !!!
yikai chen sir is right . u have to go through the Z-Stack Home Sample Application User's Guide if u are looking for automation kinda stuffs .. then start with Z-stack pgming .. or else u can start with basic programs like LED or somthing like that ... i started with some cmplex pgm and suffered alot ... without proper idea of Zstack it is some what tough
hi !! what will be your area of work mam !! i am working on sensor and actuators ..
if you are working in that point of view means u can start with simple internal sensor program
or light and switch program
Dear dileep,
I am having CC2530DK kit alone i am not having any sensors. i should make wireless sensor network. what is ur sugesstion.
Hi AMUDHA,
There is a Sample Sensor Temperature and Sample Thermostat that can be run on CC2530DK.
sir,
u r telling the Zstack Home1.2.1 / Projects/SampleLight Applications or some other sir.
And one more thing i am going thru the document, i have connected the CC2530DK with EM and connec ted to PC via USB cable.
but in the document says that there will be EZ module etc., been displayed in LCD but i am not getting any thing. can u tell me how to start a application and flash that to the DK.
I am new sir , pls tell me sir.
there is an internal temperature sensor and u can also measure voltage and send it over zigbee network
hi AMUDHA !!!
it is simple as it gets mam ... the kit itself consists of an internal debugger si you dont need anything extra ... just connect it to the pc via usb cable and then u would be able to debugg it via IAR
sir,
whether the contents which is in CC2530DK can be viewed in any of the interface.
As u specified i have run Temperture Sensor app in IAR , it is downloaded and debugged. It is showing in CC2530DK LCD as ZC: 8547 Temperature: 22 degree cel and SW5:help.
Actually my work is to get what is the room temperature and the node identifier.
tell me how to actually do this.
What for Flash Programmer and SmartRF studio, i have gone thru the pdfs , it is telling me the basics.
For example Using Smart RF studio , i can transmit the values from one node to the other. so after that i don't know how to do.
And more query sir, i want to publish a paper regarding this emulation in any journal, whether it will be acceptable. i what way i shld write, if u have any of ur papers specifying the emulation basics send me sir, i will get an idea.
You can use the attached zcl_sampletemperaturesensor.c to replace yours.
/************************************************************************************************** Filename: zcl_sampletemperaturesensor.c Revised: $Date: 2013-10-18 11:49:27 -0700 (Fri, 18 Oct 2013) $ Revision: $Revision: 35718 $ Description: Zigbee Cluster Library - sample device application. Copyright 2013 Texas Instruments Incorporated. All rights reserved. IMPORTANT: Your use of this Software is limited to those specific rights granted under the terms of a software license agreement between the user who downloaded the software, his/her employer (which must be your employer) and Texas Instruments Incorporated (the "License"). You may not use this Software unless you agree to abide by the terms of the License. The License limits your use, and you acknowledge, that the Software may not be modified, copied or distributed unless embedded on a Texas Instruments microcontroller or used solely and exclusively in conjunction with a Texas Instruments radio frequency transceiver, which is integrated into your product. Other than for the foregoing purpose, you may not use, reproduce, copy, prepare derivative works of, modify, distribute, perform, display or sell this Software and/or its documentation for any purpose. YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. Should you have any questions regarding your right to use this Software, contact Texas Instruments Incorporated at www.TI.com. **************************************************************************************************/ /********************************************************************* This device will act as a temperature sensor. It updates the current temperature on the thermostat when the user sends the desired temperature using SW1. SCREEN MODES ---------------------------------------- Main: - SW1: Send current temperature - SW2: Invoke EZMode - SW3: Adjust temperature - SW5: Go to Help screen Temperature: - SW1: Increase temperature - SW3: Decrease temperature - SW5: Enter temperature ---------------------------------------- *********************************************************************/ /********************************************************************* * INCLUDES */ #include "ZComDef.h" #include "OSAL.h" #include "AF.h" #include "ZDApp.h" #include "ZDObject.h" #include "ZDProfile.h" #include "MT_SYS.h" #include "zcl.h" #include "zcl_general.h" #include "zcl_ha.h" #include "zcl_ezmode.h" #include "zcl_ms.h" #include "hal_adc.h" #include "zcl_sampletemperaturesensor.h" #include "onboard.h" /* HAL */ #include "hal_lcd.h" #include "hal_led.h" #include "hal_key.h" /********************************************************************* * MACROS */ // how often to report temperature #define SAMPLETEMPERATURESENSOR_REPORT_INTERVAL 5000 /********************************************************************* * CONSTANTS */ /********************************************************************* * TYPEDEFS */ #define HAL_ADC_DEC_064 0x00 /* Decimate by 64 : 8-bit resolution */ #define HAL_ADC_DEC_128 0x10 /* Decimate by 128 : 10-bit resolution */ #define HAL_ADC_DEC_256 0x20 /* Decimate by 256 : 12-bit resolution */ #define HAL_ADC_DEC_512 0x30 /* Decimate by 512 : 14-bit resolution */ /********************************************************************* * GLOBAL VARIABLES */ byte zclSampleTemperatureSensor_TaskID; uint8 zclSampleTemperatureSensorSeqNum; static byte gPermitDuration = 0x00; /********************************************************************* * GLOBAL FUNCTIONS */ /********************************************************************* * LOCAL VARIABLES */ afAddrType_t zclSampleTemperatureSensor_DstAddr; #ifdef ZCL_EZMODE static void zclSampleTemperatureSensor_ProcessZDOMsgs( zdoIncomingMsg_t *pMsg ); static void zclSampleTemperatureSensor_EZModeCB( zlcEZMode_State_t state, zclEZMode_CBData_t *pData ); static const zclEZMode_RegisterData_t zclSampleTemperatureSensor_RegisterEZModeData = { &zclSampleTemperatureSensor_TaskID, SAMPLETEMPERATURESENSOR_EZMODE_NEXTSTATE_EVT, SAMPLETEMPERATURESENSOR_EZMODE_TIMEOUT_EVT, &zclSampleTemperatureSensorSeqNum, zclSampleTemperatureSensor_EZModeCB }; // NOT ZCL_EZMODE, Use EndDeviceBind #else static cId_t bindingOutClusters[] = { ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT }; #define ZCLSAMPLETEMPERATURESENSOR_BINDINGLIST 1 #endif devStates_t zclSampleTemperatureSensor_NwkState = DEV_INIT; uint8 giTemperatureSensorScreenMode = TEMPSENSE_MAINMODE; // display main screen mode first static uint8 aProcessCmd[] = { 1, 0, 0, 0 }; // used for reset command, { length + cmd0 + cmd1 + data } // Test Endpoint to allow SYS_APP_MSGs static endPointDesc_t sampleTemperatureSensor_TestEp = { 20, // Test endpoint &zclSampleTemperatureSensor_TaskID, (SimpleDescriptionFormat_t *)NULL, // No Simple description for this test endpoint (afNetworkLatencyReq_t)0 // No Network Latency req }; /********************************************************************* * LOCAL FUNCTIONS */ static void zclSampleTemperatureSensor_HandleKeys( byte shift, byte keys ); static void zclSampleTemperatureSensor_BasicResetCB( void ); static void zclSampleTemperatureSensor_IdentifyCB( zclIdentify_t *pCmd ); static void zclSampleTemperatureSensor_IdentifyQueryRspCB( zclIdentifyQueryRsp_t *pRsp ); static void zclSampleTemperatureSensor_ProcessIdentifyTimeChange( void ); static void zclSampleLight_OnOffCB( uint8 cmd ); // app display functions void zclSampleTemperatureSensor_LcdDisplayUpdate(void); void zclSampleTemperatureSensor_LcdDisplayMainMode(void); void zclSampleTemperatureSensor_LcdDisplayTempMode(void); void zclSampleTemperatureSensor_LcdDisplayHelpMode(void); int16 readTemp(void); uint16 readVoltage(void); static void zclSampleTemperatureSensor_SendTemp(void); // Functions to process ZCL Foundation incoming Command/Response messages static void zclSampleTemperatureSensor_ProcessIncomingMsg( zclIncomingMsg_t *msg ); #ifdef ZCL_READ static uint8 zclSampleTemperatureSensor_ProcessInReadRspCmd( zclIncomingMsg_t *pInMsg ); #endif #ifdef ZCL_WRITE static uint8 zclSampleTemperatureSensor_ProcessInWriteRspCmd( zclIncomingMsg_t *pInMsg ); #endif static uint8 zclSampleTemperatureSensor_ProcessInDefaultRspCmd( zclIncomingMsg_t *pInMsg ); #ifdef ZCL_DISCOVER static uint8 zclSampleTemperatureSensor_ProcessInDiscCmdsRspCmd( zclIncomingMsg_t *pInMsg ); static uint8 zclSampleTemperatureSensor_ProcessInDiscAttrsRspCmd( zclIncomingMsg_t *pInMsg ); static uint8 zclSampleTemperatureSensor_ProcessInDiscAttrsExtRspCmd( zclIncomingMsg_t *pInMsg ); #endif // ZCL_DISCOVER /********************************************************************* * STATUS STRINGS */ #ifdef LCD_SUPPORTED const char sClearLine[] = " "; const char sDeviceName[] = " Temp Sensor"; const char sSwTempUp[] = "SW1: Raise Temp"; const char sSwEZMode[] = "SW2: EZ-Mode"; const char sSwTempDown[] = "SW3: Lower Temp"; const char sSwHelp[] = "SW5: Help"; #endif /********************************************************************* * ZCL General Profile Callback table */ static zclGeneral_AppCallbacks_t zclSampleTemperatureSensor_CmdCallbacks = { zclSampleTemperatureSensor_BasicResetCB, // Basic Cluster Reset command zclSampleTemperatureSensor_IdentifyCB, // Identify command #ifdef ZCL_EZMODE NULL, // Identify EZ-Mode Invoke command NULL, // Identify Update Commission State command #endif NULL, // Identify Trigger Effect command zclSampleTemperatureSensor_IdentifyQueryRspCB, // Identify Query Response command zclSampleLight_OnOffCB, // On/Off cluster command NULL, // On/Off cluster enhanced command Off with Effect NULL, // On/Off cluster enhanced command On with Recall Global Scene NULL, // On/Off cluster enhanced command On with Timed Off #ifdef ZCL_LEVEL_CTRL NULL, // Level Control Move to Level command NULL, // Level Control Move command NULL, // Level Control Step command NULL, // Level Control Stop command #endif #ifdef ZCL_GROUPS NULL, // Group Response commands #endif #ifdef ZCL_SCENES NULL, // Scene Store Request command NULL, // Scene Recall Request command NULL, // Scene Response command #endif #ifdef ZCL_ALARMS NULL, // Alarm (Response) commands #endif #ifdef SE_UK_EXT NULL, // Get Event Log command NULL, // Publish Event Log command #endif NULL, // RSSI Location command NULL // RSSI Location Response command }; /********************************************************************* * @fn zclSampleTemperatureSensor_Init * * @brief Initialization function for the zclGeneral layer. * * @param none * * @return none */ void zclSampleTemperatureSensor_Init( byte task_id ) { zclSampleTemperatureSensor_TaskID = task_id; // Set destination address to indirect zclSampleTemperatureSensor_DstAddr.addrMode = (afAddrMode_t)AddrNotPresent; zclSampleTemperatureSensor_DstAddr.endPoint = 0; zclSampleTemperatureSensor_DstAddr.addr.shortAddr = 0; // This app is part of the Home Automation Profile zclHA_Init( &zclSampleTemperatureSensor_SimpleDesc ); // Register the ZCL General Cluster Library callback functions zclGeneral_RegisterCmdCallbacks( SAMPLETEMPERATURESENSOR_ENDPOINT, &zclSampleTemperatureSensor_CmdCallbacks ); // Register the application's attribute list zcl_registerAttrList( SAMPLETEMPERATURESENSOR_ENDPOINT, SAMPLETEMPERATURESENSOR_MAX_ATTRIBUTES, zclSampleTemperatureSensor_Attrs ); // Register the Application to receive the unprocessed Foundation command/response messages zcl_registerForMsg( zclSampleTemperatureSensor_TaskID ); #ifdef ZCL_EZMODE // Register EZ-Mode zcl_RegisterEZMode( &zclSampleTemperatureSensor_RegisterEZModeData ); // Register with the ZDO to receive Match Descriptor Responses ZDO_RegisterForZDOMsg(task_id, Match_Desc_rsp); #endif // Register for all key events - This app will handle all key events RegisterForKeys( zclSampleTemperatureSensor_TaskID ); // Register for a test endpoint afRegister( &sampleTemperatureSensor_TestEp ); #ifdef LCD_SUPPORTED // display the device name HalLcdWriteString( (char *)sDeviceName, HAL_LCD_LINE_3 ); #endif osal_start_timerEx( zclSampleTemperatureSensor_TaskID, SAMPLETEMPERATURESENSOR_TEMP_SEND_EVT, SAMPLETEMPERATURESENSOR_REPORT_INTERVAL ); } /********************************************************************* * @fn zclSample_event_loop * * @brief Event Loop Processor for zclGeneral. * * @param none * * @return none */ uint16 zclSampleTemperatureSensor_event_loop( uint8 task_id, uint16 events ) { afIncomingMSGPacket_t *MSGpkt; (void)task_id; // Intentionally unreferenced parameter if ( events & SYS_EVENT_MSG ) { while ( (MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( zclSampleTemperatureSensor_TaskID )) ) { switch ( MSGpkt->hdr.event ) { #ifdef ZCL_EZMODE case ZDO_CB_MSG: zclSampleTemperatureSensor_ProcessZDOMsgs( (zdoIncomingMsg_t *)MSGpkt ); break; #endif case ZCL_INCOMING_MSG: // Incoming ZCL Foundation command/response messages zclSampleTemperatureSensor_ProcessIncomingMsg( (zclIncomingMsg_t *)MSGpkt ); break; case KEY_CHANGE: zclSampleTemperatureSensor_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys ); break; case ZDO_STATE_CHANGE: zclSampleTemperatureSensor_NwkState = (devStates_t)(MSGpkt->hdr.status); // now on the network if ( (zclSampleTemperatureSensor_NwkState == DEV_ZB_COORD) || (zclSampleTemperatureSensor_NwkState == DEV_ROUTER) || (zclSampleTemperatureSensor_NwkState == DEV_END_DEVICE) ) { #ifndef HOLD_AUTO_START giTemperatureSensorScreenMode = TEMPSENSE_MAINMODE; zclSampleTemperatureSensor_LcdDisplayUpdate(); #endif #ifdef ZCL_EZMODE zcl_EZModeAction( EZMODE_ACTION_NETWORK_STARTED, NULL ); #endif // ZCL_EZMODE //osal_start_timerEx( zclSampleTemperatureSensor_TaskID, SAMPLETEMPERATURESENSOR_ADC, SAMPLETEMPERATURESENSOR_REPORT_INTERVAL ); } break; default: break; } // Release the memory osal_msg_deallocate( (uint8 *)MSGpkt ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } if ( events & SAMPLETEMPERATURESENSOR_IDENTIFY_TIMEOUT_EVT ) { if ( zclSampleTemperatureSensor_IdentifyTime > 0 ) zclSampleTemperatureSensor_IdentifyTime--; zclSampleTemperatureSensor_ProcessIdentifyTimeChange(); return ( events ^ SAMPLETEMPERATURESENSOR_IDENTIFY_TIMEOUT_EVT ); } #ifdef ZCL_EZMODE // going on to next state if ( events & SAMPLETEMPERATURESENSOR_EZMODE_NEXTSTATE_EVT ) { zcl_EZModeAction ( EZMODE_ACTION_PROCESS, NULL ); // going on to next state return ( events ^ SAMPLETEMPERATURESENSOR_EZMODE_NEXTSTATE_EVT ); } // the overall EZMode timer expired, so we timed out if ( events & SAMPLETEMPERATURESENSOR_EZMODE_TIMEOUT_EVT ) { zcl_EZModeAction ( EZMODE_ACTION_TIMED_OUT, NULL ); // EZ-Mode timed out return ( events ^ SAMPLETEMPERATURESENSOR_EZMODE_TIMEOUT_EVT ); } #endif // ZLC_EZMODE if ( events & SAMPLETEMPERATURESENSOR_MAIN_SCREEN_EVT ) { giTemperatureSensorScreenMode = TEMPSENSE_MAINMODE; zclSampleTemperatureSensor_LcdDisplayUpdate(); return ( events ^ SAMPLETEMPERATURESENSOR_MAIN_SCREEN_EVT ); } if ( events & SAMPLETEMPERATURESENSOR_TEMP_SEND_EVT ) { zclSampleTemperatureSensor_MeasuredValue = readTemp(); zclSampleTemperatureSensor_LcdDisplayUpdate(); zclSampleTemperatureSensor_SendTemp(); // report current temperature reading every 10 seconds osal_start_timerEx( zclSampleTemperatureSensor_TaskID, SAMPLETEMPERATURESENSOR_TEMP_SEND_EVT, SAMPLETEMPERATURESENSOR_REPORT_INTERVAL ); return ( events ^ SAMPLETEMPERATURESENSOR_TEMP_SEND_EVT ); } // Discard unknown events return 0; } int16 readTemp(void) { static uint16 voltageAtTemp22; static uint8 bCalibrate=TRUE; // Calibrate the first time the temp sensor is read uint16 value; int8 temp; #if defined (HAL_MCU_CC2530) ATEST = 0x01; TR0 |= 0x01; /* Clear ADC interrupt flag */ ADCIF = 0; ADCCON3 = (HAL_ADC_REF_125V | HAL_ADC_DEC_512 | HAL_ADC_CHN_TEMP); /* Wait for the conversion to finish */ while ( !ADCIF ); /* Get the result */ value = ADCL; value |= ((uint16) ADCH) << 8; // Use the 12 MSB of adcValue value >>= 4; /* * These parameters are typical values and need to be calibrated * See the datasheet for the appropriate chip for more details * also, the math below may not be very accurate */ /* Assume ADC = 1480 at 25C and ADC = 4/C */ #define VOLTAGE_AT_TEMP_25 1480 #define TEMP_COEFFICIENT 4 // Calibrate for 22C the first time the temp sensor is read. // This will assume that the demo is started up in temperature of 22C if(bCalibrate) { voltageAtTemp22=value; bCalibrate=FALSE; } temp = 22 + ( (value - voltageAtTemp22) / TEMP_COEFFICIENT ); // Set 0C as minimum temperature, and 100C as max if( temp >= 100) { return 100*100; } else if (temp <= 0) { return 0; } else { return temp*100; } // Only CC2530 is supported #else return 0; #endif } uint16 readVoltage(void) { #if defined (HAL_MCU_CC2530) uint16 value; // Clear ADC interrupt flag ADCIF = 0; ADCCON3 = (HAL_ADC_REF_125V | HAL_ADC_DEC_128 | HAL_ADC_CHN_VDD3); // Wait for the conversion to finish while ( !ADCIF ); // Get the result value = ADCL; value |= ((uint16) ADCH) << 8; // value now contains measurement of Vdd/3 // 0 indicates 0V and 32767 indicates 1.25V // voltage = (value*3*1.25)/32767 volts // we will multiply by this by 10 to allow units of 0.1 volts value = value >> 6; // divide first by 2^6 value = (uint16)(value * 37.5); value = value >> 9; // ...and later by 2^9...to prevent overflow during multiplication return value*100; #else return 0; #endif // CC2530 } /********************************************************************* * @fn zclSampleTemperatureSensor_HandleKeys * * @brief Handles all key events for this device. * * @param shift - true if in shift/alt. * @param keys - bit field for key events. Valid entries: * HAL_KEY_SW_5 * HAL_KEY_SW_4 * HAL_KEY_SW_3 * HAL_KEY_SW_2 * HAL_KEY_SW_1 * * @return none */ static void zclSampleTemperatureSensor_HandleKeys( byte shift, byte keys ) { if ( keys & HAL_KEY_SW_1 ) { // increase temperature giTemperatureSensorScreenMode = TEMPSENSE_MAINMODE; if ( zclSampleTemperatureSensor_MeasuredValue < zclSampleTemperatureSensor_MaxMeasuredValue ) { zclSampleTemperatureSensor_MeasuredValue = zclSampleTemperatureSensor_MeasuredValue + 100; // considering using whole number value } else if ( zclSampleTemperatureSensor_MeasuredValue >= zclSampleTemperatureSensor_MaxMeasuredValue ) { zclSampleTemperatureSensor_MeasuredValue = zclSampleTemperatureSensor_MaxMeasuredValue; } // Send temperature information zclSampleTemperatureSensor_SendTemp(); } if ( keys & HAL_KEY_SW_2 ) { if ( ( giTemperatureSensorScreenMode == TEMPSENSE_MAINMODE ) || ( giTemperatureSensorScreenMode == TEMPSENSE_HELPMODE ) ) { giTemperatureSensorScreenMode = TEMPSENSE_MAINMODE; #ifdef ZCL_EZMODE zclEZMode_InvokeData_t ezModeData; static uint16 clusterIDs[] = { ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT }; // only bind on the Temperature Measurement cluster // Invoke EZ-Mode ezModeData.endpoint = SAMPLETEMPERATURESENSOR_ENDPOINT; // endpoint on which to invoke EZ-Mode if ( ( zclSampleTemperatureSensor_NwkState == DEV_ZB_COORD ) || ( zclSampleTemperatureSensor_NwkState == DEV_ROUTER ) || ( zclSampleTemperatureSensor_NwkState == DEV_END_DEVICE ) ) { ezModeData.onNetwork = TRUE; // node is already on the network } else { ezModeData.onNetwork = FALSE; // node is not yet on the network } ezModeData.initiator = TRUE; // Temperature Sensor is an initiator ezModeData.numActiveInClusters = 1; ezModeData.pActiveInClusterIDs = clusterIDs; ezModeData.numActiveOutClusters = 0; // active output cluster ezModeData.pActiveOutClusterIDs = NULL; zcl_InvokeEZMode( &ezModeData ); #ifdef LCD_SUPPORTED HalLcdWriteString( "EZMode", HAL_LCD_LINE_2 ); #endif // NOT ZCL_EZMODE, Use EndDeviceBind #else { zAddrType_t dstAddr; dstAddr.addrMode = Addr16Bit; dstAddr.addr.shortAddr = 0; // Coordinator makes the EDB match // Initiate an End Device Bind Request, this bind request will // only use a cluster list that is important to binding. HalLedSet ( HAL_LED_4, HAL_LED_MODE_OFF ); ZDP_EndDeviceBindReq( &dstAddr, NLME_GetShortAddr(), SAMPLETEMPERATURESENSOR_ENDPOINT, ZCL_HA_PROFILE_ID, 0, NULL, ZCLSAMPLETEMPERATURESENSOR_BINDINGLIST, bindingOutClusters, FALSE ); } #endif // ZCL_EZMODE } } if ( keys & HAL_KEY_SW_3 ) { giTemperatureSensorScreenMode = TEMPSENSE_MAINMODE; // decrease the temperature if ( zclSampleTemperatureSensor_MeasuredValue > zclSampleTemperatureSensor_MinMeasuredValue ) { zclSampleTemperatureSensor_MeasuredValue = zclSampleTemperatureSensor_MeasuredValue - 100; // considering using whole number value } else if ( zclSampleTemperatureSensor_MeasuredValue >= zclSampleTemperatureSensor_MinMeasuredValue ) { zclSampleTemperatureSensor_MeasuredValue = zclSampleTemperatureSensor_MinMeasuredValue; } // Send temperature information zclSampleTemperatureSensor_SendTemp(); } if ( keys & HAL_KEY_SW_4 ) { giTemperatureSensorScreenMode = TEMPSENSE_MAINMODE; if ( ( zclSampleTemperatureSensor_NwkState == DEV_ZB_COORD ) || ( zclSampleTemperatureSensor_NwkState == DEV_ROUTER ) ) { // toggle permit join gPermitDuration = gPermitDuration ? 0 : 0xff; NLME_PermitJoiningRequest( gPermitDuration ); } } if ( shift && ( keys & HAL_KEY_SW_5 ) ) { zclSampleTemperatureSensor_BasicResetCB(); } else if ( keys & HAL_KEY_SW_5 ) { if ( giTemperatureSensorScreenMode == TEMPSENSE_MAINMODE ) { giTemperatureSensorScreenMode = TEMPSENSE_HELPMODE; } else if ( giTemperatureSensorScreenMode == TEMPSENSE_HELPMODE ) { #ifdef LCD_SUPPORTED HalLcdWriteString( (char *)sClearLine, HAL_LCD_LINE_2 ); #endif giTemperatureSensorScreenMode = TEMPSENSE_MAINMODE; } } // update display zclSampleTemperatureSensor_LcdDisplayUpdate(); } /********************************************************************* * @fn zclSampleTemperatureSensor_LcdDisplayUpdate * * @brief Called to update the LCD display. * * @param none * * @return none */ void zclSampleTemperatureSensor_LcdDisplayUpdate( void ) { // turn on red LED for temperatures >= 24.00C if ( zclSampleTemperatureSensor_MeasuredValue >= 2400 ) { HalLedSet ( HAL_LED_1, HAL_LED_MODE_OFF ); HalLedSet ( HAL_LED_2, HAL_LED_MODE_ON ); } // turn on green LED for temperatures <= 20.00C else if ( zclSampleTemperatureSensor_MeasuredValue <= 2000 ) { HalLedSet ( HAL_LED_1, HAL_LED_MODE_ON ); HalLedSet ( HAL_LED_2, HAL_LED_MODE_OFF ); } // turn on both red and green LEDs for temperatures between 20.00C and 24.00C else { HalLedSet ( HAL_LED_1, HAL_LED_MODE_ON ); HalLedSet ( HAL_LED_2, HAL_LED_MODE_ON ); } if ( giTemperatureSensorScreenMode == TEMPSENSE_HELPMODE ) { zclSampleTemperatureSensor_LcdDisplayHelpMode(); } else { zclSampleTemperatureSensor_LcdDisplayMainMode(); } } /********************************************************************* * @fn zclSampleTemperatureSensor_LcdDisplayMainMode * * @brief Called to display the main screen on the LCD. * * @param none * * @return none */ void zclSampleTemperatureSensor_LcdDisplayMainMode( void ) { char sDisplayTemp[16]; if ( zclSampleTemperatureSensor_NwkState == DEV_ZB_COORD ) { zclHA_LcdStatusLine1( 0 ); } else if ( zclSampleTemperatureSensor_NwkState == DEV_ROUTER ) { zclHA_LcdStatusLine1( 1 ); } else if ( zclSampleTemperatureSensor_NwkState == DEV_END_DEVICE ) { zclHA_LcdStatusLine1( 2 ); } // display current temperature osal_memcpy(sDisplayTemp, "TEMP: ", 6); _ltoa( ( zclSampleTemperatureSensor_MeasuredValue / 100 ), (void *)(&sDisplayTemp[6]), 10 ); // convert temperature to whole number osal_memcpy( &sDisplayTemp[8], "C", 2 ); #ifdef LCD_SUPPORTED HalLcdWriteString( (char *)sDisplayTemp, HAL_LCD_LINE_2 ); #endif #ifdef LCD_SUPPORTED if ( ( zclSampleTemperatureSensor_NwkState == DEV_ZB_COORD ) || ( zclSampleTemperatureSensor_NwkState == DEV_ROUTER ) ) { // display help key with permit join status if ( gPermitDuration ) { HalLcdWriteString( "SW5: Help *", HAL_LCD_LINE_3 ); } else { HalLcdWriteString( "SW5: Help ", HAL_LCD_LINE_3 ); } } else { // display help key HalLcdWriteString( (char *)sSwHelp, HAL_LCD_LINE_3 ); } #endif } /********************************************************************* * @fn zclSampleTemperatureSensor_LcdDisplayHelpMode * * @brief Called to display the SW options on the LCD. * * @param none * * @return none */ void zclSampleTemperatureSensor_LcdDisplayHelpMode( void ) { #ifdef LCD_SUPPORTED HalLcdWriteString( (char *)sSwTempUp, HAL_LCD_LINE_1 ); HalLcdWriteString( (char *)sSwEZMode, HAL_LCD_LINE_2 ); HalLcdWriteString( (char *)sSwTempDown, HAL_LCD_LINE_3 ); #endif } /********************************************************************* * @fn zclSampleTemperatureSensor_SendTemp * * @brief Called to send current temperature information to the thermostat * * @param none * * @return none */ static void zclSampleTemperatureSensor_SendTemp( void ) { #ifdef ZCL_REPORT zclReportCmd_t *pReportCmd; pReportCmd = osal_mem_alloc( sizeof(zclReportCmd_t) + sizeof(zclReport_t) ); if ( pReportCmd != NULL ) { pReportCmd->numAttr = 1; pReportCmd->attrList[0].attrID = ATTRID_MS_TEMPERATURE_MEASURED_VALUE; pReportCmd->attrList[0].dataType = ZCL_DATATYPE_INT16; pReportCmd->attrList[0].attrData = (void *)(&zclSampleTemperatureSensor_MeasuredValue); zcl_SendReportCmd( SAMPLETEMPERATURESENSOR_ENDPOINT, &zclSampleTemperatureSensor_DstAddr, ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT, pReportCmd, ZCL_FRAME_SERVER_CLIENT_DIR, TRUE, zclSampleTemperatureSensorSeqNum++ ); } osal_mem_free( pReportCmd ); #endif // ZCL_REPORT } /********************************************************************* * @fn zclSampleTemperatureSensor_ProcessIdentifyTimeChange * * @brief Called to process any change to the IdentifyTime attribute. * * @param none * * @return none */ static void zclSampleTemperatureSensor_ProcessIdentifyTimeChange( void ) { if ( zclSampleTemperatureSensor_IdentifyTime > 0 ) { osal_start_timerEx( zclSampleTemperatureSensor_TaskID, SAMPLETEMPERATURESENSOR_IDENTIFY_TIMEOUT_EVT, 1000 ); HalLedBlink ( HAL_LED_4, 0xFF, HAL_LED_DEFAULT_DUTY_CYCLE, HAL_LED_DEFAULT_FLASH_TIME ); } else { if ( zclSampleTemperatureSensor_OnOff ) { HalLedSet ( HAL_LED_4, HAL_LED_MODE_ON ); } else { HalLedSet ( HAL_LED_4, HAL_LED_MODE_OFF ); } osal_stop_timerEx( zclSampleTemperatureSensor_TaskID, SAMPLETEMPERATURESENSOR_IDENTIFY_TIMEOUT_EVT ); } } /********************************************************************* * @fn zclSampleTemperatureSensor_BasicResetCB * * @brief Callback from the ZCL General Cluster Library * to set all the Basic Cluster attributes to default values. * * @param none * * @return none */ static void zclSampleTemperatureSensor_BasicResetCB( void ) { // Put device back to factory default settings zgWriteStartupOptions( ZG_STARTUP_SET, 3 ); // bit set both default configuration and default network // restart device MT_SysCommandProcessing( aProcessCmd ); } /********************************************************************* * @fn zclSampleTemperatureSensor_IdentifyCB * * @brief Callback from the ZCL General Cluster Library when * it received an Identity Command for this application. * * @param srcAddr - source address and endpoint of the response message * @param identifyTime - the number of seconds to identify yourself * * @return none */ static void zclSampleTemperatureSensor_IdentifyCB( zclIdentify_t *pCmd ) { zclSampleTemperatureSensor_IdentifyTime = pCmd->identifyTime; zclSampleTemperatureSensor_ProcessIdentifyTimeChange(); } /********************************************************************* * @fn zclSampleTemperatureSensor_IdentifyQueryRspCB * * @brief Callback from the ZCL General Cluster Library when * it received an Identity Query Response Command for this application. * * @param srcAddr - requestor's address * @param timeout - number of seconds to identify yourself (valid for query response) * * @return none */ static void zclSampleTemperatureSensor_IdentifyQueryRspCB( zclIdentifyQueryRsp_t *pRsp ) { (void)pRsp; #ifdef ZCL_EZMODE { zclEZMode_ActionData_t data; data.pIdentifyQueryRsp = pRsp; zcl_EZModeAction ( EZMODE_ACTION_IDENTIFY_QUERY_RSP, &data ); } #endif } /********************************************************************* * @fn zclSampleLight_OnOffCB * * @brief Callback from the ZCL General Cluster Library when * it received an On/Off Command for this application. * * @param cmd - COMMAND_ON, COMMAND_OFF or COMMAND_TOGGLE * * @return none */ uint8 zclSampleLight_OnOff=LIGHT_OFF; static void zclSampleLight_OnOffCB( uint8 cmd ) { // Turn on the light if ( cmd == COMMAND_ON ) { HalLedSet ( HAL_LED_1, HAL_LED_MODE_ON ); } // Turn off the light else if ( cmd == COMMAND_OFF ) { HalLedSet ( HAL_LED_1, HAL_LED_MODE_OFF ); } // Toggle the light else if ( cmd == COMMAND_TOGGLE ) { if ( zclSampleLight_OnOff == LIGHT_OFF ) { zclSampleLight_OnOff = LIGHT_ON; HalLedSet ( HAL_LED_1, HAL_LED_MODE_ON ); } else { zclSampleLight_OnOff = LIGHT_OFF; HalLedSet ( HAL_LED_1, HAL_LED_MODE_OFF ); } } } /****************************************************************************** * * Functions for processing ZCL Foundation incoming Command/Response messages * *****************************************************************************/ /********************************************************************* * @fn zclSampleTemperatureSensor_ProcessIncomingMsg * * @brief Process ZCL Foundation incoming message * * @param pInMsg - pointer to the received message * * @return none */ static void zclSampleTemperatureSensor_ProcessIncomingMsg( zclIncomingMsg_t *pInMsg) { switch ( pInMsg->zclHdr.commandID ) { #ifdef ZCL_READ case ZCL_CMD_READ_RSP: zclSampleTemperatureSensor_ProcessInReadRspCmd( pInMsg ); break; #endif #ifdef ZCL_WRITE case ZCL_CMD_WRITE_RSP: zclSampleTemperatureSensor_ProcessInWriteRspCmd( pInMsg ); break; #endif #ifdef ZCL_REPORT // See ZCL Test Applicaiton (zcl_testapp.c) for sample code on Attribute Reporting case ZCL_CMD_CONFIG_REPORT: //zclSampleTemperatureSensor_ProcessInConfigReportCmd( pInMsg ); break; case ZCL_CMD_CONFIG_REPORT_RSP: //zclSampleTemperatureSensor_ProcessInConfigReportRspCmd( pInMsg ); break; case ZCL_CMD_READ_REPORT_CFG: //zclSampleTemperatureSensor_ProcessInReadReportCfgCmd( pInMsg ); break; case ZCL_CMD_READ_REPORT_CFG_RSP: //zclSampleTemperatureSensor_ProcessInReadReportCfgRspCmd( pInMsg ); break; case ZCL_CMD_REPORT: //zclSampleTemperatureSensor_ProcessInReportCmd( pInMsg ); break; #endif case ZCL_CMD_DEFAULT_RSP: zclSampleTemperatureSensor_ProcessInDefaultRspCmd( pInMsg ); break; #ifdef ZCL_DISCOVER case ZCL_CMD_DISCOVER_CMDS_RECEIVED_RSP: zclSampleTemperatureSensor_ProcessInDiscCmdsRspCmd( pInMsg ); break; case ZCL_CMD_DISCOVER_CMDS_GEN_RSP: zclSampleTemperatureSensor_ProcessInDiscCmdsRspCmd( pInMsg ); break; case ZCL_CMD_DISCOVER_ATTRS_RSP: zclSampleTemperatureSensor_ProcessInDiscAttrsRspCmd( pInMsg ); break; case ZCL_CMD_DISCOVER_ATTRS_EXT_RSP: zclSampleTemperatureSensor_ProcessInDiscAttrsExtRspCmd( pInMsg ); break; #endif default: break; } if ( pInMsg->attrCmd ) { osal_mem_free( pInMsg->attrCmd ); } } #ifdef ZCL_READ /********************************************************************* * @fn zclSampleTemperatureSensor_ProcessInReadRspCmd * * @brief Process the "Profile" Read Response Command * * @param pInMsg - incoming message to process * * @return none */ static uint8 zclSampleTemperatureSensor_ProcessInReadRspCmd( zclIncomingMsg_t *pInMsg ) { zclReadRspCmd_t *readRspCmd; uint8 i; readRspCmd = (zclReadRspCmd_t *)pInMsg->attrCmd; for ( i = 0; i < readRspCmd->numAttr; i++ ) { // Notify the originator of the results of the original read attributes // attempt and, for each successfull request, the value of the requested // attribute } return ( TRUE ); } #endif // ZCL_READ #ifdef ZCL_WRITE /********************************************************************* * @fn zclSampleTemperatureSensor_ProcessInWriteRspCmd * * @brief Process the "Profile" Write Response Command * * @param pInMsg - incoming message to process * * @return none */ static uint8 zclSampleTemperatureSensor_ProcessInWriteRspCmd( zclIncomingMsg_t *pInMsg ) { zclWriteRspCmd_t *writeRspCmd; uint8 i; writeRspCmd = (zclWriteRspCmd_t *)pInMsg->attrCmd; for ( i = 0; i < writeRspCmd->numAttr; i++ ) { // Notify the device of the results of the its original write attributes // command. } return ( TRUE ); } #endif // ZCL_WRITE /********************************************************************* * @fn zclSampleTemperatureSensor_ProcessInDefaultRspCmd * * @brief Process the "Profile" Default Response Command * * @param pInMsg - incoming message to process * * @return none */ static uint8 zclSampleTemperatureSensor_ProcessInDefaultRspCmd( zclIncomingMsg_t *pInMsg ) { // zclDefaultRspCmd_t *defaultRspCmd = (zclDefaultRspCmd_t *)pInMsg->attrCmd; // Device is notified of the Default Response command. (void)pInMsg; return ( TRUE ); } #ifdef ZCL_DISCOVER /********************************************************************* * @fn zclSampleTemperatureSensor_ProcessInDiscCmdsRspCmd * * @brief Process the Discover Commands Response Command * * @param pInMsg - incoming message to process * * @return none */ static uint8 zclSampleTemperatureSensor_ProcessInDiscCmdsRspCmd( zclIncomingMsg_t *pInMsg ) { zclDiscoverCmdsCmdRsp_t *discoverRspCmd; uint8 i; discoverRspCmd = (zclDiscoverCmdsCmdRsp_t *)pInMsg->attrCmd; for ( i = 0; i < discoverRspCmd->numCmd; i++ ) { // Device is notified of the result of its attribute discovery command. } return ( TRUE ); } /********************************************************************* * @fn zclSampleTemperatureSensor_ProcessInDiscAttrsRspCmd * * @brief Process the "Profile" Discover Attributes Response Command * * @param pInMsg - incoming message to process * * @return none */ static uint8 zclSampleTemperatureSensor_ProcessInDiscAttrsRspCmd( zclIncomingMsg_t *pInMsg ) { zclDiscoverAttrsRspCmd_t *discoverRspCmd; uint8 i; discoverRspCmd = (zclDiscoverAttrsRspCmd_t *)pInMsg->attrCmd; for ( i = 0; i < discoverRspCmd->numAttr; i++ ) { // Device is notified of the result of its attribute discovery command. } return ( TRUE ); } /********************************************************************* * @fn zclSampleTemperatureSensor_ProcessInDiscAttrsExtRspCmd * * @brief Process the "Profile" Discover Attributes Extended Response Command * * @param pInMsg - incoming message to process * * @return none */ static uint8 zclSampleTemperatureSensor_ProcessInDiscAttrsExtRspCmd( zclIncomingMsg_t *pInMsg ) { zclDiscoverAttrsExtRsp_t *discoverRspCmd; uint8 i; discoverRspCmd = (zclDiscoverAttrsExtRsp_t *)pInMsg->attrCmd; for ( i = 0; i < discoverRspCmd->numAttr; i++ ) { // Device is notified of the result of its attribute discovery command. } return ( TRUE ); } #endif // ZCL_DISCOVER #ifdef ZCL_EZMODE /********************************************************************* * @fn zclSampleTemperatureSensor_ProcessZDOMsgs * * @brief Called when this node receives a ZDO/ZDP response. * * @param none * * @return status */ static void zclSampleTemperatureSensor_ProcessZDOMsgs( zdoIncomingMsg_t *pMsg ) { zclEZMode_ActionData_t data; ZDO_MatchDescRsp_t *pMatchDescRsp; // Let EZ-Mode know of the Match Descriptor Response if ( pMsg->clusterID == Match_Desc_rsp ) { pMatchDescRsp = ZDO_ParseEPListRsp( pMsg ); data.pMatchDescRsp = pMatchDescRsp; zcl_EZModeAction( EZMODE_ACTION_MATCH_DESC_RSP, &data ); osal_mem_free( pMatchDescRsp ); } } /********************************************************************* * @fn zclSampleTemperatureSensor_EZModeCB * * @brief The Application is informed of events. This can be used to show on the UI what is * going on during EZ-Mode steering/finding/binding. * * @param state - an * * @return none */ static void zclSampleTemperatureSensor_EZModeCB( zlcEZMode_State_t state, zclEZMode_CBData_t *pData ) { #ifdef LCD_SUPPORTED char szLine[20]; char *pStr; uint8 err; #endif // time to go into identify mode if ( state == EZMODE_STATE_IDENTIFYING ) { zclSampleTemperatureSensor_IdentifyTime = ( EZMODE_TIME / 1000 ); // convert to seconds zclSampleTemperatureSensor_ProcessIdentifyTimeChange(); } // autoclosing, show what happened (success, cancelled, etc...) if( state == EZMODE_STATE_AUTOCLOSE ) { #ifdef LCD_SUPPORTED pStr = NULL; err = pData->sAutoClose.err; if ( err == EZMODE_ERR_SUCCESS ) { pStr = "EZMode: Success"; } else if ( err == EZMODE_ERR_NOMATCH ) { pStr = "EZMode: NoMatch"; // not a match made in heaven } if ( pStr ) { if ( giTemperatureSensorScreenMode == TEMPSENSE_MAINMODE ) { HalLcdWriteString ( pStr, HAL_LCD_LINE_2 ); } } #endif } // finished, either show DstAddr/EP, or nothing (depending on success or not) if( state == EZMODE_STATE_FINISH ) { // turn off identify mode zclSampleTemperatureSensor_IdentifyTime = 0; zclSampleTemperatureSensor_ProcessIdentifyTimeChange(); #ifdef LCD_SUPPORTED // if successful, inform user which nwkaddr/ep we bound to pStr = NULL; err = pData->sFinish.err; if( err == EZMODE_ERR_SUCCESS ) { // "EZDst:1234 EP:34" osal_memcpy( szLine, "EZDst:", 6 ); zclHA_uint16toa( pData->sFinish.nwkaddr, &szLine[6] ); osal_memcpy( &szLine[10], " EP:", 4 ); _ltoa( pData->sFinish.ep, (void *)(&szLine[14]), 16 ); // _ltoa NULL terminates pStr = szLine; } else if ( err == EZMODE_ERR_BAD_PARAMETER ) { pStr = "EZMode: BadParm"; } else if ( err == EZMODE_ERR_CANCELLED ) { pStr = "EZMode: Cancel"; } else { pStr = "EZMode: TimeOut"; } if ( pStr ) { if ( giTemperatureSensorScreenMode == TEMPSENSE_MAINMODE ) { HalLcdWriteString ( pStr, HAL_LCD_LINE_2 ); } } #endif // LCD_SUPPORTED // show main UI screen 3 seconds after joining network osal_start_timerEx( zclSampleTemperatureSensor_TaskID, SAMPLETEMPERATURESENSOR_MAIN_SCREEN_EVT, 3000 ); // report current temperature reading 15 seconds after joinging the network //osal_start_timerEx( zclSampleTemperatureSensor_TaskID, SAMPLETEMPERATURESENSOR_TEMP_SEND_EVT, SAMPLETEMPERATURESENSOR_REPORT_INTERVAL ); } } #endif // ZCL_EZMODE /**************************************************************************** ****************************************************************************/
In this zcl_sampletemperaturesensor.c, I do
1. Implement readTemp() to read temperature using CC2530 internal temperature sensor.
2. Start SAMPLETEMPERATURESENSOR_TEMP_SEND_EVT by calling osal_start_timerEx in zclSampleTemperatureSensor_Init().
3. I use readTemp() to read temperature, assigned to zclSampleTemperatureSensor_MeasuredValue and display it on LCD in SAMPLETEMPERATURESENSOR_TEMP_SEND_EVT event.
i got it sir.
when i am using any print statement in the temperaturesensor.c the output i am not able to view in the output ?
why sir?
There is no printf function in Z-Stack. You can output message to UART by using API HalUARTWrite().
yikai,
actually my work is to build wireless sensor network and i shld detect cloned nodes. can u suggest me hw to do that.
thanks in advance.
in sensor network all the parameters can be copied.
there is an attack named as cloned attack that is more than one node will act as the same node.
In other words , physically two nodes , but logically they act as single node.
so attacker can use the cloned node to get the value been sensed.
let us assume that u have installed a sensor network to sense the temperature . i have created the node with same credentials in what way u have implemented, that is i have a ZED which is also paired with your network. so i am an entity in your network. but u have not created that. this is a type of attack.
sir, i am getting the output of the temperature as only 22 C . or it is changing to 23C. Whether the temperature is read from the environment or from the program it is printed.
Then how to display the voltage in the lcd?
if you are using the sample example given it is just pre written value in the pgm which will increase on press of SW1 to increase upto 27 and when you press SW3 it will decrease till 17 !!!
if u want to send temperature or voltage value u hav to write separate functions for both and call them in thee event sendtemperature
Hi AMUDHA,
You can use the following function to read temperature using CC2530 internal sensor.
nt8 readTemperature(void)
{
static uint16 voltageAtTemp22;
static uint8 bCalibrate=TRUE; // Calibrate the first time the temp sensor is read
uint16 value;
int8 temp;
ATEST = 0x01;
TR0 |= 0x01;
/* Clear ADC interrupt flag */
ADCIF = 0;
ADCCON3 = (HAL_ADC_REF_125V | HAL_ADC_DEC_512 | HAL_ADC_CHN_TEMP);
/* Wait for the conversion to finish */
while ( !ADCIF );
/* Get the result */
value = ADCL;
value |= ((uint16) ADCH) << 8;
// Use the 12 MSB of adcValue
value >>= 4;
/*
* These parameters are typical values and need to be calibrated
* See the datasheet for the appropriate chip for more details
* also, the math below may not be very accurate
*/
/* Assume ADC = 1480 at 25C and ADC = 4/C */
#define VOLTAGE_AT_TEMP_25 1480
#define TEMP_COEFFICIENT 4
// Calibrate for 22C the first time the temp sensor is read.
// This will assume that the demo is started up in temperature of 22C
if(bCalibrate) {
voltageAtTemp22=value;
bCalibrate=FALSE;
}
temp = 22 + ( (value - voltageAtTemp22) / TEMP_COEFFICIENT );
// Set 0C as minimum temperature, and 100C as max
if( temp >= 100)
{
return 100;
}
else if (temp <= 0) {
return 0;
}
else {
return temp;
}
}
sir, this is only i have used.
it is starting with 22c m but the room temperature is 28C but the values in the kit is not at all changing.
Why sir?
it is because the interrnal temp sensor is not so sensitive .. it is you have to keep your hand over it fr sum time to note any change
whether it will not give room temperature dileep
one more doubt dileep how to get the node's address and how to print the values in lcd to our system.
suggest me.
no it will not giv the room temperature it will give the internal temperature of the ic ...
node ADDRESS means what are u meaning mam ??
what do you mean by how to print the values in lcd to our system.
k dileep.
node's 16 bit address i need to display. how it is possible.
there is a function termed as
Use the following functions to get this device’s address, defined in Z-Stack API [2] document:
NLME_GetShortAddr() – returns this device’s 16 bit network address.
NLME_GetExtAddr() – returns this device’s 64 bit extended address.
Use the following functions to get this device’s parent’s addresses, defined in Z-Stack API [2] document. Note that the term “Coord” in these functions does not refer to the ZigBee Coordinator, but instead to the device’s parent (MAC Coordinator):
NLME_GetCoordShortAddr() – returns this device’s parent’s 16 bit short address.
NLME_GetCoordExtAddr() – returns this device’s parent’s 64 bit extended address.
where to use these functions? pls guide me .
Do you want get short address of end device from coordinator or get short address from device itself?
To save resource, I would like to ask you not to post same issue repeatedly.