Home automation using Xbee radios
Dependencies: EthernetNetIf HTTPServer RPCInterface mbed C12832_lcd
main.cpp@4:6091cb494e73, 2013-11-28 (annotated)
- Committer:
- hpham33
- Date:
- Thu Nov 28 21:40:10 2013 +0000
- Revision:
- 4:6091cb494e73
- Parent:
- 3:c4bec8e7cc07
- Child:
- 5:ae3cbcf75d78
add case in which node doesnot exit in the list
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
chrisisthefish | 0:c498b8bcfc46 | 1 | #include "mbed.h" |
chrisisthefish | 0:c498b8bcfc46 | 2 | |
hpham33 | 2:9503a713b648 | 3 | DigitalIn pb(p8); |
hpham33 | 2:9503a713b648 | 4 | |
hpham33 | 2:9503a713b648 | 5 | |
hpham33 | 2:9503a713b648 | 6 | |
hpham33 | 2:9503a713b648 | 7 | struct xbee { // radio prototype with addresss, location, pointer to sensor list |
hpham33 | 2:9503a713b648 | 8 | unsigned int addrHigh; // upper 16 bits address of sensor |
hpham33 | 2:9503a713b648 | 9 | unsigned int addrLow; // lower address of sensor |
hpham33 | 2:9503a713b648 | 10 | unsigned short digitalData; |
hpham33 | 2:9503a713b648 | 11 | unsigned short digitalDataOutput; |
hpham33 | 2:9503a713b648 | 12 | int digitalType[10]; |
hpham33 | 2:9503a713b648 | 13 | float analogData[4]; |
hpham33 | 2:9503a713b648 | 14 | int analogType[4]; |
hpham33 | 2:9503a713b648 | 15 | struct xbee * next; // pointer to next struct |
hpham33 | 2:9503a713b648 | 16 | }; |
hpham33 | 2:9503a713b648 | 17 | |
hpham33 | 2:9503a713b648 | 18 | struct xbee* addnode(struct xbee*,unsigned int,unsigned int ); |
hpham33 | 2:9503a713b648 | 19 | int getDigitalValue(int , short ); |
hpham33 | 2:9503a713b648 | 20 | void digitalInputHandle(struct xbee* ,unsigned int , unsigned int , unsigned short ); |
hpham33 | 2:9503a713b648 | 21 | void analogInputHandle(struct xbee* ,unsigned int , unsigned int , int , float ); |
chrisisthefish | 0:c498b8bcfc46 | 22 | |
chrisisthefish | 0:c498b8bcfc46 | 23 | int main() { |
hpham33 | 2:9503a713b648 | 24 | /* This won't change, or we would lose the list in memory */ |
hpham33 | 2:9503a713b648 | 25 | struct xbee *root; |
hpham33 | 2:9503a713b648 | 26 | root->next = NULL; |
hpham33 | 2:9503a713b648 | 27 | /* The node root points to has its next pointer equal to a null pointer |
hpham33 | 2:9503a713b648 | 28 | set */ |
hpham33 | 2:9503a713b648 | 29 | struct xbee* xbee1; |
hpham33 | 2:9503a713b648 | 30 | struct xbee* xbee2; |
hpham33 | 2:9503a713b648 | 31 | struct xbee* xbee3; |
hpham33 | 2:9503a713b648 | 32 | |
hpham33 | 2:9503a713b648 | 33 | xbee1 = addnode(root,0,1); |
hpham33 | 2:9503a713b648 | 34 | xbee2 = addnode(root,0,2); |
hpham33 | 2:9503a713b648 | 35 | xbee3 = addnode(root,0,3); |
hpham33 | 2:9503a713b648 | 36 | } |
hpham33 | 2:9503a713b648 | 37 | |
hpham33 | 2:9503a713b648 | 38 | struct xbee* addnode(struct xbee* root,unsigned int addrhigh,unsigned int addrlow){ |
hpham33 | 2:9503a713b648 | 39 | |
hpham33 | 2:9503a713b648 | 40 | struct xbee* node; |
hpham33 | 2:9503a713b648 | 41 | node = root; |
hpham33 | 2:9503a713b648 | 42 | |
hpham33 | 2:9503a713b648 | 43 | if ( node != 0 ) { |
hpham33 | 2:9503a713b648 | 44 | while ( node->next != 0) |
hpham33 | 2:9503a713b648 | 45 | { |
hpham33 | 2:9503a713b648 | 46 | node = node->next; |
hpham33 | 2:9503a713b648 | 47 | } |
chrisisthefish | 0:c498b8bcfc46 | 48 | } |
hpham33 | 2:9503a713b648 | 49 | node = (struct xbee *) malloc( sizeof(struct xbee) ); |
hpham33 | 2:9503a713b648 | 50 | node->next = NULL; |
hpham33 | 2:9503a713b648 | 51 | node->addrHigh =addrhigh; |
hpham33 | 2:9503a713b648 | 52 | node->addrLow =addrlow; |
hpham33 | 2:9503a713b648 | 53 | return node; |
chrisisthefish | 0:c498b8bcfc46 | 54 | } |
hpham33 | 2:9503a713b648 | 55 | int getDigitalValue(int i, short pins){ |
hpham33 | 2:9503a713b648 | 56 | return ((pins>>i)&1); |
hpham33 | 2:9503a713b648 | 57 | } |
hpham33 | 2:9503a713b648 | 58 | float analogInputFormat(float data, int type){ |
hpham33 | 2:9503a713b648 | 59 | switch (type){ |
hpham33 | 2:9503a713b648 | 60 | case 1: |
hpham33 | 2:9503a713b648 | 61 | data = data; |
hpham33 | 2:9503a713b648 | 62 | break; |
hpham33 | 2:9503a713b648 | 63 | case 2: |
hpham33 | 2:9503a713b648 | 64 | data = data; |
hpham33 | 2:9503a713b648 | 65 | break; |
hpham33 | 2:9503a713b648 | 66 | case 3: |
hpham33 | 2:9503a713b648 | 67 | data = data; |
hpham33 | 2:9503a713b648 | 68 | break; |
hpham33 | 2:9503a713b648 | 69 | default: |
hpham33 | 2:9503a713b648 | 70 | data = data; |
hpham33 | 2:9503a713b648 | 71 | break; |
hpham33 | 2:9503a713b648 | 72 | } |
hpham33 | 2:9503a713b648 | 73 | return(data); |
hpham33 | 2:9503a713b648 | 74 | } |
hpham33 | 2:9503a713b648 | 75 | |
hpham33 | 2:9503a713b648 | 76 | void digitalInputHandle(struct xbee* root,unsigned int addrhigh, unsigned int addrlow, unsigned short data){ |
hpham33 | 2:9503a713b648 | 77 | struct xbee* node; |
hpham33 | 2:9503a713b648 | 78 | node = root; |
hpham33 | 2:9503a713b648 | 79 | |
hpham33 | 2:9503a713b648 | 80 | if ( node != 0 ) { |
hpham33 | 2:9503a713b648 | 81 | while ( node->addrHigh != addrhigh) |
hpham33 | 2:9503a713b648 | 82 | { |
hpham33 | 2:9503a713b648 | 83 | node = node->next; |
hpham33 | 3:c4bec8e7cc07 | 84 | } |
hpham33 | 3:c4bec8e7cc07 | 85 | while(node->addrLow !=addrlow){ |
hpham33 | 2:9503a713b648 | 86 | node = node->next; |
hpham33 | 2:9503a713b648 | 87 | } |
hpham33 | 2:9503a713b648 | 88 | } |
hpham33 | 4:6091cb494e73 | 89 | else { |
hpham33 | 4:6091cb494e73 | 90 | printf("There is no node in the list"); |
hpham33 | 4:6091cb494e73 | 91 | } |
hpham33 | 4:6091cb494e73 | 92 | if(node !=0){ |
hpham33 | 2:9503a713b648 | 93 | node->digitalData = data; |
hpham33 | 4:6091cb494e73 | 94 | } |
hpham33 | 4:6091cb494e73 | 95 | else{ |
hpham33 | 4:6091cb494e73 | 96 | printf("Node is not in the list"); |
hpham33 | 4:6091cb494e73 | 97 | } |
hpham33 | 2:9503a713b648 | 98 | } |
hpham33 | 2:9503a713b648 | 99 | void analogInputHandle(struct xbee* root,unsigned int addrhigh, unsigned int addrlow, int index, float data){ |
hpham33 | 2:9503a713b648 | 100 | struct xbee* node; |
hpham33 | 2:9503a713b648 | 101 | node = root; |
hpham33 | 2:9503a713b648 | 102 | |
hpham33 | 2:9503a713b648 | 103 | if ( node != 0 ) { |
hpham33 | 2:9503a713b648 | 104 | while ( node->addrHigh != addrhigh) |
hpham33 | 2:9503a713b648 | 105 | { |
hpham33 | 2:9503a713b648 | 106 | node = node->next; |
hpham33 | 3:c4bec8e7cc07 | 107 | } |
hpham33 | 2:9503a713b648 | 108 | while(node->addrLow !=addrlow){ |
hpham33 | 2:9503a713b648 | 109 | node = node->next; |
hpham33 | 2:9503a713b648 | 110 | } |
hpham33 | 4:6091cb494e73 | 111 | }else { |
hpham33 | 4:6091cb494e73 | 112 | printf("There is no node in the list"); |
hpham33 | 2:9503a713b648 | 113 | } |
hpham33 | 4:6091cb494e73 | 114 | if(node !=0){ |
hpham33 | 2:9503a713b648 | 115 | node->analogData[index] = data; |
hpham33 | 4:6091cb494e73 | 116 | } |
hpham33 | 4:6091cb494e73 | 117 | else{ |
hpham33 | 4:6091cb494e73 | 118 | printf("Node is not in the list"); |
hpham33 | 4:6091cb494e73 | 119 | } |
hpham33 | 2:9503a713b648 | 120 | } |