联盛德W801做二维雷达

/***************************************************************************** 

* File Name : main.c

* Description: main 

* Copyright (c) 2014 Winner Micro Electronic Design Co., Ltd. 
* All rights reserved. 

* Author : dave

* Date : 2014-6-14
*****************************************************************************/ 
#include "wm_include.h"
#include "wm_timer.h"
#include "math.h"

double get_distance01()
{
    tls_gpio_write(WM_IO_PB_18,0); 
    delay_1us(40);
    tls_gpio_write(WM_IO_PB_18,1); 
    delay_1us(60);
    tls_gpio_write(WM_IO_PB_18,0);
    delay_1us(20);
    int32 count_num=0;
    while(tls_gpio_read(WM_IO_PB_10)==0){;}
    while(tls_gpio_read(WM_IO_PB_10)==1)
    {
        count_num+=1;
    }
    double distance = count_num*0.17/16;
    return distance;
}

double get_distance02()
{
    tls_gpio_write(WM_IO_PB_17,0); 
    delay_1us(40);
    tls_gpio_write(WM_IO_PB_17,1); 
    delay_1us(60);
    tls_gpio_write(WM_IO_PB_17,0);
    delay_1us(20);
    int32 count_num=0;
    while(tls_gpio_read(WM_IO_PB_14)==0){;}
    while(tls_gpio_read(WM_IO_PB_14)==1)
    {
        count_num+=1;
    }
    double distance = count_num*0.17/16;
    return distance;
}


int32 get_angle(int a, int b)
{
    double r = sqrt(2*(a*a+b*b)-144)/2;
    double angle_para = acos((36+r*r-a*a)/(12*r))*170/3.14159265;
    int32 angle_theta=round(angle_para);
    return angle_theta;
}

int32 get_rotate()
{
    int16 i;
    int16 j;
    int32 angle;
    int32 angles[5]={0,0,0,0,0};
    int16 count[5]={0,0,0,0,0};
    for(i=0;i<10;i++)
    {
        double a = get_distance01();
        delay_1us(200000);
        double b = get_distance02();
        delay_1us(200000);
        angle=get_angle(a, b);
        printf("%f %f %d \n", a, b,angle);
        for(j=0;j<5;j++)
        {
            if(angles[j]==angle)
            {
                count[j]+=1;
                break;
            }
            else if(angles[j]==0)
            {
                angles[j]=angle;
                break;
            }
        }
    }
    j=0;
    for(i=0;i<5;i++)
    {
        if(count[j]<count[i])j=i;
    }
    printf("%d \n", angles[j]);
    return angles[j];
}

void sg90_rotate(int32 angle)
{
    int32 freq_para=80000;
    int16 turn_para=6000+(angle*8000)/180;
    int16 i;
    for(i=0;i<60;i++)
    {
        tls_gpio_write(WM_IO_PB_25,0);
        delay_1us(freq_para-turn_para);
        tls_gpio_write(WM_IO_PB_25,1);
        delay_1us(turn_para);
    }
    tls_gpio_write(WM_IO_PB_25,0);
}

void UserMain(void)
{
    printf("\n user task \n");
    
    tls_gpio_cfg(WM_IO_PB_25,WM_GPIO_DIR_OUTPUT,WM_GPIO_ATTR_PULLLOW);
    tls_gpio_cfg(WM_IO_PB_18,WM_GPIO_DIR_OUTPUT,WM_GPIO_ATTR_PULLLOW);
    tls_gpio_cfg(WM_IO_PB_17,WM_GPIO_DIR_OUTPUT,WM_GPIO_ATTR_PULLLOW);
    tls_gpio_cfg(WM_IO_PB_10,WM_GPIO_DIR_INPUT,WM_GPIO_ATTR_PULLLOW);
    tls_gpio_cfg(WM_IO_PB_14,WM_GPIO_DIR_INPUT,WM_GPIO_ATTR_PULLLOW);
    tls_gpio_cfg(WM_IO_PB_09,WM_GPIO_DIR_OUTPUT,WM_GPIO_ATTR_PULLLOW);
    //*
    while(1)
    {
        sg90_rotate(90-get_rotate());
        tls_gpio_write(WM_IO_PB_09,1);
        delay_1us(4000000);
        tls_gpio_write(WM_IO_PB_09,0);
    }

#if DEMO_CONSOLE
    CreateDemoTask();
#endif
}

这就是主程序代码

调用-m math.h库方法(联盛德W801):

联盛德W801系列8-编译链接时找不到标准数学库函数的解决方法-优快云博客

CDK配置参考上述链接,配好保存代码后重启应用,再重启电脑后重新打开。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值