simpel programmeervraagje over declareren

Arduino specifieke Software
Berichten: 76
Geregistreerd: 05 Nov 2016, 09:42

simpel programmeervraagje over declareren

Berichtdoor spaansebrabander » 07 Jan 2017, 17:54

Ik ben nog iet lang bezig met Arduino, maar heb me nu voorgenomen me beter te gaan verdiepen in programmeren.
Nu ben ik al enige uren bezig met iets te proberen en dat lukt maar steeds niet. Nu kom ik achter iets vreemds. Ik maak het even heel heel simpel

void setup() {
Serial.begin(9600);
int p = 1;
}
void loop() {
Serial.println(p);
}

Ik krijg bij Serial.println(p) de foutmelding dat in de void loop "p" niet gedeclareerd is.
Ik heb p toch gedeclareerd in de setup, waarom moet dat dan nogmaals in de loop?

Advertisement

Gebruikers-avatar
Berichten: 39
Geregistreerd: 04 Dec 2016, 22:32

Re: simpel programmeervraagje over declareren

Berichtdoor ruud-572 » 07 Jan 2017, 17:58

Zet die declaratie maar eens helemaal bovenaan in je sketch, boven setup()... Iets met global en local variabels, Google daar maar eens op!
Software engineer industriële automatisering

Berichten: 76
Geregistreerd: 05 Nov 2016, 09:42

Re: simpel programmeervraagje over declareren

Berichtdoor spaansebrabander » 07 Jan 2017, 18:28

Bij onderstaande werkende schets hoef ik niet te declareren.
void setup() {
// put your setup code here, to run once:
{for(int k=2; k<=7; k++)
pinMode(k,OUTPUT);}
}
void loop() {
{for (int i = 2; i<=7; i++)
zetLampjeAan (i);}
}
void zetLampjeAan(int lampje){
digitalWrite(lampje,HIGH);
delay(1000);
}

Hoe kan dat?
Ik zit ook steeds te stoeien met de accolades. Als ik de accolade achter void loop weghaal en accolade achter "zetLampjAan (i)"ook, werkt de schets ook. Zijn daar simpele regels voor?

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: simpel programmeervraagje over declareren

Berichtdoor Koepel » 07 Jan 2017, 19:01

Gebruik accolades zodat de code zo helder mogelijk te lezen is, en dus ook zo duidelijk mogelijk voor jezelf.
Bijvoorbeeld op deze manier:
Code: Alles selecteren
// Een sketch om zomaar wat te proberen

void setup()
{
  for (int k=2; k<=7; k++)
  {
    pinMode(k,OUTPUT);
  }
}


void loop()
{
  for (int i = 2; i<=7; i++)
  {
    zetLampjeAan (i);
  }
}


void zetLampjeAan(int lampje)
{
  digitalWrite(lampje,HIGH);
  delay(1000);
}

Ieder heeft zijn eigen stijl van inspringen en gebruik van accolades. Als het consequent wordt gebruikt en duidelijk is wat er gebeurt dan is dat prima. Bij jouw sketch zit het echter teveel in elkaar gedraaid. Dus daarom geef ik er de voorkeur aan om het zo "open" mogelijk op te schrijven zoals in mijn voorbeeld.

Bij variabelen in 'c' en 'c++' hebben ze het vaak over de 'scope'. Dat is het deel van het programma waarin de variabele bekend is. Als je bijvoorbeeld een variabele in één functie declareert dan is de 'scope' beperkt tot die ene functie. Je kunt die variabele dan niet in een andere functie gebruiken. Wanneer je een variabele boven setup() declareert, zoals ruud-572 schreef, dan is het een globale variabele en die kun je wel in iedere functie gebruiken.

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: simpel programmeervraagje over declareren

Berichtdoor shooter » 07 Jan 2017, 20:33

als je die int p in de loop zet gaat het wel goed, (nou ja je buffer loopt snel vol omdat je veel te snel stuurt.
paul deelen
shooter@home.nl

Berichten: 76
Geregistreerd: 05 Nov 2016, 09:42

Re: simpel programmeervraagje over declareren

Berichtdoor spaansebrabander » 08 Jan 2017, 01:44

Als je een stukje gebruikt als:

void loop()
{
for (int i = 2; i<=7; i++)
{
zetLampjeAan (i);
}
}
(keurig Koepel, dat ga ik ook proberen, Ik had het wel iets netter dan ik hier stuurde, maar had het tbv kopie een beetje in elkaar geschoven)

Hoef je die i dan niet te declareren?

Dan heb ik nog een vraag over een dergelijke "for constructie" Gaan die lampjes allemaal branden binnen 1 loop van void loop of in 6 loops?

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: simpel programmeervraagje over declareren

Berichtdoor Koepel » 08 Jan 2017, 02:42

De for-loop is een statement dat eerst wordt uitgevoerd en afgerond. Dus die doet alles wat binnen de for-loop staat, en pas daarna wordt de for-loop verlaten. De for-loop doet gewoon zijn werk en heeft geen idee dat het in een functie zit die Arduino toevallig ook "loop()" heeft genoemd.

Dat de Arduino functie "loop()" zo heet, dat is zomaar een gekozen naam.

De declaratie van de 'i' zit er in:
Code: Alles selecteren
for (int i = 2; i<=7; i++)

Het stukje "int i" is de declarate van 'i' binnen de for-loop. De "scope" van variabele 'i' is alleen binnen die for-loop. Daarbuiten is 'i' niet bekend.

P.S.: Wil je de knop "Code" of "Select a Synctax" gebruiken, om de sketch weer te geven. Je kunt met de knop "Voorbeeld" eerst kijken of het gelukt is.

Berichten: 76
Geregistreerd: 05 Nov 2016, 09:42

Re: simpel programmeervraagje over declareren

Berichtdoor spaansebrabander » 08 Jan 2017, 14:57

gesnopen.
Ik heb nog een paar andere vraagjes, die zal ik in een nieuwe vraag stellen met naam: opbouw schets. Ik hoop dat jullie weer op dezelfde positieve wijze zullen reageren.
Voorlopig bedankt

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: omuviop en 14 gasten