BASIC4MCU | 질문게시판 | 답변 : atmega128코드로 변환 부탁드립니다!
페이지 정보
작성자 master 작성일2019-06-10 15:47 조회8,757회 댓글2건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=9307
작성일
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2019-06-10 오후 3:32:59// by Ok-Hyun Park//// 아두이노 uno to atmega128//#define F_CPU 16000000UL#include <avr/io.h>#include <avr/interrupt.h>#include <util/delay.h>#include <stdio.h>//int mq3Pin=A0; // MQ-3 센서핀을 아두이노 보드의 A0 핀으로 설정int redPin=4; // LED 센서의 R 핀을 아두이노 보드의 7번 핀으로 설정int yelloPin=3; // LED 센서의 Y 핀을 아두이노 보드의 6번 핀으로 설정int greenPin=2; // LED 센서의 R 핀을 아두이노 보드의 5번 핀으로 설정int boozer=5; // 부저//int main(){Serial.begin(9600); // 아두이노 보드와 PC간의 통신속도 설정pinMode(4,OUTPUT); // LED의 R,Y,G 핀을 출력으로 설정pinMode(3,OUTPUT);pinMode(2,OUTPUT);while(1){Serial.println(analogRead(mq3Pin)); // MQ-3 센서 출력값을 시리얼 모니터로 출력int val=analogRead(mq3Pin);if(val>=180){ // 센서 값이 180 이상이면tone(5,3000);digitalWrite(4,HIGH); digitalWrite(3,LOW); digitalWrite(2,LOW); // 빨간색 LED_delay_ms(500);}else if(val>=80&&val<180){ // 센서 값이 80 이상,180 미만이면tone(5,300);digitalWrite(4,LOW); digitalWrite(3,HIGH); digitalWrite(2,LOW); // 노란색 LED_delay_ms(500);}else if(val<80){ // 센서 값이 80 미만 이면noTone(5);digitalWrite(4,LOW); digitalWrite(3,LOW); digitalWrite(2,HIGH); // 초록색 LED_delay_ms(500);}}}셋업함수와 루프 함수를 main 함수로 합치는 것은 위처럼 합니다.
딜레이 함수 이름을 AVRstudio에 맞게 변경했습니다.
아직도 갈길이 멉니다.
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2019-06-10 오후 3:54:51// by Ok-Hyun Park//// 아두이노 uno to atmega128//#define F_CPU 16000000UL#include <avr/io.h>#include <avr/interrupt.h>#include <util/delay.h>#include <stdio.h>//char RX0_char(){ while(!(UCSR0A&0x80)); return UDR0; }void TX0_char(char c){ while(!(UCSR0A&0x20)); UDR0=c; }void TX0_STR(char *s){ while(*s)TX0_char(*s++); }//void tone(int t){ OCR1A=t; TCCR1B=9; }void noTone() { OCR1A=0xFFFF; TCCR1B=0; }//int main(){int i; char str[50];DDRA=0x07; // LED R,Y,G // R(PA2), Y(PA1), G(PA0)DDRB=0x20; //포트 B.5 펄스출력TCCR1A=0x40; TCCR1C=0x80; OCR1A=0;ADMUX=0x40; ADCSRA=0xE7; // MQ3(PF0)UCSR0B=0x18; UBRR0L=103; // 9600while(1){_delay_ms(500);i=ADC; // i=ADCW; 에러나면 ADC대신 ADCW로 변경(AVRstudio 버전에 따라서 다름)sprintf(str,"%d\r\n",i); TX0_STR(str); // MQ-3 센서 출력값을 시리얼 모니터로 출력//if(i>=180){ // 180~1023tone(2701); // 3000HzPORTA=4; // 빨간색 LED}else if(i>=80){ // 80~180tone(27240); // 300HzPORTA=2; // 노란색 LED}else{ // 0~80noTone(); // OFFPORTA=1; // 초록색 LED}}}
댓글 2
조회수 8,757욱2님의 댓글
욱2 작성일
선생님 좋은 답변 감사합니다.
그런데 변경해주신 코드로 실행해본 결과 피에조 부저가 계속 소리나는데..
해결 방안좀 알려주세요!
master님의 댓글
master
sprintf(str,"%d\r\n",i); TX0_STR(str); // MQ-3 센서 출력값을 시리얼 모니터로 출력
센서값이 얼마인지 체크 해보세요