질문게시판 > 정수선언에 대해 문의 드립니다

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

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


BASIC4MCU | 질문게시판 | 정수선언에 대해 문의 드립니다

페이지 정보

작성자 지니아빠 작성일2019-07-17 00:05 조회201회 댓글6건

본문

	

정수형 함수를 콜할때 

int형은 16비트로 32768 까지 처리되고

long형은 32비트로 2147483648까지 처리되네요

 

많은 보턴으로 키값을 받아오는데 int형은 보턴 16개 long형은 32개까지만 들어오고

나머지는 처리가(보턴을 눌러도 무반응) 되지 않습니다

 

33번째 보턴부터는 어떻게 처리되야 하나요

 

아래는 소스일부분입니다

 

#include "MIDIUSB.h"
#define NUMBER_OF_SHIFT_CHIPS   5
#define DATA_WIDTH   NUMBER_OF_SHIFT_CHIPS * 8
#define PULSE_WIDTH_USEC   5
#define POLL_DELAY_MSEC   1


#define BYTES_VAL_T unsigned int     //여기서 선언되어야하는데
#define BYTES_VAL_X unsigned long  //      "

 

int ploadPin        = 3;  // Connects to Parallel load pin the 165
int clockEnablePin  = 5;  // Connects to Clock Enable pin the 165
int dataPin         = 7; // Connects to the Q7 pin the 165
int clockPin        = 9; // Connects to the Clock pin the 165

 

BYTES_VAL_X pinValues;
BYTES_VAL_X oldPinValues;

 

BYTES_VAL_X read_shift_regs()      //현재는 long으로 잡았습니다
{

    long bitVal = 0;
    BYTES_VAL_X  bytesVal = 0;

 

    digitalWrite(clockEnablePin, HIGH);
    digitalWrite(ploadPin, LOW);
    delayMicroseconds(PULSE_WIDTH_USEC);
    digitalWrite(ploadPin, HIGH);
    digitalWrite(clockEnablePin, LOW);

 

    for(int i = 0; i < DATA_WIDTH; i++)
    {
        bitVal = digitalRead(dataPin);
        bytesVal |= (bitVal << ((DATA_WIDTH-1) - i));
        digitalWrite(clockPin, HIGH);
        delayMicroseconds(PULSE_WIDTH_USEC);
        digitalWrite(clockPin, LOW);
    }
    return(bytesVal);
}
 

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 6

조회수 201

master님의 댓글

master 작성일

회로도 첨부해보세요

지니아빠님의 댓글

지니아빠 작성일

죄송합니다. 회로도는 따로 없고 74HC165 5개를 1,2,15번핀은 같은핀끼리 연결하였고
9번과10번핀은 10번핀을 다음 165 9번으로보내고 10번은 다시 다름 9번으로 보내고
마지막 다섯번째 10번에서 아두이노로 연결하였습니다.
165 4개(32버튼) 까지는 잘됩니다. 어떤것이던 1개를 빼고 4개만으로는 다 동작하니 회로는 정상적인것 같네요

master님의 댓글

master 댓글의 댓글 작성일

전체 소스코드가 아니라서 구체적인 조언을 해드릴 수는 없고
대충만 적어드리죠
함수의 리턴형으로 받지말고 전역변수를 사용하세요
for()문에서 8비트를 읽고있죠?
byte d[5];
for(int k=0;k<5;k++){ // 5바이트 읽기
  for(){ // 8비트 읽기 // 생략된 코드가 있습니다.
    d[k] |= (bitVal << ((DATA_WIDTH-1) - i));
  }
}

지니아빠님의 댓글

지니아빠 작성일

지금은 멀리 나와있어 폰으로 글 적습니다
사용하는 부품은 74hc165 5개를 하나당 버튼 8개씩해서 총 40개를 사용하고 있습니다.
그리고 for문을 0에서 40보다 작을때까 돌립니다.
그러다보니 버튼하나당 이진수 하나해서 40자리까지가니 long의 범위를 벗어나더군요,
전체소스는 저녁에 집에 들어가서 올려볼께요

master님의 댓글

master 댓글의 댓글 작성일

40비트를 한번에 돌리지말고
답변처럼 이중루프를 돌리세요

지니아빠님의 댓글

지니아빠 댓글의 댓글 작성일

#include "MIDIUSB.h"
#define NUMBER_OF_SHIFT_CHIPS  5
#define DATA_WIDTH  NUMBER_OF_SHIFT_CHIPS * 8
#define PULSE_WIDTH_USEC  5
#define POLL_DELAY_MSEC  1
#define BYTES_VAL_T unsigned int
#define BYTES_VAL_X unsigned long

int ploadPin        = 3;  // Connects to Parallel load pin the 165
int clockEnablePin  = 5;  // Connects to Clock Enable pin the 165
int dataPin        = 7; // Connects to the Q7 pin the 165
int clockPin        = 9; // Connects to the Clock pin the 165

BYTES_VAL_X pinValues;
BYTES_VAL_X oldPinValues;
BYTES_VAL_T shift1, shift2, shift3, Oldshift1, Oldshift2, Oldshift3;

BYTES_VAL_X read_shift_regs()
{
    long bitVal = 0;
    BYTES_VAL_X  bytesVal = 0;

    digitalWrite(clockEnablePin, HIGH);
    digitalWrite(ploadPin, LOW);
    delayMicroseconds(PULSE_WIDTH_USEC);
    digitalWrite(ploadPin, HIGH);
    digitalWrite(clockEnablePin, LOW);

    for(int i = 0; i < DATA_WIDTH; i++)
    {
        bitVal = digitalRead(dataPin);
        bytesVal |= (bitVal << ((DATA_WIDTH-1) - i));
        digitalWrite(clockPin, HIGH);
        delayMicroseconds(PULSE_WIDTH_USEC);
        digitalWrite(clockPin, LOW);
    }
    return(bytesVal);
}

void display_pin_values()
{
  Oldshift1 = pinValues & 0x04;
  if (Oldshift1 != 0 ) {
    shift1 = Oldshift1;
    shift2 = 0;
    shift3 = 0;
  }

  Oldshift2 = pinValues & 0x08;
  if (Oldshift2 != 0 ) {
    shift1 = 0;
    shift2 = Oldshift2;
    shift3 = 0;
  }


  byte pitch;

    for(int i = 0; i < DATA_WIDTH; i++)
    {
        Serial.print(pinValues);
        Serial.print("\r\n");
      if((pinValues >> i) & 1) {
//        Serial.print(i);
//        Serial.print("\r\n");
        switch (i) {

          case 0:
            pitch = i + 1;
            noteOn(0, pitch, 64);  //Channel 0, middle C, normal velocity
            MidiUSB.flush();
            delay(200);
         
            noteOff(0, pitch, 64);  //Channel 0, middle C, normal velocity
            MidiUSB.flush();
            delay(200);

            break;
 
          case 1:
.
.
          case 40:
            pitch = i + 1;
            noteOn(0, pitch, 64);  //Channel 0, middle C, normal velocity
            MidiUSB.flush();
            delay(200);
         
            noteOff(0, pitch, 64);  //Channel 0, middle C, normal velocity
            MidiUSB.flush();
            delay(200);

            break;
                     
          default:
            break;
          }
      }   
    }
}

void setup()
{
    Serial.begin(9600);

    pinMode(ploadPin, OUTPUT);
    pinMode(clockEnablePin, OUTPUT);
    pinMode(clockPin, OUTPUT);
    pinMode(dataPin, INPUT);

    digitalWrite(clockPin, LOW);
    digitalWrite(ploadPin, HIGH);
}

void loop()
{
    pinValues = read_shift_regs();

    if(pinValues != 0) {
      if(pinValues != oldPinValues) {
          display_pin_values();
          oldPinValues = pinValues;
      }
    }
    delay(POLL_DELAY_MSEC);
}

void noteOn(byte channel, byte pitch, byte velocity) {
  midiEventPacket_t noteOn = {0x09, 0x90 | channel, pitch, velocity};
  MidiUSB.sendMIDI(noteOn);
}

void noteOff(byte channel, byte pitch, byte velocity) {
  midiEventPacket_t noteOff = {0x08, 0x80 | channel, pitch, velocity};
  MidiUSB.sendMIDI(noteOff);
}
 
void controlChange(byte channel, byte control, byte value) {
  midiEventPacket_t event = {0x0B, 0xB0 | channel, control, value};
  MidiUSB.sendMIDI(event);
}

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 875
공지 사이트 이용 안내댓글[10] master 17-10-29 8606
공지 [무료 공개] 소스코드 하이라이트 v2.0 beta [2013.02.07]댓글[1] 이미지첨부파일 master 18-01-23 3241
질문 두개의 소스를 합치고 싶습니다ㅠㅜ 새글 고수님들도와주세요ㅠㅠ 19-11-13 5
질문 AVR하고 있는데 에러 좀 잡아주세요ㅜㅜ 도저히 모르겠어요.. 새글 lee019427 19-11-13 3
질문 아두이노 RC카 부저 부분 질문입니다. 새글 쿤싼 19-11-13 11
질문 아두이노 스텝모터 질문있습니다 이미지새글첨부파일 콩이 19-11-13 15
질문 GP2Y1014 핀 설정 새글첨부파일 jasmint 19-11-13 14
질문 atmega16 프로그램(왕복점등) 새글 잘생김 19-11-12 12
질문 atmega128 코드 해석 문의 이미지새글첨부파일 오옹키 19-11-12 17
질문 아두이노에 대해 질문이 있습니다! 새글 찐덕 19-11-12 11
질문 아두이노 스케치코드 질문있습니다.. 새글 초보자학생 19-11-12 14
질문 지문인식 서보모터 제어관련 새글 doii123 19-11-12 14
질문 아트메가128 시리얼통신을 이용한 신호등제어 새글 Qnfnfnqkd 19-11-12 13
질문 아두이노 시리얼모니터 출력값 코딩 이미지첨부파일 ISYCHJ 19-11-12 26
답변 답변글 답변 : 아두이노 시리얼모니터 출력값 코딩 master 19-11-12 20
질문 아두이노 코딩관련 질문드립니다!! rkdeh 19-11-12 15
답변 답변글 답변 : 아두이노 코딩관련 질문드립니다!! master 19-11-12 19
질문 avr 회로구성 문의합니다.댓글[2] 이미지첨부파일 jasmint 19-11-12 24
질문 아두이노 코딩 관련 질문 드립니다.! 첨부파일 Creavolution 19-11-12 21
답변 답변글 답변 : 아두이노 코딩 관련 질문 드립니다.!댓글[1] master 19-11-12 25
질문 스마트팜 제작 코딩관련 질문드립니다. 구퓨리 19-11-11 16
답변 답변글 답변 : 스마트팜 제작 코딩관련 질문드립니다. master 19-11-12 17
질문 아두이노 피드백 받고 싶습니다... 아두아두 19-11-11 13
답변 답변글 답변 : 아두이노 피드백 받고 싶습니다... master 19-11-12 16
질문 아두이노 모터 제어중 질문드립니다! 쿤싼 19-11-11 23
답변 답변글 답변 : 아두이노 모터 제어중 질문드립니다! master 19-11-11 28
질문 아두이노 코딩 질문드립니다. 규태뱃살 19-11-11 19
답변 답변글 답변 : 아두이노 코딩 질문드립니다. master 19-11-11 16
질문 아두이노 코딩 질문드립니다!! Creavolution 19-11-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 ⓒ 2019
모바일버전으로보기