?>

Hard Copy World

HCW

Q&A

Home > Forum >

Q&A

tiva c 4 1294xl 이랑 초음파센서 HC-SR04 사용법알려주세요

페이지 정보

작성자 tivac1294 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일16-06-12 21:48 조회1,103회 댓글0건

본문

tiva c 4 1294xl 이랑 초음파센서 HC-SR04 사용법알려주세요  

코드는 어느정도 주변에서 잇길래 받앗는데 완전 초보라 잘못하겟습니다 

도와주세요 

#include <stdint.h>

#include <stdbool.h>

#include "inc/hw_memmap.h"

#include "inc/hw_types.h"

#include "inc/hw_ints.h"

#include "driverlib/debug.h"

#include "driverlib/fpu.h"

#include "driverlib/gpio.h"

#include "driverlib/pin_map.h"

#include "driverlib/rom.h"

#include "driverlib/rom_map.h"

#include "driverlib/sysctl.h"

#include "driverlib/gpio.h"

#include "driverlib/uart.h"

#include "driverlib/i2c.h"

#include "utils/uartstdio.h"

#ifdef DEBUG

void

__error__(char *pcFilename, uint32_t ui32Line)

{

}

#endif

void ConfigureUART(void)

{

    //

    // Enable the GPIO Peripheral used by the UART.

    //

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

    //

    // Enable UART0

    //

    SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);

    //

    // Configure GPIO Pins for UART mode.

    //

    GPIOPinConfigure(GPIO_PA0_U0RX);

    GPIOPinConfigure(GPIO_PA1_U0TX);


   GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);

    //

    // Use the internal 16MHz oscillator as the UART clock source.

    //

    UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC);

    //

    // Initialize the UART for console I/O.

    //

  //  UARTStdioConfig(0, 115200, 16000000);
    UARTStdioConfig(0, 115200, 25000000);

}

void DelaySoft(volatile unsigned long ulDelay) {

    SysCtlDelay((SysCtlClockGet() / 10000) * ulDelay);

}

#define    SLAVE_ADDRESS    0xE0 / 2

void ChangeAddress(int old, int new) {

    I2CMasterSlaveAddrSet(I2C1_BASE, old, false);

    I2CMasterDataPut(I2C1_BASE, 0x00);

    I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_START);

    while (I2CMasterBusy(I2C1_BASE)) {

    }

    I2CMasterDataPut(I2C1_BASE, 0xA0);

   I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH);

    while (I2CMasterBusy(I2C1_BASE)) {

    }

    //SysCtlDelay(SysCtlClockGet() / 1000000 * 2);

    I2CMasterDataPut(I2C1_BASE, 0x00);

    I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_START);

    while (I2CMasterBusy(I2C1_BASE)) {

    }

    I2CMasterDataPut(I2C1_BASE, 0xAA);

    I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH);

    while (I2CMasterBusy(I2C1_BASE)) {

    }

    //SysCtlDelay(SysCtlClockGet() / 1000000 * 2);

    I2CMasterDataPut(I2C1_BASE, 0x00);

    I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_START);

    while (I2CMasterBusy(I2C1_BASE)) {

    }

   I2CMasterDataPut(I2C1_BASE, 0xA5);

   I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH);

    while (I2CMasterBusy(I2C1_BASE)) {

    }

    //SysCtlDelay(SysCtlClockGet() / 1000000 * 2);

    I2CMasterDataPut(I2C1_BASE, 0x00);

    I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_START);

    while (I2CMasterBusy(I2C1_BASE)) {

    }

    I2CMasterDataPut(I2C1_BASE, new);

    I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH);

    while (I2CMasterBusy(I2C1_BASE)) {

    }

}

int getI2CValue(int ADDR) {

    uint32_t rcv1 = 0;

    uint32_t rcv2 = 0;

    uint32_t rcv = 0;

    I2CMasterSlaveAddrSet(I2C1_BASE, ADDR, false);

    I2CMasterDataPut(I2C1_BASE, 0x00);

    I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_START);

    while (I2CMasterBusy(I2C1_BASE)) {

    }

   I2CMasterDataPut(I2C1_BASE, 0x51);

    I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH);

    while (I2CMasterBusy(I2C1_BASE)) {

    }

    SysCtlDelay(SysCtlClockGet() / 1000000 * 2);

    I2CMasterDataPut(I2C1_BASE, 0x02);

   I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_START);

    while (I2CMasterBusy(I2C1_BASE)) {

    }

    I2CMasterDataPut(I2C1_BASE, 93);

    I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH);

    while (I2CMasterBusy(I2C1_BASE)) {

    }

    DelaySoft(115);

    I2CMasterSlaveAddrSet(I2C1_BASE, ADDR, false);

    I2CMasterDataPut(I2C1_BASE, 0x02);

   I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_START);

    while (I2CMasterBusy(I2C1_BASE)) {

    }

   I2CMasterSlaveAddrSet(I2C1_BASE, ADDR, true);

    I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE);

    while (I2CMasterBusy(I2C1_BASE)) {

    }

    rcv1 =I2CMasterDataGet(I2C1_BASE);

    rcv = rcv1 << 8;

    SysCtlDelay(SysCtlClockGet() / 1000000 * 2);

    I2CMasterSlaveAddrSet(I2C1_BASE, ADDR, false);

    I2CMasterDataPut(I2C1_BASE, 0x03);

    I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_START);

    while (I2CMasterBusy(I2C1_BASE)) {

    }

    I2CMasterSlaveAddrSet(I2C1_BASE, ADDR, true);

    I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE);

    while (I2CMasterBusy(I2C1_BASE)) {

    }

    rcv2 = I2CMasterDataGet(I2C1_BASE);

    rcv += rcv2;

    //ROM_I2CMasterSlaveAddrSet(I2C0_BASE, SLAVE_ADDRESS, true);

    //ROM_I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE);

    //rcv = ROM_I2CMasterDataGet(I2C0_BASE);

    while (I2CMasterBusy(I2C1_BASE)) {

    }

    //DelaySoft(500);

    DelaySoft(300);

    return rcv;

}

int main(void) {

    //volatile uint32_t ui32Loop;

    uint32_t var1, var2;

    //

    // Enable lazy stacking for interrupt handlers.  This allows floating-point

    // instructions to be used within interrupt handlers, but at the expense of

    // extra stack usage.

    //

    FPULazyStackingEnable();

    //

    // Set the clocking to run directly from the crystal.

    //

    SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ |

    SYSCTL_OSC_MAIN);

    //

    // Enable the GPIO port that is used for the on-board LED.

    //

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C1);

    GPIOPinConfigure(GPIO_PG0_I2C1SCL);

    GPIOPinConfigure(GPIO_PG1_I2C1SDA);

 //  GPIOPinTypeI2CSCL(GPIO_PORTA_BASE, GPIO_PIN_6);

   // GPIOPinTypeI2C(GPIO_PORTA_BASE, GPIO_PIN_7);

    GPIOPinTypeI2CSCL(GPIO_PORTG_BASE, GPIO_PIN_0);

      GPIOPinTypeI2C(GPIO_PORTG_BASE, GPIO_PIN_1);


    I2CMasterInitExpClk(I2C1_BASE, SysCtlClockGet(), false);

    I2CMasterSlaveAddrSet(I2C1_BASE, SLAVE_ADDRESS, false);

    I2CMasterEnable(I2C1_BASE);

 ConfigureUART();

 //I2C Slave의 주소를 바꿀 때 사용합니다.

 //이 때, ChangeAddress의 첫 번째 인자는 원래 주소, 두 번째 인자는 바꾸기를 원하는 주소를 입력합니다.

 //단, 첫 번째 인자의 경우 7비트로 전송해야 하므로 원래 주소 / 2 를 하여 전송하고

 //두 번째 인자의 경우 변경하기 원하는 주소를 그대로 입력해줍니다.

    //ChangeAddress(0xE0 / 2, 0xE2);

    //

    // We are finished.  Hang around doing nothing.

    //

    while (1) {

        //I2C를 통해 SRF10 초음파 거리측정 센서와 통신하여 거리를 측정합니다.

             //getI2CValue() 함수 사용시 인자는 측정을 원하는 센서의 주소를 입력합니다.

             //단, 7비트로 전송해야 하므로 원래주소 / 2 를 하여 전송합니다.

        var1 = getI2CValue(0xE0 / 2);

        var2 = getI2CValue(0xE2 / 2);

        UARTprintf("LEFT : %5d, RIGHT : %5d\r", var1, var2);

    }

}
 

댓글목록

등록된 댓글이 없습니다.