Arduino, kopplar inte vad som är orsaken till felmeddelandet

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Henry
Inlägg: 23613
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Arduino, kopplar inte vad som är orsaken till felmeddelandet

Inlägg av Henry »

Fattar inte vad som är felet, säkert något uppenbart men jag kopplar i alla fall inte.

Koden är bara ett test och därav delayn som är enklare att fibbla med så haka inte upp er på det.


Koden skall skriva "Funkar" på lcdn om värdet i "tid" är lika med eller högre än värdet i "period" och då detta hela tiden räknas upp från noll med "millis" och nollställs varje gång funktionen körs så borde i alla fall den delen funka tycker jag och även utan någon typ av overflow.

Men kompileringen stannar på raden ovanför "lcd.print("Funkar");" med meddelandet;

exit status 1
a function-definition is not allowed here before '{' token



Kod: Markera allt

#include <LiquidCrystal.h>

LiquidCrystal lcd(40, 42, 28, 26, 24, 22);

int tid = millis();
int period = 3000;

void setup() {

  lcd.begin(20, 4);
  lcd.clear();

}

void loop() {

  void skriv()

  {
    lcd.print("Funkar");
    delay(1000);
    lcd.clear();
    time_now = 0;
  }

  if (tid >= period)

  {
    skriv();
  }

}
[/size]

Hänger inte riktigt med på vad den menar för det skall väl gå att ha en funktion i tex loop och även göra en kallelse av en funktion i tex loop även om kallelsen eller funktionen (vet att det finns undantag) inte skulle vara där? Om det nu är det den menar.
Användarvisningsbild
adent
Inlägg: 4100
Blev medlem: 27 november 2008, 22:56:23
Ort: Utanför Jönköping
Kontakt:

Re: Arduino, kopplar inte vad som är orsaken till felmeddela

Inlägg av adent »

Lägg funktionen skriv() utanför loop().

Kod: Markera allt

#include <LiquidCrystal.h>

LiquidCrystal lcd(40, 42, 28, 26, 24, 22);

int tid = millis();
int period = 3000;

void skriv()
{
  lcd.print("Funkar");
  delay(1000);
  lcd.clear();
  time_now = 0;  // Denna kommer inte funka, du saknar denna variabel?
}


void setup() 
{
  lcd.begin(20, 4);
  lcd.clear();
}

void loop() 
{
  if (tid >= period)
  {
    skriv();
  }

}
Senast redigerad av adent 5 mars 2019, 16:52:21, redigerad totalt 1 gång.
Användarvisningsbild
Henry
Inlägg: 23613
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Re: Arduino, kopplar inte vad som är orsaken till felmeddela

Inlägg av Henry »

Har prövat det med men det blir samma oavsett var jag lägger den.
Användarvisningsbild
adent
Inlägg: 4100
Blev medlem: 27 november 2008, 22:56:23
Ort: Utanför Jönköping
Kontakt:

Re: Arduino, kopplar inte vad som är orsaken till felmeddela

Inlägg av adent »

Då gör du något knasigt tror jag, jag ändrade mitt inlägg ovan, reload:a och kolla igen!

MVH: Mikael
Användarvisningsbild
Henry
Inlägg: 23613
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Re: Arduino, kopplar inte vad som är orsaken till felmeddela

Inlägg av Henry »

Ändrade till nedan, samma ändå. Nåt är allvarligt fel för nedan skall väl ändå funka? Får då nämnas att jag uppdaterade till senaste IDE samt Java men inga problem mer än det är extremt segt första gången jag kompilerar något, mycket segare än det var förr och långsammare än normalt efter med.

Kod: Markera allt

LiquidCrystal lcd(40, 42, 28, 26, 24, 22);


int tid = millis();
int period = 3000;

void setup() {

  lcd.begin(20, 4);
  lcd.clear();

void skriv()  
  
  {
    lcd.print("Funkar");
    delay(500);
    lcd.clear();
    tid = 0;
  }
}

void loop() {

  


  if (tid >= period)

  {
    skriv();
  }

}
Shimonu
Inlägg: 295
Blev medlem: 21 oktober 2015, 22:44:33

Re: Arduino, kopplar inte vad som är orsaken till felmeddela

Inlägg av Shimonu »

Nej, du får inte ha en funktion i en annan funktion. Nu la du den i setup().
mounte
Inlägg: 204
Blev medlem: 14 november 2010, 13:15:00
Ort: Sandviken

Re: Arduino, kopplar inte vad som är orsaken till felmeddela

Inlägg av mounte »

Tror misstaget är att du aldrig uppdaterar tiden. Det behöver du göra i loopen.
Du bör kunna deklarera initiellt

Kod: Markera allt

int tid = 0;
int now = 0;
int period = 3000;
sedan i loopen:

Kod: Markera allt

now = millis();
if( now - tid > period) {
  tid = now;
  skriv();
}
eller något åt det hållet, säkert någon tankevurpa, men du behöver minnas vad tiden var, och jämföra med vad tiden är nu osv.
Användarvisningsbild
Henry
Inlägg: 23613
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Re: Arduino, kopplar inte vad som är orsaken till felmeddela

Inlägg av Henry »

Shimonu: det var bara för att visa att inte heller det funkade.

Testade med att kommentera bort allt ovanför loop och setup bara för att testa, men får samma ändå.

mounte: fått uppfattningen att millis startas så fort programmet startas och kan sättas i princip var som helst, men jag kan ha fel.

Tänkte mer att tiden börjar alltid från noll eftersom den nollställs av funktionen och således behöver jag inte bry mig om något förrän tiden är den som söks, men får sätta mig in det lite mer tror jag. Tack för exemplet så har jag något att gå på, går bra snabbare.


Tog nu dock och stängde allt och öppnade en ny och klistrade bara in koden från funktionen och får samma ändå vilket jag inte skall få som jag ser det så något är helt åt helvete.

Kod: Markera allt

void setup() {
  
    void skriv()  
  
  {
    lcd.print("Funkar");
    delay(500);
    lcd.clear();
  }

}

void loop() {
  // put your main code here, to run repeatedly:

}
Shimonu
Inlägg: 295
Blev medlem: 21 oktober 2015, 22:44:33

Re: Arduino, kopplar inte vad som är orsaken till felmeddela

Inlägg av Shimonu »

Det är för att du gör fel!

Såhär ska det se ut!

Kod: Markera allt

void setup() {

}

void skriv() 
{
    lcd.print("Funkar");
    delay(500);
    lcd.clear();
}

void loop() {
  // put your main code here, to run repeatedly:

}
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Arduino, kopplar inte vad som är orsaken till felmeddela

Inlägg av sodjan »

Du har fortfarande skriv() *i* setup().

Kod: Markera allt

void setup() {

  <gör vad du ska göra i setup här...>

} 

void skriv() {
    lcd.print("Funkar");
    delay(500);
    lcd.clear();
}


void loop() {

  // put your main code here, to run repeatedly:

}
Användarvisningsbild
Henry
Inlägg: 23613
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Re: Arduino, kopplar inte vad som är orsaken till felmeddela

Inlägg av Henry »

Det kvittar var jag sätter den, loop, setup eller före allt det blir samma ändå.

Hade möjligtvis någon kunnat testa ovan kod och se om det blir samma? För jag börjar misstänka att något hakat upp sig rätt ordentligt vid installationen eller nåt.
Senast redigerad av Henry 5 mars 2019, 17:44:38, redigerad totalt 1 gång.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Arduino, kopplar inte vad som är orsaken till felmeddela

Inlägg av sodjan »

Jo, men du måste ju inte sätta den där alla säger att det är fel!
Då kommer ju alla bara att fortsätta att säga att det är fel... :-)
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: Arduino, kopplar inte vad som är orsaken till felmeddela

Inlägg av johano »

Vad för du för fel om du klistrar in koden nedan EXAKT som den ser ut?

Kod: Markera allt

#include <LiquidCrystal.h>

LiquidCrystal lcd(40, 42, 28, 26, 24, 22);

int tid = millis();
int period = 3000;

void setup() {
   lcd.begin(20, 4);
   lcd.clear();
}

void skriv()
{
    lcd.print("Funkar");
    delay(1000);
    lcd.clear();
}

void loop() 
{
   if (tid >= period)
   {
       skriv();
   }
}

Användarvisningsbild
Henry
Inlägg: 23613
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Re: Arduino, kopplar inte vad som är orsaken till felmeddela

Inlägg av Henry »

sodjan: jag satte det på alla ställen jag testat för att visa folk att det INTE fungerade som någon menade. :)

johano: nu kompileras det plötsligt?! Vad gjorde du för något? För det kompilerade fan inte innan.

Ser dock nu också att minnesanvändningen är 0% och en 2.7kb när den var 3% innan.. vad är det som händer..
Senast redigerad av Henry 5 mars 2019, 17:53:15, redigerad totalt 1 gång.
Skogen
Inlägg: 903
Blev medlem: 5 januari 2013, 22:50:34
Ort: Alingsås

Re: Arduino, kopplar inte vad som är orsaken till felmeddela

Inlägg av Skogen »

"tid" uppdateras väl aldrig?

Kod: Markera allt

#include <LiquidCrystal.h>

LiquidCrystal lcd(40, 42, 28, 26, 24, 22);

int period = 3000;

void skriv()
{
  lcd.print("Funkar");
  delay(1000);
  lcd.clear();

}

void setup() 
{
  lcd.begin(20, 4);
  lcd.clear();
}

void loop() 
{
  if (millis() >= period) 
  {    
    skriv();
  }

}
En variant på första inlägget, kanske funkar?
Dock bara en gång.
Skriv svar