LED 이동 디스플레이 만들기 오류 입니다.('아두이노 종결키트 입문자용 교재pdf66쪽)입니다.

다연이파파 2017-06-27 (화) 15:00 6년전 4451  


아두이노 종결키트를 구매하여 pdf교재를 열심히 공부하고 있는 초보입니다.

 

예제를 따라가보면서 실습중인데요.

 

pdf66쪽-LED 이동 디스플레이 만들기에서 계속 컴파일 오류가 발생합니다.

 

'prog_uchar' does not name a type 

 

이라는 컴파일 오류가 떠서 열심히 검색해보니

 

아무래도 #include <avr/pgmspace.h> 부분과 관련되 있어서

 

플래쉬 메모리를 사용하는 과정중에 아두이노 버젼에 따라 발생하는 문제 같은데..

 

정확한 오류 원인과 수정 방법을 모르겠습니다.

 

3시간넘게 고민하고 검색해봤는데 답이 안나와 질문게시판에 글을 올립니다.

 

 

메카리워즈 Image Map

브랜든 2017-06-28 (수) 01:09 6년전
안녕하세요! 실제로 업로드해서 동작 확인까지는 해보지는 않았지만, 컴파일 에러는 나타나지 않는 것까지는 확인했습니다.
관련 사례가 있는데요. 옆 사이트(http://forum.arduino.cc/index.php?topic=261093.0)를 참고해보면,
아두이노 버전이 바뀌면서, 프로그램 코드가 변경된 듯합니다.
해결방법은 두 가지로, "prog_uchar text" 문장을 "const unsigned char"로 바꾸는 방법(3군데 정도 있습니다)과
아두이노 버전 1.0.5이하로 낮추는 방법이 있습니다.
주소
다연이파파 2017-06-28 (수) 13:05 6년전
감사합니다. 첫번째 방법으로 해결하긴 했느데, 스케치 버젼이 바뀌면서 함수위치에 따른 오류가 발생합니다. void setup()시작전에 함수선언 먼저하고 뒷부분에 함수정의 하는 식으로 코드를 변경하니 정상작동 됨을 확인하였습니다. 저와 같은 분들이 계실수도 있어 코드 올려봅니다.

#include <avr/pgmspace.h>
#include <LedControl.h>
const int numDevices = 1;      // number of MAX7219s used
const long scrollDelay = 150;  // adjust scrolling speed
unsigned long bufferLong [14] = {0};
LedControl lc=LedControl(12,11,10,numDevices);
const unsigned char scrollText[] PROGMEM ={
" MECHASOLUTION,LLC  \0"};

void scrollFont();
void scrollMessage(const unsigned char * messageString);
void loadBufferLong(int ascii);
void rotateBufferLong();
void printBufferLong();

void setup(){
for (int x=0; x<numDevices; x++){
lc.shutdown(x,false);      //The MAX72XX is in power-saving mode on startup
lc.setIntensity(x,8);      // Set the brightness to default value
lc.clearDisplay(x);        // and clear the display
}
}
void loop(){
scrollMessage(scrollText);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const unsigned char font5x7 [] PROGMEM = {      //Numeric Font Matrix (Arranged as 7x font data + 1x kerning data)
B00000000,    //Space (Char 0x20)
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
6,
B10000000,    //!
B10000000,
B10000000,
B10000000,
B00000000,
B00000000,
B10000000,
2,
B10100000,    //"
B10100000,
B10100000,
B00000000,
B00000000,
B00000000,
B00000000,
4,
B01010000,    //#
B01010000,
B11111000,
B01010000,

B11111000,
B01010000,
B01010000,
6,
B00100000,    //$
B01111000,
B10100000,
B01110000,
B00101000,
B11110000,
B00100000,
6,
B11000000,    //%
B11001000,
B00010000,
B00100000,
B01000000,
B10011000,
B00011000,
6,
B01100000,//&
B10010000,
B10100000,
B01000000,
B10101000,
B10010000,
B01101000,
6,
B11000000,    //'
B01000000,
B10000000,
B00000000,
B00000000,
B00000000,
B00000000,
3,
B00100000,    //(
B01000000,
B10000000,
B10000000,
B10000000,
B01000000,
B00100000,
4,
B10000000,    //)
B01000000,
B00100000,
B00100000,
B00100000,
B01000000,
B10000000,
4,
B00000000,    //*
B00100000,
B10101000,
B01110000,
B10101000,
B00100000,
B00000000,
6,
B00000000,    //+
B00100000,
B00100000,
B11111000,
B00100000,
B00100000,
B00000000,
6,
B00000000,    //,
B00000000,
B00000000,
B00000000,
B11000000,
B01000000,
B10000000,
3,
B00000000,    //-
B00000000,
B11111000,
B00000000,
B00000000,
B00000000,
B00000000,
6,
B00000000,    //.
B00000000,
B00000000,

B00000000,
B00000000,
B11000000,
B11000000,
3,
B00000000,    ///
B00001000,
B00010000,
B00100000,
B01000000,
B10000000,
B00000000,
6,
B01110000,    //0
B10001000,
B10011000,
B10101000,
B11001000,
B10001000,
B01110000,
6,
B01000000,    //1
B11000000,
B01000000,
B01000000,
B01000000,
B01000000,
B11100000,
4,
B01110000,    //2
B10001000,
B00001000,
B00010000,
B00100000,
B01000000,
B11111000,
6,
B11111000,    //3
B00010000,
B00100000,
B00010000,
B00001000,
B10001000,
B01110000,

B00010000,    //4
B00110000,
B01010000,
B10010000,
B11111000,
B00010000,
B00010000,
6,
B11111000,    //5
B10000000,
B11110000,
B00001000,
B00001000,
B10001000,
B01110000,
6,
B00110000,    //6
B01000000,
B10000000,
B11110000,
B10001000,
B10001000,
B01110000,
6,
B11111000,    //7
B10001000,
B00001000,
B00010000,
B00100000,
B00100000,
B00100000,
6,
B01110000,    //8
B10001000,
B10001000,
B01110000,
B10001000,
B10001000,
B01110000,
6,
B01110000,    //9
B10001000,

B10001000,
B01111000,
B00001000,
B00010000,
B01100000,
6,
B00000000,    //:
B11000000,
B11000000,
B00000000,
B11000000,
B11000000,
B00000000,
3,
B00000000,    //;
B11000000,
B11000000,
B00000000,
B11000000,
B01000000,
B10000000,
3,
B00010000,    //<
B00100000,
B01000000,
B10000000,
B01000000,
B00100000,
B00010000,
5,
B00000000,    //=
B00000000,
B11111000,
B00000000,
B11111000,
B00000000,
B00000000,
6,
B10000000,    //>
B01000000,
B00100000,
B00010000,
B00100000,
B01000000,

B10000000,
5,
B01110000,//?
B10001000,
B00001000,
B00010000,
B00100000,
B00000000,
B00100000,
6,
B01110000,    //@
B10001000,
B00001000,
B01101000,
B10101000,
B10101000,
B01110000,
6,
B01110000,    //A
B10001000,
B10001000,
B10001000,
B11111000,
B10001000,
B10001000,
6,
B11110000,    //B
B10001000,
B10001000,
B11110000,
B10001000,
B10001000,
B11110000,
6,
B01110000,    //C
B10001000,
B10000000,
B10000000,
B10000000,
B10001000,
B01110000,
6,
B11100000,    //D

B10010000,
B10001000,
B10001000,
B10001000,
B10010000,
B11100000,
6,
B11111000,    //E
B10000000,
B10000000,
B11110000,
B10000000,
B10000000,
B11111000,
6,
B11111000,    //F
B10000000,
B10000000,
B11110000,
B10000000,
B10000000,
B10000000,
6,
B01110000,    //G
B10001000,
B10000000,
B10111000,
B10001000,
B10001000,
B01111000,
6,
B10001000,    //H
B10001000,
B10001000,
B11111000,
B10001000,
B10001000,
B10001000,
6,
B11100000,    //I
B01000000,
B01000000,
B01000000,
B01000000,

B01000000,
B11100000,
4,
B00111000,    //J
B00010000,
B00010000,
B00010000,
B00010000,
B10010000,
B01100000,
6,
B10001000,    //K
B10010000,
B10100000,
B11000000,
B10100000,
B10010000,
B10001000,
6,
B10000000,    //L
B10000000,
B10000000,
B10000000,
B10000000,
B10000000,
B11111000,
6,
B10001000,    //M
B11011000,
B10101000,
B10101000,
B10001000,
B10001000,
B10001000,
6,
B10001000,    //N
B10001000,
B11001000,
B10101000,
B10011000,
B10001000,
B10001000,
6,

B01110000,    //O
B10001000,
B10001000,
B10001000,
B10001000,
B10001000,
B01110000,
6,
B11110000,    //P
B10001000,
B10001000,
B11110000,
B10000000,
B10000000,
B10000000,
6,
B01110000,    //Q
B10001000,
B10001000,
B10001000,
B10101000,
B10010000,
B01101000,
6,
B11110000,    //R
B10001000,
B10001000,
B11110000,
B10100000,
B10010000,
B10001000,
6,
B01111000,    //S
B10000000,
B10000000,
B01110000,
B00001000,
B00001000,
B11110000,
6,
B11111000,    //T
B00100000,
B00100000,
B00100000,

B00100000,
B00100000,
B00100000,
6,
B10001000,    //U
B10001000,
B10001000,
B10001000,
B10001000,
B10001000,
B01110000,
6,
B10001000,    //V
B10001000,
B10001000,
B10001000,
B10001000,
B01010000,
B00100000,
6,
B10001000,    //W
B10001000,
B10001000,
B10101000,
B10101000,
B10101000,
B01010000,
6,
B10001000,//X
B10001000,
B01010000,
B00100000,
B01010000,
B10001000,
B10001000,
6,
B10001000,    //Y
B10001000,
B10001000,
B01010000,
B00100000,
B00100000,
B00100000,
6,

B11111000,    //Z
B00001000,
B00010000,
B00100000,
B01000000,
B10000000,
B11111000,
6,
B11100000,    //[
B10000000,
B10000000,
B10000000,
B10000000,
B10000000,
B11100000,
4,
B00000000,    //(Backward Slash)
B10000000,
B01000000,
B00100000,
B00010000,
B00001000,
B00000000,
6,
B11100000,    //]
B00100000,
B00100000,
B00100000,
B00100000,
B00100000,
B11100000,
4,
B00100000,    //^
B01010000,
B10001000,
B00000000,
B00000000,
B00000000,
B00000000,
6,
B00000000,    //_
B00000000,
B00000000,

B00000000,
B00000000,
B00000000,
B11111000,
6,
B10000000,    //`
B01000000,
B00100000,
B00000000,
B00000000,
B00000000,
B00000000,
4,
B00000000,    //a
B00000000,
B01110000,
B00001000,
B01111000,
B10001000,
B01111000,
6,
B10000000,    //b
B10000000,
B10110000,
B11001000,
B10001000,
B10001000,
B11110000,
6,
B00000000,    //c
B00000000,
B01110000,
B10001000,
B10000000,
B10001000,
B01110000,
6,
B00001000,    //d
B00001000,
B01101000,
B10011000,
B10001000,
B10001000,
B01111000,

6,
B00000000,    //e
B00000000,
B01110000,
B10001000,
B11111000,
B10000000,
B01110000,
6,
B00110000,    //f
B01001000,
B01000000,
B11100000,
B01000000,
B01000000,
B01000000,
6,
B00000000,    //g
B01111000,
B10001000,
B10001000,
B01111000,
B00001000,
B01110000,
6,
B10000000,    //h
B10000000,
B10110000,
B11001000,
B10001000,
B10001000,
B10001000,
6,
B01000000,    //i
B00000000,
B11000000,
B01000000,
B01000000,
B01000000,
B11100000,
4,
B00010000,    //j
B00000000,

B00110000,
B00010000,
B00010000,
B10010000,
B01100000,
5,
B10000000,    //k
B10000000,
B10010000,
B10100000,
B11000000,
B10100000,
B10010000,
5,
B11000000,    //l
B01000000,
B01000000,
B01000000,
B01000000,
B01000000,
B11100000,
4,
B00000000,    //m
B00000000,
B11010000,
B10101000,
B10101000,
B10001000,
B10001000,
6,
B00000000,    //n
B00000000,
B10110000,
B11001000,
B10001000,
B10001000,
B10001000,
6,
B00000000,    //o
B00000000,
B01110000,
B10001000,
B10001000,
B10001000,

B01110000,
6,
B00000000,    //p
B00000000,
B11110000,
B10001000,
B11110000,
B10000000,
B10000000,
6,
B00000000,    //q
B00000000,
B01101000,
B10011000,
B01111000,
B00001000,
B00001000,
6,
B00000000,    //r
B00000000,
B10110000,
B11001000,
B10000000,
B10000000,
B10000000,
6,
B00000000,    //s
B00000000,
B01110000,
B10000000,
B01110000,
B00001000,
B11110000,
6,
B01000000,    //t
B01000000,
B11100000,
B01000000,
B01000000,
B01001000,
B00110000,
6,
B00000000,    //u

B00000000,
B10001000,
B10001000,
B10001000,
B10011000,
B01101000,
6,
B00000000,    //v
B00000000,
B10001000,
B10001000,
B10001000,
B01010000,
B00100000,
6,
B00000000,//w
B00000000,
B10001000,
B10101000,
B10101000,
B10101000,
B01010000,
6,
B00000000,    //x
B00000000,
B10001000,
B01010000,
B00100000,
B01010000,
B10001000,
6,
B00000000,    //y
B00000000,
B10001000,
B10001000,
B01111000,
B00001000,
B01110000,
6,
B00000000,    //z
B00000000,
B11111000,
B00010000,
B00100000,

B01000000,
B11111000,
6,
B00100000,    //{
B01000000,
B01000000,
B10000000,
B01000000,
B01000000,
B00100000,
4,
B10000000,    //|
B10000000,
B10000000,
B10000000,
B10000000,
B10000000,
B10000000,
2,
B10000000,    //}
B01000000,
B01000000,
B00100000,
B01000000,
B01000000,
B10000000,
4,
B00000000,    //~
B00000000,
B00000000,
B01101000,
B10010000,
B00000000,
B00000000,
6,
B01100000,    // (Char 0x7F)
B10010000,
B10010000,
B01100000,
B00000000,
B00000000,
B00000000,
5
};

void scrollFont() {
for (int counter=0x20;counter<0x80;counter++){
loadBufferLong(counter);
}
}
// Scroll Message
void scrollMessage(const unsigned char * messageString) {
int counter = 0;
int myChar=0;
do {
// read back a char
myChar =  pgm_read_byte_near(messageString + counter);
if (myChar != 0){
loadBufferLong(myChar);
}
counter++;
}
while (myChar!= 0);
}
// Load character into scroll buffer
void loadBufferLong(int ascii){
if (ascii >= 0x20 && ascii <=0x7f){
for (int a=0;a<7;a++){                      // Loop 7 times for a 5x7 font
unsigned long c = pgm_read_byte_near(font5x7 + ((ascii -0x20) * 8) + a);    // Index into character table to get row data
unsigned long x = bufferLong [a*2];    // Load current scroll buffer
x = x | c;                              // OR the new character onto end of current
bufferLong [a*2] = x;                  // Store in buffer
}
byte count = pgm_read_byte_near(font5x7 +((ascii -0x20) * 8) + 7);    // Index into character table for kerning data
for (byte x=0; x<count;x++){
rotateBufferLong();
printBufferLong();
delay(scrollDelay);
}
}
}
// Rotate the buffer
void rotateBufferLong(){
for (int a=0;a<7;a++){                      // Loop 7 times for a 5x7 font
unsigned long x = bufferLong [a*2];    // Get low buffer entry
byte b = bitRead(x,31);                // Copy high order bit that gets lost in rotation
x = x<<1;                              // Rotate left one bit
bufferLong [a*2] = x;                  // Store new low buffer

x = bufferLong [a*2+1];                // Get high buffer entry
x = x<<1;                              // Rotate left one bit
bitWrite(x,0,b);                        // Store saved bit
bufferLong [a*2+1] = x;                // Store new high buffer
}

// Display Buffer on LED matrix

void printBufferLong(){
for (int a=0;a<7;a++){                    // Loop 7 times for a 5x7 font
unsigned long x = bufferLong [a*2+1];  // Get high buffer entry
byte y = x;                            // Mask off first character
lc.setRow(3,a,y);                      // Send row to relevent MAX7219 chip
x = bufferLong [a*2];                  // Get low bufferentry
y = (x>>24);                            // Mask off second character
lc.setRow(2,a,y);                      // Send row to relevent MAX7219 chip
y = (x>>16);                            // Mask off third character
lc.setRow(1,a,y);  // Send row to relevent MAX7219 chip
y = (x>>8);                            // Mask off forth character
lc.setRow(0,a,y);                      // Send row to relevent MAX7219 chip
}
}
주소

모바일 버전으로 보기