Sida 1 av 4

Arduino, kopplar inte vad som är orsaken till felmeddelandet

Postat: 5 mars 2019, 16:45:53
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.

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

Postat: 5 mars 2019, 16:49:03
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();
  }

}

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

Postat: 5 mars 2019, 16:50:33
av Henry
Har prövat det med men det blir samma oavsett var jag lägger den.

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

Postat: 5 mars 2019, 16:53:16
av adent
Då gör du något knasigt tror jag, jag ändrade mitt inlägg ovan, reload:a och kolla igen!

MVH: Mikael

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

Postat: 5 mars 2019, 17:08:25
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();
  }

}

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

Postat: 5 mars 2019, 17:14:18
av Shimonu
Nej, du får inte ha en funktion i en annan funktion. Nu la du den i setup().

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

Postat: 5 mars 2019, 17:15:04
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.

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

Postat: 5 mars 2019, 17:30:56
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:

}

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

Postat: 5 mars 2019, 17:37:20
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:

}

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

Postat: 5 mars 2019, 17:38:26
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:

}

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

Postat: 5 mars 2019, 17:40:00
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.

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

Postat: 5 mars 2019, 17:42:35
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... :-)

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

Postat: 5 mars 2019, 17:43:44
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();
   }
}


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

Postat: 5 mars 2019, 17:51:18
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..

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

Postat: 5 mars 2019, 17:52:15
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.