아두이노 uint8_t 센서값 char 배열 저장

조회수 2201회
void scan_rows(uint8_t *rows){

  char A[65];
  int i;

  uint8_t z,u,b;

  Serial.print("");

  for(z=0; z<8; z++){
    if(z)
    {
      pinMode(z+29,INPUT);
    }
    pinMode(z+30,OUTPUT);

    digitalWrite(z+30,LOW);
    for(u=22; u<=29; u++){
      rows[z]<<=1;
      b=digitalRead(u);
      rows[z]|=1;

      if(z==0){
        for(int i=0;i<65;i++){
        A[i]=b;
        }
      }

      if(z==1){
        for(int i=8;i<65;i++){
        A[i]=b;
        }
      }

      if(z==2){
        for(int i=16;i<65;i++){
        A[i]=b;
        }
      }

      if(z==3){
        for(int i=24;i<65;i++){
        A[i]=b;
        }
      }

      if(z==4){
        for(int i=32;i<65;i++){
        A[i]=b;
        }
      }

      if(z==5){
        for(int i=40;i<65;i++){
        A[i]=b;
        }
      }

      if(z==6){
        for(int i=48;i<65;i++){
        A[i]=b;
        }
      }

      if(z==7){
        for(int i=56;i<65;i++){
        A[i]=b;
        }
      }
    }
  }
  Serial.print(A[i]);
}

아두이노 메가 2560을 사용합니다. 8x8 매트릭스로 배열된 센서값을 스캔하는 함수입니다.

이를 char 배열을 사용해서 1번부터 64번까지 채우려고 합니다. 0번은 의도적으로 비워뒀습니다. string은 안된다고 들어서 포기했습니다.

그런데 저렇게 저장하면 제대로 출력되지 않고 Γ가 뜨더라구요..... 저는 Serial.print로 출력되기를 원합니다. Serial1.print로 변경해서 블루투스 모듈을 통해 안드로이드 애플리케이션으로 보낼 생각입니다.

조언 부탁드립니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 전반적으로 코드에 문제가 있어 보입니다.

    우선 z, u, b가 어떤 변수인지 확정하기가 힘드니 변수명을 좀 더 직관적으로 적으시는게 어떨가 싶습니다.

    그리고 8x8행렬의 값을 저장하시려면 A[8][8]로 선언하셔서 for문을 중첩시키시는게 어떨까 싶습니다.

    rows라는 변수가 어디서 선언되었는진 모르겠지만 rows[z]|=1이부분은 결과가 모든비트가 1로 바뀌지 않나요?

    변수 b는 z값이 1씩 증가할때마다 초기화돼서 A배열에서 8개씩 같은 값을 가지구요.

    마지막으로 말씀하신 문제는 A배열에 b값이 ASCII값으로 변환되지 않고 그대로 들어가 있으니 생기는 문제가 아닐까 싶습니다.

    b=digitalRead(u); 여기서 digitalRead()의 return값의 범위에 따라 b에 값이 잘못저장될수도 있지만 그부분은 고려하셨을꺼라 생각되고

    b의 범위가 3자리 숫자 이내면

    tmp[0] = b/100;
    tmp[1] = (b%100)/10;
    tmp[2] = b%10;
    Serial.print(tmp);
    

    이런식으로 값을 출력할 수 있지 않을까 싶네요.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)