[求助] 传感器采集

小欧阳   2018-8-16 20:40 楼主
  我现在在用无线龙的cc2530的底板拓展心率传感器信息的采集以及组网这一部分。可是我们遇到了一个问题。在ADC采集时,原先代码通过电压值范围判断是哪个传感器,我不知道心率传感器范围?进而不知道怎么采集心率信息。我们卡在这很久了,求指导,万分感谢!!!

  1. 无线龙原始i/o代码
  2. --------------------------------------------------------
  3. //Initialization I/O for sensor
  4. // IO口初始化
  5. //--------------------------------------------------------
  6. void InitSensorIO(void)
  7. {
  8.         INT8U Value;
  9.        
  10.         IO_DIR_PORT_PIN1(2, 0, IO_OUT);//VCC_33 电源开关
  11.        
  12.         P2_0 = 1;//打开VCC_33 电源
  13.        
  14.         IO_DIR_PORT_PIN1(0, 4, IO_IN);//电池电压测试
  15.         P0INP |= 0x10;
  16.         
  17.         ugOled9616int();
  18.        
  19.         IO_DIR_PORT_PIN1(0, 5, IO_IN);//SEL1
  20.         IO_DIR_PORT_PIN1(0, 7, IO_IN);//SEL2
  21.         
  22.         Value = ReadSensorAdc(5);//采集SEL电压
  23.         
  24.         if(P0_7 == 0)//SEL2 = 0
  25.         {
  26.                 if((Value>0x01) && (Value<0x07))//红外测距
  27.                 {
  28.                         SensorNum = 24;
  29.                 }
  30.                 if((Value>0x06) && (Value<0x11))//点阵屏
  31.                 {
  32.                         SensorNum = 1;
  33.                 }
  34.                 else if((Value>0x10) && (Value<0x1B))//4位数码管
  35.                 {
  36.                         SensorNum = 2;
  37.                 }
  38.                 else if((Value>0x1A) && (Value<0x26))//高精温湿度传感器
  39.                 {
  40.                         SensorNum = 3;
  41.                 }
  42.                 else if((Value>0x25) && (Value<0x31))//普通温度、光敏、蜂鸣器
  43.                 {
  44.                         SensorNum = 4;
  45.                 }
  46.                 else if((Value>0x30) && (Value<0x3C))//压力传感器
  47.                 {
  48.                         SensorNum = 5;
  49.                 }
  50.                 else if((Value>0x3B) && (Value<0x4A))//继电器
  51.                 {
  52.                         SensorNum = 6;
  53.                 }
  54.                 else if((Value>0x49) && (Value<0x56))//雨滴传感器
  55.                 {
  56.                         SensorNum = 7;
  57.                 }
  58.                 else if((Value>0x55) && (Value<0x59))//红外传感器
  59.                 {
  60.                         SensorNum = 8;
  61.                 }
  62.                 else if((Value>0x58) && (Value<0x6A))//振动传感器
  63.                 {
  64.                         SensorNum = 9;
  65.                 }
  66.                 else if((Value>0x69) && (Value<0x70))//加速度传感器
  67.                 {
  68.                         SensorNum = 10;
  69.                 }
  70.                 else if((Value>0x6F) && (Value<0x7A))//电表传感器
  71.                 {
  72.                         SensorNum = 21;
  73.                 }
  74.                
  75.         }
  76.         else//SEL2 = 1
  77.         {
  78.                 if((Value>0x5) && (Value<0x11))//可燃气体传感器
  79.                 {
  80.                         SensorNum = 11;
  81.                 }
  82.                 else if((Value>0x10) && (Value<0x1B))//DAC输出传感器板
  83.                 {
  84.                         SensorNum = 12;
  85.                 }
  86.                 else if((Value>0x1A) && (Value<0x26))//红外温度传感器
  87.                 {
  88.                         SensorNum = 13;
  89.                 }
  90.                 else if((Value>0x25) && (Value<0x31))//超声波传感器
  91.                 {
  92.                         SensorNum = 14;
  93.                 }
  94.                 else if((Value>0x30) && (Value<0x3C))//电机模块
  95.                 {
  96.                         SensorNum = 15;
  97.                 }
  98.                 else if((Value>0x3B) && (Value<0x4A))//霍尔传感器
  99.                 {
  100.                         SensorNum = 16;
  101.                 }
  102.                 else if((Value>0x49) && (Value<0x56))//高亮LED控制
  103.                 {
  104.                         SensorNum = 17;
  105.                 }
  106.                 else if((Value>0x55) && (Value<0x59))//火焰传感器
  107.                 {
  108.                         SensorNum = 18;
  109.                 }
  110.                 else if((Value>0x58) && (Value<0x6A))//玻璃破碎传感器
  111.                 {
  112.                         SensorNum = 19;
  113.                 }
  114.                 else if((Value>0x69) && (Value<0x70))//门磁传感器
  115.                 {
  116.                         SensorNum = 22;
  117.                 }
  118.                 else if((Value>0x6F) && (Value<0x7A))//红外转发传感器
  119.                 {
  120.                         SensorNum = 20;
  121.                 }
  122.                
  123.         }
  124.         
  125.         switch(SensorNum)
  126.         {
  127.                 case 1://点阵屏
  128.                         IO_DIR_PORT_PIN1(1, 4, IO_OUT);//DT_595
  129.                         IO_DIR_PORT_PIN1(1, 5, IO_OUT);//LT_595
  130.                         IO_DIR_PORT_PIN1(1, 7, IO_OUT);//SCK_595
  131.                        
  132.                         P1_4 = 0;
  133.                         P1_5 = 0;
  134.                         P1_7 = 0;
  135.                        
  136.                         Write595(0X00);
  137.                         Write595(0xff);
  138.                         P1_5 = 1;
  139.                         P1_5 = 0;//重启时无显示
  140.                         LcdPutString16_8(0, 0,  (void*)"   LED8*8   ", 12 , 1);
  141.                 break;
  142.                
  143.                 case 2://数码管
  144.                         IO_DIR_PORT_PIN1(1, 4, IO_OUT);//DT_595
  145.                         IO_DIR_PORT_PIN1(1, 5, IO_OUT);//LT_595
  146.                         IO_DIR_PORT_PIN1(1, 7, IO_OUT);//SCK_595
  147.                         P1_4 = 0;
  148.                         P1_5 = 0;
  149.                         P1_7 = 0;
  150.                        
  151.                         IO_DIR_PORT_PIN1(0, 0, IO_OUT);//WM0
  152.                         IO_DIR_PORT_PIN1(0, 1, IO_OUT);//WM1
  153.                         IO_DIR_PORT_PIN1(0, 2, IO_OUT);//WM2
  154.                         IO_DIR_PORT_PIN1(0, 3, IO_OUT);//WM3
  155.                        
  156.                         P0 &= 0xf0;
  157.                        
  158.                         LEDDISPFUN();
  159.                         
  160.                         LcdPutString16_8(0, 0,  (void*)"   LED*4    ", 12 , 1);
  161.                 break;
  162.                
  163.                 case 3://高精温湿度传感器
  164.                
  165.                         SHT1X_INT();
  166.                   
  167.                         LcdPutString16_8(0, 0,  (void*)"  Humidity  ", 12 , 1);
  168.                
  169.                 break;
  170.                
  171.                 case 4://普通温度、光敏、蜂鸣器
  172.                         IO_DIR_PORT_PIN1(1, 6, IO_OUT);//BEEP
  173.                         P1_6 = 1;//OFF
  174.                        
  175.                         IO_DIR_PORT_PIN1(1, 4, IO_OUT);//CS_TC77
  176.                         IO_DIR_PORT_PIN1(1, 5, IO_OUT);//SCK_TC77
  177.                         IO_DIR_PORT_PIN1(1, 7, IO_IN);//DAT_TC77
  178.                        
  179.                         IO_DIR_PORT_PIN1(0, 1, IO_IN);//Lingt
  180.                         P0INP |= 0x02;
  181.                                                
  182.                         CS_TC77 = 1;
  183.                        
  184.                         LcdPutString16_8(0, 0,  (void*)" Temp/Light ", 12 , 1);
  185.                 break;
  186.                
  187.                 case 5://压力传感器
  188.                         IO_DIR_PORT_PIN1(0, 0, IO_IN);//Pressure
  189.                         P0INP |= 0x01;
  190.                        
  191.                         LcdPutString16_8(0, 0,  (void*)"  Pressure  ", 12 , 1);
  192.                 break;
  193.                
  194.                 case 6://继电器
  195.                         IO_DIR_PORT_PIN1(1, 4, IO_OUT);//K1
  196.                         IO_DIR_PORT_PIN1(1, 5, IO_OUT);//K2
  197.                        
  198.                         P1_4 = 0;
  199.                         P1_5 = 0;
  200.                        
  201.                         LcdPutString16_8(0, 0,  (void*)"   Relay    ", 12 , 1);
  202.                 break;
  203.                
  204.                 case 7://雨滴传感器
  205.                         IO_DIR_PORT_PIN1(0, 0, IO_IN);//Raindrop
  206.                         P0INP |= 0x01;
  207.                        
  208.                         LcdPutString16_8(0, 0,  (void*)"  Raindrop  ", 12 , 1);
  209.                        
  210.                 break;
  211.                
  212.                 case 8://红外传感器
  213.                         IO_DIR_PORT_PIN1(0, 0, IO_IN);//Infrared
  214.                        
  215.                         LcdPutString16_8(0, 0,  (void*)"  Infrared  ", 12 , 1);
  216.                 break;
  217.                
  218.                 case 9://振动传感器
  219.                         IO_DIR_PORT_PIN1(1, 4, IO_OUT);//BEEP
  220.                
  221.                         IO_DIR_PORT_PIN1(0, 0, IO_IN);//Shake
  222.                        
  223.                         PICTL |= 0x08;        //Port 0, inputs 3 to 0 interrupt enable.
  224.                         PICTL |= 0x01;        //Falling edge on input gives interrupt
  225.                                                        
  226.                         P0IEN |= 0x01;//Port 0, inputs 0 interrupt enable.
  227.                        
  228.                         IEN1 |= 0x20;        //Port 0 interrupt enable
  229.                        
  230.                         P0IFG &= 0xfe; //Clear any pending interrupts               
  231.                        
  232.                         LcdPutString16_8(0, 0,  (void*)"   Shake    ", 12 , 1);
  233.                        
  234.                 break;
  235.                
  236.                 case 10://加速度传感器
  237.                         IO_DIR_PORT_PIN1(0, 0, IO_IN);//X-Acceler
  238.                         IO_DIR_PORT_PIN1(0, 1, IO_IN);//Y-Acceler
  239.                         IO_DIR_PORT_PIN1(0, 4, IO_IN);//Z-Acceler
  240.                         P0INP |= 0x13;
  241.                        
  242.                         IO_DIR_PORT_PIN1(1, 4, IO_OUT);//SLEEP
  243.                         IO_DIR_PORT_PIN1(1, 5, IO_OUT);//G-SEL
  244.                        
  245.                         P1_4 = 1;//No Sleep
  246.                         P1_5 = 0;//G-sel=1.5g
  247.                        
  248.                         LcdPutString16_8(0, 0,  (void*)"Acceleration", 12 , 1);
  249.                 break;
  250.                
  251.                 case 11://可燃气体传感器
  252.                         IO_DIR_PORT_PIN1(0, 0, IO_IN);//ADC IN
  253.                         P0INP |= 0x01;
  254.                        
  255.                         IO_DIR_PORT_PIN1(1, 4, IO_OUT);//SLEEP
  256.                        
  257.                         P1_4 = 1;//打开可燃气体电源
  258.                        
  259.                         LcdPutString16_8(0, 0,  (void*)"     Gas    ", 12 , 1);
  260.                 break;
  261.                
  262.                 case 12://DAC
  263.                         HalUARTInit();//初始化串口
  264.                        
  265.                         LcdPutString16_8(0, 0,  (void*)"   DAC-OUT  ", 12 , 1);
  266.                 break;
  267.                
  268.                 case 13://红外测温传感器
  269.                         IO_DIR_PORT_PIN1(1, 7, IO_IN);//DRDY IN
  270.                
  271.                         LcdPutString16_8(0, 0,  (void*)"   TMP006   ", 12 , 1);
  272.                 break;
  273.                
  274.                 case 14://超声波传感器
  275.                         IO_DIR_PORT_PIN1(0, 0, IO_IN);//ECHO IN
  276.                
  277.                         IO_DIR_PORT_PIN1(1, 4, IO_OUT);//TRIG OUT
  278.                         P1_4 = 0;
  279.                
  280.                         LcdPutString16_8(0, 0,  (void*)" Ultrasonic ", 12 , 1);
  281.                 break;
  282.                
  283.                 case 15://电机模块
  284.                        
  285.                         HalUARTInit();//初始化串口
  286.                        
  287.                         LcdPutString16_8(0, 0,  (void*)"    Motor   ", 12 , 1);
  288.                 break;
  289.                
  290.                 case 16://霍尔传感器
  291.                         IO_DIR_PORT_PIN1(0, 0, IO_IN);
  292.                   
  293.                         LcdPutString16_8(0, 0,  (void*)"     Hall   ", 12 , 1);
  294.                 break;
  295.                
  296.                 case 17://高亮LED控制
  297.                         Timer34int();
  298.                         PERCFG |= 0x20;//Timer3管脚关联
  299.                         P1SEL |= 0x40;
  300.                         P1DIR |= 0x40;
  301.                         P1_6 = 0;
  302.                         //ChangT3Cmp0Val(250);
  303.                   
  304.                         LcdPutString16_8(0, 0,  (void*)"  LED-LIGHT ", 12 , 1);
  305.                 break;
  306.                
  307.                 case 18://火焰传感器
  308.                         IO_DIR_PORT_PIN1(0, 0, IO_IN);
  309.                   
  310.                         LcdPutString16_8(0, 0,  (void*)"    FLAME   ", 12 , 1);
  311.                 break;
  312.                
  313.                 case 19://玻璃破碎传感器
  314.                         IO_DIR_PORT_PIN1(1, 7, IO_OUT);
  315.                         IO_DIR_PORT_PIN1(0, 0, IO_IN);
  316.                         
  317.                         P1_7 = 1;
  318.                   
  319.                         LcdPutString16_8(0, 0,  (void*)"    GLASS   ", 12 , 1);
  320.                 break;
  321.                
  322.                 case 20://红外转发传感器
  323.                         HalUARTInit();//初始化串口
  324.                        
  325.                         LcdPutString16_8(0, 0,  (void*)"   Remote   ", 12 , 1);
  326.                 break;
  327.                
  328.                 case 21://电表传感器
  329.                         IO_DIR_PORT_PIN1(0, 0, IO_OUT);
  330.                         P0_0 = 0;
  331.                         ParitySet = 1; //校验标致位置1
  332.                         HalUARTInit();//初始化串口
  333.                        
  334.                        
  335.                         LcdPutString16_8(0, 0,  (void*)"  Ammeter  ", 12 , 1);
  336.                 break;
  337.                
  338.                  case 22://门磁传感器
  339.                         IO_DIR_PORT_PIN1(0, 0, IO_IN);
  340.                        
  341.                         LcdPutString16_8(0, 0,  (void*)" Magnetism ", 12 , 1);
  342.                 break;
  343.                
  344.                 case 24://红外测距传感器
  345.                         IO_DIR_PORT_PIN1(0, 0, IO_IN);
  346.                        
  347.                         LcdPutString16_8(0, 0,  (void*)"DistanceTest", 12 , 1);
  348.                 break;
  349.                
  350.                 default:
  351.                         LcdPutString16_8(0, 0,  (void*)" No Sensor  ", 12 , 1);
  352.                 break;
  353.         }
  354. }

  355. //----------------------------------------------------------
  356. //Read Sensor ADC value
  357. //读取AD值
  358. //输入:通道名
  359. //返回:8位AD值
  360. //----------------------------------------------------------
  361. INT8U ReadSensorAdc(INT8U channel)
  362. {
  363.         INT8U temp;
  364.         temp = HalAdcRead(channel,HAL_ADC_RESOLUTION_8);
  365.         return temp;
  366. }



回复评论 (11)

看一下原来的原理图
点赞  2018-8-16 21:03
啥板子啊,这么多的传感器?
点赞  2018-8-17 08:21
引用: littleshrimp 发表于 2018-8-16 21:03
看一下原来的原理图

是底板的吗
点赞  2018-8-17 09:08
引用: dwdsp 发表于 2018-8-17 08:21
啥板子啊,这么多的传感器?

无线龙综合实例代码上改的
点赞  2018-8-17 09:09
这是底板和2530的原理图
点赞  2018-8-17 09:18
SEL1和SEL2对应的哪2个GPIO
"Value = ReadSensorAdc(5);//采集SEL电压"对应ccxxxx哪个引脚的电压?
虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2018-8-17 09:28
引用: littleshrimp 发表于 2018-8-17 09:28
SEL1和SEL2对应的哪2个GPIO
"Value = ReadSensorAdc(5);//采集SEL电压"对应ccxxxx哪个引脚的电压?

sel1 和sel2分别是p0_5和p0_7
采集p0_5应该是这样的

  1. #define IO_DIR_PORT_PIN1(port, pin, dir)  \
  2.    do {                                  \
  3.       if (dir == IO_OUT)                 \
  4.          P##port##DIR |= (0x01<<(pin));  \
  5.       else                               \
  6.          P##port##DIR &= ~(0x01<<(pin)); \
  7.    }while(0)

  8. // Where port={0,1,2}, pin={0,..,7} and dir is one of:


点赞  2018-8-17 09:55
引用: 小欧阳 发表于 2018-8-17 09:55
sel1 和sel2分别是p0_5和p0_7
采集p0_5应该是这样的

P05和P07连接到U11-A处,再没看到其它电路
虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2018-8-17 11:08
没看原理图,但是我猜测是不同的传感器上装了不同的分压电阻,所以会产生不同的识别电压而已。这个需要软件和传感器模块配合。
点赞  2018-8-17 14:50
原先代码通过电压值范围判断是哪个传感器-------这个ADC口应该只是用于识别与底板相连的是哪个模块而已吧?你要新增加一个不在官方列表中的心率模块,可以考虑接到另一个ADC口,按照心率模块的说明去编算法就可以了。
点赞  2018-8-17 14:57
引用: topwon 发表于 2018-8-17 14:57
原先代码通过电压值范围判断是哪个传感器-------这个ADC口应该只是用于识别与底板相连的是哪个模块而已吧? ...

怎样去添加一个ADC口
点赞  2018-8-17 15:59
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复