Esempio n. 1
0
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));	
}
Esempio n. 2
0
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 */
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
/*---------------------------------------------------------------------------*/
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");
}
Esempio n. 6
0
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);
}
Esempio n. 7
0
File: proto.c Progetto: dtbinh/ev3-c
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);
}