PROJECT LAB > 소스 합치기

TODAY366 TOTAL2,431,337
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | PROJECT LAB | 키트 | 소스 합치기

페이지 정보

작성자 키트 작성일2017-08-31 11:57 조회2,589회 댓글0건

본문

두개의 소스코드를 합쳐달라는 질문글이 있어서 
소스가 길지 않으니 방법을 간단하게 적어보겠습니다.

// 초음파 소스--------------------------------------------------------------------
#include <mega128.h>
#include <stdio.h>
#include "lcd.h"
//
#define byte unsigned char
//
#define Trigger_1       PORTD|=0x01  //초음파 트리거 PD0
#define Trigger_0       PORTD&=~0x01 //초음파 트리거
#define Echo            (PIND&0x04)//초음파 에코 PD1
//
unsigned int range*0;
// 
void getEcho(void){
  while(!Echo); TCCR1B=2; TCNT1=0;
  while( Echo); TCCR1B=8; range=TCNT1/116; // Cm로 변경
}
//
void main(void){
    byte str[30]="";
    DDRA=0xff; DDRB=0xff; DDRC=0xff; DDRD=1; DDRG=0x0f;
    TCCR1A=0; TCCR1B=8;
    LCD_Init();
    LCD_Clear();
    while(1){
      Trigger_1; delay_us(10); Trigger_0; // 10uS
      getEcho();
      LCD_Init();
      LCD_pos(0,1); sprintf(str,"range=%3dcm",range); LCD_STR(str); 
      if(range<10)PORTB=0; else if(range<50)PORTB=0x9f;
    }
 }

// 블루투스 소스--------------------------------------------------------------------
#include <mega128.h>
#include <delay.h>
//
void TX0_CHAR(char ch){ while(!(UCSR0A&0x20)); UDR0=ch; }
//
void main(void){      
  UBRR0L=103; UCSR0B=8; // 9600 @16MHz
  while(1){
    if(!PINC.0)TX0_CHAR('A'); else TX0_CHAR('B');
    delay_ms(1000);
  }   

//-----------------------------

헤더파일
매크로 전처리
전역변수
서브함수
메인함수
등을 색칠로 구분했습니다.

메인함수 안에서도
무한루프를 기준으로 위 아래의 색을 다르게 칠했습니다.

같은 종류끼리 섞으면 됩니다. 색이 같으니 구분하기 쉽겠죠
더 긴 소스에 짧은 소스를 넣으면 되겠습니다.
초음파 소스가 더 길어서
초음파 소스는 그대로 두고 블루투스 소스를 초음파 소스에 넣겠습니다.

//-----------------------------

// 초음파 소스--------------------------------------------------------------------
#include <mega128.h>
#include <stdio.h>
#include "lcd.h"
// 블루투스 소스--------------------------------------------------------------------
#include <mega128.h>
#include <delay.h>
//
#define byte unsigned char
//
#define Trigger_1       PORTD|=0x01  //초음파 트리거 PD0
#define Trigger_0       PORTD&=~0x01 //초음파 트리거
#define Echo            (PIND&0x04)//초음파 에코 PD1
//
unsigned int range*0;
// 
void getEcho(void){
  while(!Echo); TCCR1B=2; TCNT1=0;
  while( Echo); TCCR1B=8; range=TCNT1/116; // Cm로 변경
}
//
void TX0_CHAR(char ch){ while(!(UCSR0A&0x20)); UDR0=ch; }
//
void main(void){
    byte str[30]="";
    DDRA=0xff; DDRB=0xff; DDRC=0xff; DDRD=1; DDRG=0x0f;
    TCCR1A=0; TCCR1B=8;
    LCD_Init();
    LCD_Clear();
    //
    UBRR0L=103; UCSR0B=8; // 9600 @16MHz
    while(1){
      Trigger_1; delay_us(10); Trigger_0; // 10uS
      getEcho();
      LCD_Init();
      LCD_pos(0,1); sprintf(str,"range=%3dcm",range); LCD_STR(str); 
      if(range<10)PORTB=0; else if(range<50)PORTB=0x9f;
      //
      if(!PINC.0)TX0_CHAR('A'); else TX0_CHAR('B');
      delay_ms(1000);
    }
 }

중복되는 헤더파일은 더 짧은 소스의 헤더파일을 삭제하고
중복되는 변수명은 더 짧은 소스의 변수명을 다른 이름으로 변경합니다.

특히 신경써야 하는 부분은 포트가 중복되지 않는지 체크를 잘 해야합니다.
마찬가지로 특별한 이유가 없다면 짧은 소스의 포트를 변경합니다.

나머지는 동작시키면서 매끄럽지 않은 부분을 처리해주면 됩니다.

//-----------------------------------------------------------------------


// 초음파 소스--------------------------------------------------------------------
// 블루투스 소스--------------------------------------------------------------------
#include <mega128.h>
#include <stdio.h>
#include <delay.h>
#include "lcd.h"
//
#define byte unsigned char
//
#define Trigger_1       PORTD|=0x01  //초음파 트리거 PD0
#define Trigger_0       PORTD&=~0x01 //초음파 트리거
#define Echo            (PIND&0x04)  //초음파 에코 PD1
//
unsigned int range*0;
// 
void getEcho(void){
  while(!Echo); TCCR1B=2; TCNT1=0;
  while( Echo); TCCR1B=8; range=TCNT1/116; // Cm로 변경
}
//
void TX0_CHAR(char ch){ while(!(UCSR0A&0x20)); UDR0=ch; }
//
void main(void){
    byte str[30]="";
    DDRA=0xff; DDRB=0xff; DDRC=0xff; DDRD=1; DDRG=0x0f;
    TCCR1A=0; TCCR1B=8;
    LCD_Init(); LCD_Clear();
    //
    UBRR0L=103; UCSR0B=8; // 9600 @16MHz
    while(1){
      Trigger_1; delay_us(10); Trigger_0; // 10uS
      getEcho();
      LCD_pos(0,1); sprintf(str,"range=%3dcm",range); LCD_STR(str); 
      if(range<10)PORTB=0; else if(range<50)PORTB=0x9f;
      //
      if(!PINC.0)TX0_CHAR('A'); else TX0_CHAR('B');
      delay_ms(1000);
    }
 }

DDRC=0xff;
      if(!PINC.0)TX0_CHAR('A'); else TX0_CHAR('B');
회로도를 첨부하지 않아서 무슨 용도인지 모르겠지만
초음파센서에서는 출력으로 선언하고 있고
블루투스에서는 스위치를 연결하고 있습니다.
수정하세요

댓글 0

조회수 2,589

등록된 댓글이 없습니다.

PROJECT LABHOME > PROJECT LAB > 전체 목록

게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기