simpel programmeervraagje over declareren
8 berichten
• Pagina 1 van 1
- spaansebrabander
- Berichten: 76
- Geregistreerd: 05 Nov 2016, 09:42
simpel programmeervraagje over declareren
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?
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
Re: simpel programmeervraagje over declareren
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
- spaansebrabander
- Berichten: 76
- Geregistreerd: 05 Nov 2016, 09:42
Re: simpel programmeervraagje over declareren
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?
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?
Re: simpel programmeervraagje over declareren
Gebruik accolades zodat de code zo helder mogelijk te lezen is, en dus ook zo duidelijk mogelijk voor jezelf.
Bijvoorbeeld op deze manier:
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.
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.
Re: simpel programmeervraagje over declareren
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
shooter@home.nl
- spaansebrabander
- Berichten: 76
- Geregistreerd: 05 Nov 2016, 09:42
Re: simpel programmeervraagje over declareren
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?
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?
Re: simpel programmeervraagje over declareren
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:
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.
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.
- spaansebrabander
- Berichten: 76
- Geregistreerd: 05 Nov 2016, 09:42
Re: simpel programmeervraagje over declareren
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
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
8 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: omuviop en 14 gasten