123a
456b
789C
*0#D
단순하게 4x4키패드에서 그냥1595누르면 모터 돌아가도록만 하려는데 정말 21시간 버렸네요 ㅜㅜ 너무 답답하네요 ㅠ
최대한 밑에 코드 사용해서 x,y이용해서 만들어보려고 하는데요.. 입력인 행을 인터럽트 4개 사용해서 하는거 같긴한데 도통 제 머리로는 안되네요 ㅜㅜ
쉬울거 같아서 놓지를 못하겠어요 ㅜㅜ
입력인 행따로 D파트 1,2,3,4 자리에 놓아서 ISR 4개 해주고
출력인 열따로 B파트 1,2,3,4 자리에 넣어주고 어떻게든 해보려고하는데 머리로는 알겠는데 코드로 표현을 못하겟네요...
전문가님들 구원해 주시면 진짜 어제 생일 때 받은 네네치킨 스노윙치즈 기프티콘 쏴 드릴게요ㅠㅠ
키패드 푸티 구동
#define F_CPU 16000000
#define COL_OUT PORTB
#define ROW_IN PINB
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include "UART1.h"
FILE OUTPUT \
= FDEV_SETUP_STREAM(UART1_transmit, NULL, _FDEV_SETUP_WRITE);
FILE INPUT \
= FDEV_SETUP_STREAM(NULL, UART1_receive, _FDEV_SETUP_READ);
uint8_t keystate[4][4];
void read_key(void)
{
for(int x=0; x<4; x++){//
COL_OUT |= 0x0F; //
COL_OUT &= ~(0x01 << x);
_delay_ms(10);
uint8_t read = ROW_IN >> 4;
for(int y = 0; y < 4; y++){
if(bit_is_set(read, y)){
keystate[x][y] = 0;
}
else{
keystate[x][y] = 1;
}
}
}
}
void print_key(void)
{
for(int x=0; x<4; x++){
for(int y=0; y <4; y++){
printf("%c ", (keystate[y][x] ? '0' : '.'));
}
printf("\r\n");
}
printf("\r\n\r\n");
}
int main(void)
{
DDRB = 0x0F;
stdout = &OUTPUT;
stdin = &INPUT;
UART1_init();
while(1)
{
read_key();
print_key();
_delay_ms(1000);
}
return 0;
}
서보모터 구동
#define F_CPU 16000000L
#include <avr/io.h>
#include <util/delay.h>
#define ROTATION_DELAY 1000
#define PULSE_MIN 1087
#define PULSE_FIRSTMID 2324
void InitializeTimer3(void)
{
TCCR3A |= (1 << WGM31);
TCCR3B |= (1 << WGM32) | (1 << WGM33);
TCCR3A |= (1 << COM3A1);
TCCR3B |= (1 << CS31);
ICR3 = 39999;
}
int main(void)
{
DDRE |= (1 << PE3);
InitializeTimer3();
while(1)
{
OCR3A = PULSE_MIN;
_delay_ms(ROTATION_DELAY);
OCR3A = PULSE_FIRSTMID;
_delay_ms(ROTATION_DELAY);
}
return 0;
}