static void read_co2(char* buf){ static uint32_t co2_1000; co2_1000=sensor_value(0);//valore misurato x 1000 sprintf(buf,"%d",((co2_1000*2500)/4095)); }
int test_sensor(int s) { if ((0 > s) || (s >= SENSOR_COUNT)) return 0; return !TESTBIT(sensor_value(), s); }
unsigned char * var_sensors_table(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method) { int index; struct sensor sensor; struct sensordev sdev; static u_long ulong_ret; static unsigned char str[BUFSIZ]; sensor_refresh(); if (num_sensors == 0) return (NULL); if (header_simple_table(vp, name, length, exact, var_len, write_method, num_sensors) == MATCH_FAILED) return (NULL); index = name[*length-1]-1; if (sensor_get(index, &sdev, &sensor)) return (NULL); switch (vp->magic) { case SENS_INDEX: ulong_ret = name[*length-1]; return (unsigned char *) &ulong_ret; case SENS_DESCR: sensor_desc(index, &sensor, str, BUFSIZ); *var_len = strlen(str); return (unsigned char *) str; case SENS_TYPE: ulong_ret = sensor.type; return (unsigned char *) &ulong_ret; case SENS_DEVICE: if ((*var_len = strlcpy(str, sdev.xname, BUFSIZ)) != strlen(sdev.xname)) return (NULL); return (unsigned char *) str; case SENS_VALUE: sensor_value(&sensor, str); *var_len = strlen(str); return (unsigned char *) str; case SENS_UNITS: sensor_units(&sensor, str); *var_len = strlen(str); return (unsigned char *) str; case SENS_STATUS: ulong_ret = sensor.status; return (unsigned char *) &ulong_ret; default: return (NULL); } /* NOTREACHED */ }
static void read_co(char *buf){ static uint32_t sens_1000; co=sensor_value(0); sens_1000 = 122850/co; // ho moltiplicato per 1000 if (sens_1000>800) sprintf(buf,"%d",100); else if (sens_1000>500) sprintf(buf,"%lu", (uint32_t)((-300*sens_1000)+250000)/1000); else sprintf(buf, "%lu",(uint32_t)(-3600*sens_1000+1900000)/1000); }
/*---------------------------------------------------------------------------*/ void motion_resource_periodic_handler(resource_t *r) { static int event_counter; char buffer[16]; PRINTF("*** motion_resource_periodic_handler(): called!\n"); int value = 4095-sensor_value(0); PRINTF("%d", value); sprintf(buffer, "%d", value); coap_packet_t notification[1]; coap_init_message(notification, COAP_TYPE_NON, REST.status.OK, 0); coap_set_payload(notification, buffer, strlen(buffer)+1); REST.notify_subscribers(r, event_counter++, notification); PRINTF("*** motion_resource_periodic_handler(): done\n"); }
void motion_resource_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) { int8_t length; uint8_t method = REST.get_method_type(request); if(method & METHOD_GET) { sprintf(buffer, "%d", sensor_value(0)); length = strlen(buffer)+1; REST.set_header_content_type(response, REST.type.APPLICATION_JSON); REST.set_header_etag(response, (uint8_t *) &length, 1); REST.set_response_status(response, REST.status.OK); REST.set_response_payload(response, buffer, length); } else REST.set_response_status(response, REST.status.BAD_REQUEST); }
int main( int argc, char **argv ) { char buf[ 256 ]; uint8_t val; if ( !ev3_connect()) return ( 1 ); tacho_start( OUT_ALL, 20 ); sleep_msec( 2000 ); tacho_stop( OUT_ALL ); sleep_msec( 100 ); if ( sensor_name( IN_1, buf )) printf( "IN_1 '%s'\n", buf ); sleep_msec( 100 ); if ( sensor_value( IN_1, &val )) printf( "IN_1 value = %d\n", val ); ev3_tcp_disconnect(); return ( 0 ); }
void next_sensor() { byte i; byte present = 0; byte type_s; byte data[12]; byte addr[8]; long key = 0; if ( !ds.search(addr)) { Serial.println("No more addresses."); next_sensor_frame(); ds.reset_search(); delay(250); return; } if (OneWire::crc8(addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); return; } for(i=0; i<4; i++){ key = (key << 8) + addr[i]; } // the first ROM byte indicates which chip switch (addr[0]) { case 0x10: // Chip = DS18S20 type_s = 1; break; case 0x28: // Chip = DS18B20 type_s = 0; break; case 0x22: // Chip = DS1822 type_s = 0; break; default: // Device is not a DS18x20 family device return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); // start conversion, with parasite power on at the end delay(1000); // maybe 750ms is enough, maybe not // we might do a ds.depower() here, but the reset will take care of it. present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad for ( i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); } // Convert the data to actual temperature // because the result is a 16 bit signed integer, it should // be stored to an "int16_t" type, which is always 16 bits // even when compiled on a 32 bit processor. int16_t raw = (data[1] << 8) | data[0]; if (type_s) { raw = raw << 3; // 9 bit resolution default if (data[7] == 0x10) { // "count remain" gives full 12 bit resolution raw = (raw & 0xFFF0) + 12 - data[6]; } } else { byte cfg = (data[4] & 0x60); // at lower res, the low bits are undefined, so let's zero them if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms //// default is 12 bit resolution, 750 ms conversion time } sensor_value(key, raw); }