⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wildfire_send.c

📁 MANTIS是由科罗拉多大学开发的传感器网络嵌入式操作系统。 这是mantis的0.9.5版本的源码。
💻 C
字号:
//  This file is part of MANTIS OS, Operating System//  See http://mantis.cs.colorado.edu/////  Copyright (C) 2003,2004,2005 University of Colorado, Boulder////  This program is free software; you can redistribute it and/or//  modify it under the terms of the mos license (see file LICENSE)#include <inttypes.h>#include "mos.h"#include "led.h"#include "dev.h"#include "com.h"#include "msched.h"#include "printf.h"#include "clock.h"#include "adc.h"#include "avr-adc.h"#include "mica2-light-temp.h"#include "wildfire.h"#include "net.h"#include "mst.h"uint16_t wind_ticks;uint16_t wind_speed;mos_alarm_t wind_timer;uint32_t wind_timer_s = 1;uint32_t wind_timer_us = 0000;static comBuf sendBuf;void send_thread ();void wind_timer_callback();void start (void){  uint16_t myaddr = mos_node_id_get();    net_init();  mst_proto_init();  printf("\n\n my addr: %d\n", myaddr);    net_ioctl(MST_PROTO_ID, SET_ADDR, (uint8_t)myaddr);  net_ioctl(MST_PROTO_ID, SET_DTB, 20);    wind_timer.func = wind_timer_callback;    mos_alarm (&wind_timer, wind_timer_s, wind_timer_us);  mos_thread_new (send_thread, 128, PRIORITY_NORMAL);}void init_devs(){   HUMIDITY_DIRE |= HUMIDITY_MASK;   WIND_DIR_DIRE |= WIND_DIR_MASK;   WIND_SPEED_DIRE |= WIND_SPEED_MASK;}void humidity_on() { HUMIDITY_PORT |=  HUMIDITY_MASK; }void humidity_off(){ HUMIDITY_PORT &= ~HUMIDITY_MASK; }void wind_dir_on() { WIND_DIR_PORT |=  WIND_DIR_MASK; }void wind_dir_off(){ WIND_DIR_PORT &= ~WIND_DIR_MASK; }void init_wind_speed(){   //power wind speed    WIND_SPEED_PORT |= WIND_SPEED_MASK;   handle_t ints = mos_disable_ints();   //enable int0 in external int. mask   EIMSK |= (1 << 0);   //set PORTD PIN0 to input   DDRD &= ~(1 << 0);   //set intterrupt to fire on falling edge   EICRA |= (1 << ISC01);   EICRA &= ~(1 << ISC00);      mos_enable_ints(ints);}uint16_t convert_direction(uint16_t sample){  return (uint16_t)(((float)sample)/(1024) * 360);}uint16_t convert_temp(uint16_t sample){  uint16_t ret;  ret = pgm_read_byte(&temps_vals[sample]);  return ret; }uint16_t convert_humidity(uint16_t sample){  return sample; }void send_thread (){  wildfire_packet_t *packet;  uint16_t sample;  uint8_t reset_header;    init_devs();  init_wind_speed();  packet = (wildfire_packet_t *)&(sendBuf.data[0]);    reset_header=0;    while(1) {    if(((reset_header++) % 15) == 0){      printf("temp\ttemp_c\thmdty\thmdty_c\tw_dir\tw_dir_c\tw_speed\n");      reset_header = 1;    }        //light, not used    //dev_read(DEV_MICA2_LIGHT, &sample, sizeof(sample));    //printf("%d\t", sample);    //temp    dev_read(DEV_MICA2_TEMP, &sample, sizeof(sample));    packet->temp = sample;    packet->temp_c = convert_temp(sample);        //humidity    humidity_on();    mos_mdelay(200); //1 second settling time    //    dev_open(DEV_ADC);    dev_ioctl(DEV_ADC, ADC_SET_CHANNEL, AVR_ADC_CH_2);    dev_read(DEV_ADC, &sample, sizeof(sample));    packet->humidity = sample;    packet->humidity_c = convert_humidity(sample);    //dev_close(DEV_ADC);    humidity_off();        //wind direction    wind_dir_on();    //dev_open(DEV_ADC);    dev_ioctl(DEV_ADC, ADC_SET_CHANNEL, AVR_ADC_CH_1);    dev_read(DEV_ADC, &sample, sizeof(sample));    //dev_close(DEV_ADC);    wind_dir_off();    packet->wind_direction = sample;    packet->wind_direction_c = convert_direction(sample);        //wind speed    packet->wind_speed = wind_speed;        //printf("temp\ttemp_c\thmdty\thmdty_c\tw_dir\tw_dir_c\tw_speed\n");    printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\n",	   packet->temp,	   packet->temp_c,	   packet->humidity,	   	   packet->humidity_c,	   packet->wind_direction,	   packet->wind_direction_c,	   packet->wind_speed);        sendBuf.size = sizeof(wildfire_packet_t);    net_send(&sendBuf, MST_PROTO_ID, 20, true, MST_DATA, 0);    mos_led_toggle(0);    mos_thread_sleep(2000);  }}void wind_timer_callback(){  wind_speed = wind_ticks;  wind_ticks = 0;  mos_alarm (&wind_timer, wind_timer_s, wind_timer_us);}SIGNAL (SIG_INTERRUPT0){   wind_ticks++;   mos_led_toggle(2);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -