Pages: [1]   Go Down
Author Topic: error: 'LcdString' was not declared in this scope  (Read 1055 times)
0 Members and 1 Guest are viewing this topic.
Brasil
Offline Offline
Sr. Member
****
Karma: 2
Posts: 310
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Senhos, Boa Noite

Estou recebendo essa mensagem quando tento compilar meu projeto
 error: 'LcdString' was not declared in this scope
A função LcdString, está em outro arquivo "tab" na IDE do arduino, mas quando a chamo no setup() ocorre esse erro.
As funções   LcdInitialise() e  LcdClear() estão na mesma "tab" que a LcdString()

Code:
void setup()
  {
  Wire.begin(10);
  Wire.onReceive(receiveEvent);
  #ifdef Debug
    Serial.begin(9600);
  #endif
  pinMode(PINO_BLINK, OUTPUT);
  LcdInitialise();
  LcdClear();
  LcdString("Iniciando"); 
  Timers.onOverTime(OverTime);
  TimerWaitData = Timers.addDog(20000);
  TimerBlink = Timers.addDog(1000);
  TimerBeep = Timers.addDog(2000);
  analogWrite(PINO_BLINK, 128);
  }

Em outras partes do projeto ela é reconhecida normalmente.
Há alguma coisa q possa ser feita? Ou eu que não estou fazendo corretamente.
Logged

4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP


Portugal
Offline Offline
Edison Member
*
Karma: 27
Posts: 1413
Tomorrow I will know a BIT more than yesterday
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
A função LcdString, está em outro arquivo "tab" na IDE do arduino, mas quando a chamo no setup() ocorre esse erro.
Estas a fazer o #include "outraTab.h" no teu projecto principal?
 
Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


Brasil
Offline Offline
Sr. Member
****
Karma: 2
Posts: 310
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
A função LcdString, está em outro arquivo "tab" na IDE do arduino, mas quando a chamo no setup() ocorre esse erro.
Estas a fazer o #include "outraTab.h" no teu projecto principal?
 
Não é uma biblioteca, é uma daquela "orelhas" na IDE.
Logged

4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP


Portugal
Offline Offline
Edison Member
*
Karma: 27
Posts: 1413
Tomorrow I will know a BIT more than yesterday
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Não é uma biblioteca, é uma daquela "orelhas" na IDE.
Nao interessa tem de ser incluido na mesma senao o compilador nao tem forma de saber que essa funçao existe no programa.
Certifica-te que a inclui com "xxx.x " e nao com <xxx.x>
Outra coisa que te podes ter esquecido é nao teres criado as prototype Functions dentro desse header file
Assim ele nao tem forma de a encontrar se a chamares antes de a implementares.
« Last Edit: March 23, 2013, 08:30:03 am by HugoPT » Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


'round the world...
Offline Offline
Faraday Member
**
Karma: 41
Posts: 3103
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

lcdstring não é um objecto que tens de declarar?
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Brasil
Offline Offline
Sr. Member
****
Karma: 2
Posts: 310
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

lcdstring não é um objecto que tens de declarar?
Não, tão todas estão em outra tab da IDE, por isso to intrigado porque algumas são reconhecidas e outras não.
Logged

4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP


Portugal
Offline Offline
Edison Member
*
Karma: 27
Posts: 1413
Tomorrow I will know a BIT more than yesterday
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Não, tão todas estão em outra tab da IDE, por isso to intrigado porque algumas são reconhecidas e outras não.
Nao querendo ser chato mas tens a certeza que tens as Prototype Functions declaradas?
É que se nao estiverem é mesmo isso que acontece.Tenta declarar as funcoes que estas a implementar nessa TAB para  o compilador saber que elas existem antes de serem usadas.
A IDE do arduino faz isso automaticamente mas se adicionares uma parte do programa noutra TAB nao o faz!
Nessa TAB tens de declarar as funçoes que la implementas algo assim:
Code:
//Prototype functions____________
void clearSerialBuffer();
void setupModem();
void dialNumber(char * number);
boolean checkSerialData();
void readIncomingSMS();
Depois mais abaixo é que fazes a tua implementaçao da funçao:
Code:
void dialNumber(char * number)
{
Serial.print("ATD");  //ATD is the command to Dial a Number
Serial.print(number); //Print the Number
Serial.write(0x3b);  //Put a ; at the end
Serial.write(0x0d); // Give an Enter to confirm the command
delay(modemDelay);
}
Se eu remover as prototype functions do meu codigo e tentar correr algumas funçoes que la existem dao erro tambem
Tem tudo a ver com a ordem das funçoes.O que se passa é que tu estas a dizer para executar uma funçao que ele inda nao sabe que existe pois no momento da compilaçao a funçao inda nao foi lida e pára a compilaçao dando erro que a funçao nao é visivel.
As Prototype functions devem ser escritas logo no inicio do programa(neste caso no teu ficheiro adicional) para que no momento da compilaçao ele passe a saber que deve contar com essas funçoes.Se nao as criares ele só sabera que elas existem quando correr todo o teu codigo.
Um pouco de info:
http://opencbp.sourceforge.net/en_US.ISO8859-1/books/opencbook/func.prototypes.html
Quote
All identifiers in C need to be declared before they are used. This is true for functions as well as variables. For functions the declaration needs to be before the first call of the function. A full declaration includes the return type and the number and type of the arguments. This is also called the function prototype


« Last Edit: March 23, 2013, 07:20:08 pm by HugoPT » Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


Brasil
Offline Offline
Sr. Member
****
Karma: 2
Posts: 310
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 
Quote
Não, tão todas estão em outra tab da IDE, por isso to intrigado porque algumas são reconhecidas e outras não.
Nao querendo ser chato mas tens a certeza que tens as Prototype Functions declaradas?
É que se nao estiverem é mesmo isso que acontece.Tenta declarar as funcoes que estas a implementar nessa TAB para  o compilador saber que elas existem antes de serem usadas.
Agora coloquei a Prototype Function do LcdString() no inicio do código e compilou, o que queria entender é o porque de algumas funções serem reconhecidas e outras não. Será que o compilador criou algumas e deixa de fazer outras? Pois precisei apenas colocar a da LcdString, a LcdInitialise() não, será que seria que a LcdInitialise() não tem parâmetros?
Obrigado HUGOPT smiley-grin
« Last Edit: March 23, 2013, 10:03:13 pm by mmoscz » Logged

4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP


'round the world...
Offline Offline
Faraday Member
**
Karma: 41
Posts: 3103
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Eu estava a suspeitar de algo assim também.

Normalmente ou escreves todas as funções por baixo da Main e declaras as funções todas no início do ficheiro:
Code:

void func();//Isto diz ao compilador que existe uma função com este nome e tipo definida mais abaixo...

int main() {
//do something
func();      //o compilador viu que esta função está definida algures, logo sabe que depois apenas tem de fazer um salto para ela.     
}

void func() {      //quando esta função for chamada "salta" para aqui.
//Doing nothing really
}
E assim não tem como falhar.

Ou então, escreves as funções todas no início:
Code:
void func() {
//Doing nothing really
}

int main() {
//do comething
func();
}
E assim não é garantido que funcione. Principalmente se tiveres funções encadeadas.

Nota que o Main é equivalente ao setup e loop.

Outra solução, que me agrada mais ao fazer projectos "grandes" ou fora do Arduino... é criar ficheiros de código separados e não declarar funções nenhumas no ficheiro principal. Assim serei obrigado a declarar as funções no ficheiro .h que quero incluir no ficheiro principal e estes problemas desaparecem.
No Arduino, podes sempre criar bibliotecas para teres a mesma funcionalidade que indiquei e um sketch limpo. Com C++ existem mais mecanismos para conseguires isto de maneira eficiente e "bonita" que só com C puro.

Depois é escolher o que preferes. smiley
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Portugal
Offline Offline
Edison Member
*
Karma: 27
Posts: 1413
Tomorrow I will know a BIT more than yesterday
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Esta questao das prototype functions é mascarada na IDE e leva os utilizadores a pensar que as funçoes podem ser criadas onde  se desejar.Se apenas se usar um skeetch sem ficheiros adicionais pode-se criar as funçoes em qualquer parte do codigo  smiley-confuse inda nao tentei descobrir como mas ja me perguntei como ele o faz.
No entanto isto pode levar os utilizadores a quando querem algo mais avançado a nunca suspeitar disso pois antes nunca precisaram de ter atençao a isso.Para quem programa em C fora da ide do arduino o uso das prototypes é uso comum e necessario.
Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


'round the world...
Offline Offline
Faraday Member
**
Karma: 41
Posts: 3103
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Terá a ver com o C++ em si? Ou alguma opção do compilador?
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Pages: [1]   Go Up
Jump to: