3 #include <system_def.h>
10 // OBJECT INTERFACE VARIABLES
12 unsigned int oi_cid_temp;
14 unsigned int oi_cid_hum;
15 unsigned int oi_period;
17 // OBJECT INTERFACE FUNCTIONS
18 int oi_cid_temp_wrfnc(ULOI_PARAM_coninfo void *context){
19 uloi_uint_wrfnc(ULOI_ARG_coninfo &oi_cid_temp);
23 int oi_cid_hum_wrfnc(ULOI_PARAM_coninfo void *context){
24 uloi_uint_wrfnc(ULOI_ARG_coninfo &oi_cid_hum);
28 int oi_period_wrfnc(ULOI_PARAM_coninfo void *context){
29 uloi_uint_wrfnc(ULOI_ARG_coninfo context);
37 static const int MAX_CID_CNT = 3;
38 cid_data_t cids[MAX_CID_CNT];
41 cids[cid_cnt].cid = HEART_CID;
42 cids[cid_cnt].value = status_val;
46 cids[cid_cnt].cid = oi_cid_temp;
47 cids[cid_cnt].value = oi_temperature;
51 cids[cid_cnt].cid = oi_cid_hum;
52 cids[cid_cnt].value = oi_humidity;
60 for (i=0; i<=CNT; i++) read_ADC(&adcst);
63 uchar buf[cid_cnt * 6 + 3];
64 for (buff_len = 0; buff_len < 3; buff_len++) buf[buff_len] = 0;
66 for(i=0; i<cid_cnt; i++) {
67 int2buf(buf + buff_len, cids[i].cid);
69 int2buf(buf + buff_len, 2);
71 int2buf(buf + buff_len, cids[i].value);
75 msgsend = ul_send_query(ul_fd, 0, UL_CMD_PDO, UL_BFL_NORE, (void*) buf, buff_len);
82 // oi_temperature = 25;
83 // // printf("temperature: %i\n",adcst.temp);
85 // // printf("humidity: %i\n",adcst.hum);
89 oi_temperature = adcst.temp;
90 printf("temperature: %i\n",adcst.temp);
91 oi_humidity = adcst.hum;
92 printf("humidity: %i\n",adcst.hum);
102 void check_PDO(int cid, int data){}
103 void regulate(void){}
105 void work_with(void){
107 led1_time = current_time();
108 led2_time = current_time();
111 // adcst.temp_tmp = 0;
113 // adcst.hum_tmp = 0;
116 time = current_time();
122 if((current_time()-time) > 1000){
123 printf("AD0.1 %i\n", adcst.temp);
124 // printf("AD0.2 %i\n", adcst.hum);
125 time = current_time();
130 void init_ADC (int selected){
131 PINSEL1|= 0x05000000; // P0.28 and P0.29 set for AD0.1 and AD0.2 inputs
132 AD0CR &= 0x00000000; // Clear All Bit Control
134 case 1: AD0CR |= 0x00000002; // Select ADC = AIN1, CLKDive => Pclk/(x+1)< 4.5Mhz
136 case 2: AD0CR |= 0x00000004; // Select ADC = AIN2
139 AD0CR |= 0x0000FF00; // ADC Clock = VBP(PCLK) / 7 1.55us
140 AD0CR &= 0xFFF1FFFF; // CLKS 11 ciclos de reloj Res Máx
141 AD0CR |= 0x00200000; // PDN = 1 = Active ADC Module
142 // AD0CR |= 0x00010000; // Burst = 1 = Continuing conversion
143 // AD0CR &= 0xFF3FFFFF; // TEST[1:0] = 00 = Modo normal
144 // AD0CR &= 0xF7FFFFFF; // EDGE = 0 = Flanco de bajada
145 // AD0STAT = 0x00000110;
148 int read_ADC (adc_stat_t *adcst){
150 AD0CR |= 0x01000000; // start conversion
151 while (!(AD0GDR & (ADGDR_DONE))); // wait for DONE to go high
153 adcst->read = AD0DR1; // get ADC data
154 adcst->read = ((adcst->read >>6) & 0x03FF); // extraction of result
155 adcst->temp_tmp += adcst->read;
158 AD0CR |= 0x01000000; // start conversion
159 while (!(AD0GDR & (ADGDR_DONE))); // wait for DONE to go high
161 adcst->read = AD0DR2;
162 adcst->read = ((adcst->read >>6) & 0x03FF); // extraction of result
163 adcst->hum_tmp += adcst->read;
166 if (adcst->cnt == CNT){
168 adcst->temp = adcst->temp_tmp/CNT;
169 adcst->hum = adcst->hum_tmp/CNT;