Pagina1 van 1
Forum

Welkom bij de Tweaking4All gemeenschapsforums!
Voor je gaat deelnemen, bekijk de Forum Regels!

Specifieke onderwerpen: Start het onderwerp met de naam van het programma of systeem.
Bijvoorbeeld “MacOS X – Jouw vraag“, of bijvoorbeeld “MS Word – Jouw Tip of Truc“.

Merk op: Omschakelen naar een andere taal zal niet werken als je een post aan het lezen bent aangezien er waarschijnlijk geen vertaling beschikbaar is.



Gosub functie in Ar...
 
Deel:
Meldingen
Alles wissen

[Opgelost] Gosub functie in Arduino

13 Berichten
2 Gebruikers
0 Reactions
1,549 Bekeken
(@danny)
New Member
Deelgenomen: 4 jaar geleden
Berichten: 0
Topic starter  

Hello iedereen, ik heb mij vroeger veel bezig gehouden met de Basic Stamp die men met Basic kon programmeren. Met de bedoeling mij eventjes te familiariseren met een Arduino heb ik mij een starterkit aangeschaft, daarin is o.a. een led array 8x8 te vinden, en nu was mijn droom deze als volgt aan te sturen.

Ik zou namelijk iedere led voor een bepaalde tijd afzonderlijk willen aansturen maar wel beginnende met de led van rij één, kolom één, en dan de led van rij één, kolom twee, en zo verder alle led's van de buiten kant van de led array, om dan verder te gaan met naar midden toe, en ten slotte alles in omgekeerde volgorde.

Voor wat dit moet dienen, wel voor helemaal niets, enkel om het gevoel te hebben dat ik iets gedaan heb.

Nu, om dit te bereiken zou ik dus 128 "routienekes" moeten schrijven waarin telkenmale uit de Arduino een High/Low aan bepaalde pinnen komt.

In Basic zou ik daarvoor een Gosub kunnen gebruiken, maar ik vind dit niet bij de Arduino, en de uitleg die ik daarover kan vinden, blijft dit voor mij onbegrijpelijk, ben daar nog veel te onervaren in, sorry.

Kan iemand mij, aan de hand van deze uitleg een beetje op weg helpen waarvoor dank.

Groetjes

Danny


   
BeantwoordenCiteren
(@danny)
New Member
Deelgenomen: 4 jaar geleden
Berichten: 0
Topic starter  
int row1=A3;
int row2=A2;
int row3=A1;
int row4=A0;
int row5=13;
int row6=12;
int row7=11;
int row8=10;

int col1=2;
int col2=3;
int col3=4;
int col4=5;
int col5=6;
int col6=7;
int col7=8;
int col8=9;

int offTime=500;

void setup() {
// put your setup code here, to run once:

delay,(offTime);

pinMode(row1, OUTPUT);
pinMode(row2, OUTPUT);
pinMode(row3, OUTPUT);
pinMode(row4, OUTPUT);
pinMode(row5, OUTPUT);
pinMode(row6, OUTPUT);
pinMode(row7, OUTPUT);
pinMode(row8, OUTPUT);

pinMode(col1, OUTPUT);
pinMode(col2, OUTPUT);
pinMode(col3, OUTPUT);
pinMode(col4, OUTPUT);
pinMode(col5, OUTPUT);
pinMode(col6, OUTPUT);
pinMode(col7, OUTPUT);
pinMode(col8, OUTPUT);

}

void loop() {
// put your main code here, to run repeatedly:
digitalWrite(row1, HIGH);
digitalWrite(col1, LOW);
delay(offTime);
digitalWrite(row1, LOW);

digitalWrite(row2, HIGH);
digitalWrite(col1, LOW);
delay(offTime);
digitalWrite(row2, LOW);

digitalWrite(row3, HIGH);
digitalWrite(col1, LOW);
delay(offTime);
digitalWrite(row3, LOW);

Ik denk het als hierboven op te lossen


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 11 jaar geleden
Berichten: 2762
 

Hoi Danny,

GOSUB wordt eigenlijk alleen maar in BASIC gebruikt. In andere talen doen we dat eigenlijk met functies. Althans ... het lijkt erop 😊 

In Basic deden we dit (even bedenken dat ik regelnummers heb weggelaten):

...
gosub XYZ;
...

XYZ
-- doe iets
RETURN

Dus gosub springt naar XYZ en gaat daar verder tot we RETURN vinden en dan gaan we verder waar de GOSUB werd aangeroepen.

Met functies doen we dit iets anders. Met name omdat volwassenere talen geen regelnummers gebruiken.

In C ziet het GOSUB voorbeeld er zo uit (zie ook Arduino Functies):

...
functieXYZ();
...

void functieXYZ() {

-- doe iets

}

Wat er tussen de accolades staat wordt uitgevoerd zodra de functie wordt aangeroepen.
Als we daar mee klaar zijn dan gaan we weer verder waar we de functie hadden aangeroepen.

De term "void" wil hier zeggen "niks". Dit geeft aan dat de functie geen waarde of informatie terug geeft.
Stel de functie was gebruikt voor een berekening of zo, dan zouden we "void" vervangen door het data type dat we terug willen sturen - iets wat met GOSUB dus niet kan. Uiteraard mag je zelf bepalen hoe de functie heet, maar let dan wel op dat de naam uniek is en niet overeenkomt met de naam van een andere functie of een zogenaamd "keywoord" in C - het beste is een naam die je meteen verteld wat de functie doet.
Kijk bij Arduino Functies voor wat voorbeelden.

Overigens ga ik nog niet alles verklappen, maar het gebruik van array's maakt dit soort zaken (de ledjes in een bepaald patroon laten lopen) soms stukken gemakkelijker. Ook meteen een (zware) goede oefening om daar mee bekend te worden. Deel 7 en Deel 8 van de Arduino Cursus praten hierover, en daarbij is met name voor deze toepassing Deel 8 een goed begin.


   
BeantwoordenCiteren
(@danny)
New Member
Deelgenomen: 4 jaar geleden
Berichten: 0
Topic starter  

Bedankt Hans, blijkbaar zal het nachtwerk worden ...


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 11 jaar geleden
Berichten: 2762
 

Graag gedaan en zoals ze hier zeggen: Het houdt je van de straat he? 😉 

Ik volg zelf de vuistregel;
Als je in code iets ziet herhalen dan kan dit vaak efficiënter en eleganter gedaan worden met bijvoorbeeld functies, loops, en eventueel arrays.


   
BeantwoordenCiteren
(@danny)
New Member
Deelgenomen: 4 jaar geleden
Berichten: 0
Topic starter  

Voila, de klusser heeft zijn eerste werkende sketch neergeschreven.

Misschien herhalen dat het mijn bedoeling was van een led array 8x8, de 64 ledjes één voor één aan te sturen, beginnende met het buitenste vierkant, dan het tweede vierkant, enz.

Ik heb wel wat moeten wijzigen sinds wat ik hierboven heb laten zien, namelijk eerst alle pinnen HIGH of LOW stellen zodat geen enkele led zou oplichten, en dan bij het aanspreken van een bepaalde led, ze inschakelen voor een bepaalde duur, en ze ook uiteraard uitschakelen.

Het geheel beslaat ongeveer 500 regels, daarin zitten er ook enkele blanco.

Ik toon hier maar enkele van de verschillende codes, en indien iemand zicht geroepen zou voelen om alles te vereenvoudigen, welkom.

Sketch:

int row1=A3;
int row2=A2;
int row3=A1;
int row4=A0;
int row5=13;
int row6=12;
int row7=11;
int row8=10;

int col1=2;
int col2=3;
int col3=4;
int col4=5;
int col5=6;
int col6=7;
int col7=8;
int col8=9;

int offTime=30;
int offTime1=500;

//Waarom twee timers? Wel alles wordt in sneltempo aan en uitgedaan, maar

//de vier ledjes in het midden laat ik tezamen pinken met de tweede timer

void setup() {
// put your setup code here, to run once:

delay,(offTime);

pinMode(row1, OUTPUT);
pinMode(row2, OUTPUT);
pinMode(row3, OUTPUT);
pinMode(row4, OUTPUT);
pinMode(row5, OUTPUT);
pinMode(row6, OUTPUT);
pinMode(row7, OUTPUT);
pinMode(row8, OUTPUT);

pinMode(col1, OUTPUT);
pinMode(col2, OUTPUT);
pinMode(col3, OUTPUT);
pinMode(col4, OUTPUT);
pinMode(col5, OUTPUT);
pinMode(col6, OUTPUT);
pinMode(col7, OUTPUT);
pinMode(col8, OUTPUT);

// Om een LED te laten oplichten moet de row HIGH en de col LOW
// Om te starten alle outputs in de uitschakel stand brengen

digitalWrite(row1, LOW);
digitalWrite(row2, LOW);
digitalWrite(row3, LOW);
digitalWrite(row4, LOW);
digitalWrite(row5, LOW);
digitalWrite(row6, LOW);
digitalWrite(row7, LOW);
digitalWrite(row8, LOW);

digitalWrite(col1, HIGH);
digitalWrite(col2, HIGH);
digitalWrite(col3, HIGH);
digitalWrite(col4, HIGH);
digitalWrite(col5, HIGH);
digitalWrite(col6, HIGH);
digitalWrite(col7, HIGH);
digitalWrite(col8, HIGH);

//Bedoeling is LED per LED te laten oplichten voor een bepaalde
//tijd, deze daarna te doven en naar de volgende te gaan.
// We beginnen bij de LED van rij1 col1 en dan rij2 col1
//En zo verder het buitenste vierkant, dan het tweede enz.

}

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

digitalWrite(row1, HIGH);
digitalWrite(col1, LOW);
delay(offTime);
digitalWrite(row1, LOW);
digitalWrite(col1, HIGH);

digitalWrite(row2, HIGH);
digitalWrite(col1, LOW);
delay(offTime);
digitalWrite(row2, LOW);
digitalWrite(col1, HIGH);

digitalWrite(row3, HIGH);
digitalWrite(col1, LOW);
delay(offTime);
digitalWrite(row3, LOW);
digitalWrite(col1, HIGH);

digitalWrite(row4, HIGH);
digitalWrite(col1, LOW);
delay(offTime);
digitalWrite(row4, LOW);
digitalWrite(col1, HIGH);

digitalWrite(row5, HIGH);
digitalWrite(col1, LOW);
delay(offTime);
digitalWrite(row5, LOW);
digitalWrite(col1, HIGH);

digitalWrite(row6, HIGH);
digitalWrite(col1, LOW);
delay(offTime);
digitalWrite(row6, LOW);
digitalWrite(col1, HIGH);

digitalWrite(row7, HIGH);
digitalWrite(col1, LOW);
delay(offTime);
digitalWrite(row7, LOW);
digitalWrite(col1, HIGH);

digitalWrite(row8, HIGH);
digitalWrite(col1, LOW);
delay(offTime);
digitalWrite(row8, LOW);
digitalWrite(col1, HIGH);

// Tot hier ok voor LED's col 1

digitalWrite(row8, HIGH);
digitalWrite(col2, LOW);
delay(offTime);
digitalWrite(row8, LOW);
digitalWrite(col2, HIGH);

digitalWrite(row8, HIGH);
digitalWrite(col3, LOW);
delay(offTime);
digitalWrite(row8, LOW);
digitalWrite(col3, HIGH);

digitalWrite(row8, HIGH);
digitalWrite(col4, LOW);
delay(offTime);
digitalWrite(row8, LOW);
digitalWrite(col4, HIGH);

digitalWrite(row8, HIGH);
digitalWrite(col5, LOW);
delay(offTime);
digitalWrite(row8, LOW);
digitalWrite(col5, HIGH);

digitalWrite(row8, HIGH);
digitalWrite(col6, LOW);
delay(offTime);
digitalWrite(row8, LOW);
digitalWrite(col6, HIGH);

digitalWrite(row8, HIGH);
digitalWrite(col7, LOW);
delay(offTime);
digitalWrite(row8, LOW);
digitalWrite(col7, HIGH);

digitalWrite(row8, HIGH);
digitalWrite(col8, LOW);
delay(offTime);
digitalWrite(row8, LOW);
digitalWrite(col8, HIGH);

// tot hier ook ok

digitalWrite(row7, HIGH);
digitalWrite(col8, LOW);
delay(offTime);
digitalWrite(row7, LOW);
digitalWrite(col8, HIGH);

digitalWrite(row6, HIGH);
digitalWrite(col8, LOW);
delay(offTime);
digitalWrite(row6, LOW);
digitalWrite(col8, HIGH);

digitalWrite(row5, HIGH);
digitalWrite(col8, LOW);
delay(offTime);
digitalWrite(row5, LOW);
digitalWrite(col8, HIGH);

digitalWrite(row4, HIGH);
digitalWrite(col8, LOW);
delay(offTime);
digitalWrite(row4, LOW);
digitalWrite(col8, HIGH);

digitalWrite(row3, HIGH);
digitalWrite(col8, LOW);
delay(offTime);
digitalWrite(row3, LOW);
digitalWrite(col8, HIGH);

digitalWrite(row2, HIGH);
digitalWrite(col8, LOW);
delay(offTime);
digitalWrite(row2, LOW);
digitalWrite(col8, HIGH);

digitalWrite(row1, HIGH);
digitalWrite(col8, LOW);
delay(offTime);
digitalWrite(row1, LOW);
digitalWrite(col8, HIGH);

// Tot hier ok

digitalWrite(row1, HIGH);
digitalWrite(col7, LOW);
delay(offTime);
digitalWrite(row1, LOW);
digitalWrite(col7, HIGH);

digitalWrite(row1, HIGH);
digitalWrite(col6, LOW);
delay(offTime);
digitalWrite(row1, LOW);
digitalWrite(col6, HIGH);

En zo verder.

Groetjes


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 11 jaar geleden
Berichten: 2762
 

Hier een video van Danny's code (ziet er goed uit!):

 


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 11 jaar geleden
Berichten: 2762
 

Mooi Danny! 

Als ik jouw code bekijk, dan zien we veel herhaling van soortgelijke stappen.
Dit is vaak een indicatie dat het e.e.a. efficiënter kan - jouw code is geen probleem hoor, maar dit is wel een uitstekend voorbeeld om wat dieper te gaan in code schrijven. Alles hieronder is uiteraard optioneel ... 😊 

 

Arrays gebruiken

Als voorbeeld dit stukje code:

int row1=A3;
int row2=A2;
int row3=A1;
int row4=A0;
int row5=13;
int row6=12;
int row7=11;
int row8=10;

int col1=2;
int col2=3;
int col3=4;
int col4=5;
int col5=6;
int col6=7;
int col7=8;
int col8=9;

int offTime=30;
int offTime1=500;

//Waarom twee timers? Wel alles wordt in sneltempo aan en uitgedaan, maar

//de vier ledjes in het midden laat ik tezamen pinken met de tweede timer

void setup() {
// put your setup code here, to run once:

delay,(offTime);

pinMode(row1, OUTPUT);
pinMode(row2, OUTPUT);
pinMode(row3, OUTPUT);
pinMode(row4, OUTPUT);
pinMode(row5, OUTPUT);
pinMode(row6, OUTPUT);
pinMode(row7, OUTPUT);
pinMode(row8, OUTPUT);

pinMode(col1, OUTPUT);
pinMode(col2, OUTPUT);
pinMode(col3, OUTPUT);
pinMode(col4, OUTPUT);
pinMode(col5, OUTPUT);
pinMode(col6, OUTPUT);
pinMode(col7, OUTPUT);
pinMode(col8, OUTPUT);

// Om een LED te laten oplichten moet de row HIGH en de col LOW
// Om te starten alle outputs in de uitschakel stand brengen

digitalWrite(row1, LOW);
digitalWrite(row2, LOW);
digitalWrite(row3, LOW);
digitalWrite(row4, LOW);
digitalWrite(row5, LOW);
digitalWrite(row6, LOW);
digitalWrite(row7, LOW);
digitalWrite(row8, LOW);

digitalWrite(col1, HIGH);
digitalWrite(col2, HIGH);
digitalWrite(col3, HIGH);
digitalWrite(col4, HIGH);
digitalWrite(col5, HIGH);
digitalWrite(col6, HIGH);
digitalWrite(col7, HIGH);
digitalWrite(col8, HIGH);

//Bedoeling is LED per LED te laten oplichten voor een bepaalde
//tijd, deze daarna te doven en naar de volgende te gaan.
// We beginnen bij de LED van rij1 col1 en dan rij2 col1
//En zo verder het buitenste vierkant, dan het tweede enz.

}

We kunnen dit een stuk korter schrijven, bijvoorbeeld zoiets als dit

#define offTime 30
#define offTime1 500 
#define RowColCount 8
// Definieer arrays voor regels en kolommen int row[RowColCount] = { A3, A2, A1, A0, 13, 12, 11, 10 }; int col[RowColCount] = { 2, 3, 4, 5, 6, 7, 8, 9 }; void setup() { for(int i=0; i < RowColCount; i++) { pinMode(row[i], OUTPUT);
pinMode(col[i], OUTPUT); } // Om een LED te laten oplichten moet de row HIGH en de col LOW // Om te starten alle outputs in de uitschakel stand brengen
for(int i=0; i < RowColCount; i++) { digitalWrite(row[i], LOW); digitalWrite(col[i], HIGH); } }

void loop() { }

Misschien even wat uitleg;

Ik heb de twee timers en de regel en kolom nummers met #define gedefinieerd.
Dit is natuurlijk niet verplicht, maar redelijk gebruikelijk.

#define term waarde

Define zorgt ervoor dat de compiler elk voorkomen van een "term" vervangen wordt door "waarde".
Omdat het een zogenaamde compiler-directive is, wordt de regel NIET afgesloten met een punt-komma.

Vervolgens heb ik 2 arrays gemaakt; row en col.
Hierin heb de pin waarden opgeslagen.

 

For-Loops gebruiken

Het gebruik van een array maakt het makkelijker om "herhalingen" in een loop te zetten.
Omdat de matrix vierkant is, kunnen we deze loops zelfs combineren.
Als de matrix niet vierkant had geweest dan hadden we een waarde moeten definiëren voor kolommen en een waarde voor regels.

Het e.e.a. had er dan zo uitgezien (waarbij col en row verschillend kunnen zijn):

#define offTime 30
#define offTime1 500 
#define rowCount 8 #define colCount 8
// Definieer arrays voor regels en kolommen int row[rowCount] = { A3, A2, A1, A0, 13, 12, 11, 10 }; int col[colCount] = { 2, 3, 4, 5, 6, 7, 8, 9 }; void setup() { for(int i=0; i < rowCount; i++) { pinMode(row[i], OUTPUT); } for(int i=0; i < colCount; i++) { pinMode(col[i], OUTPUT); } // Om een LED te laten oplichten moet de row HIGH en de col LOW // Om te starten alle outputs in de uitschakel stand brengen
for(int i=0; i < rowCount; i++) { digitalWrite(row[i], LOW); } for(int i=0; i < colCount; i++) { digitalWrite(col[i], HIGH); } }

void loop() { }

Wat array's betreft: deze beginnen bij nul met tellen. Dus het eerste element van de regels is row[0] (wat in jouw code "row1" was). 

Dus een voorbeeld van jouw code en hoe deze er dan met array's uit ziet:

digitalWrite(row1, HIGH);
digitalWrite(col1, LOW);
delay(offTime);
digitalWrite(row1, LOW);
digitalWrite(col1, HIGH);

wordt dan

digitalWrite(row[0], HIGH);
digitalWrite(col[0], LOW);
delay(offTime);
digitalWrite(row[0], LOW);
digitalWrite(col[0], HIGH);

 

Functies gebruiken

Omdat we al even spraken over gosub en functies, en je het aanzetten van een LED, en weer uitzetten van een LED, herhaaldelijk gebruikt, zouden we dit in een eenvoudige functie kunnen gieten. We kunnen dan X (row) en Y (col) doorgeven. Ik heb de offTime er ook maar als parameter bij gezet, zodat je op andere momenten dezelfde functie kunt gebruiken waarbij de wachttijd (offtime) anders kan zijn.

Als voorbeeld:

void LedAanUit(int X, int Y, int WachtTijd) {
  // LED AAN 
  digitalWrite(row[X], HIGH);
  digitalWrite(col[Y], LOW);
  // Wachten
  delay(WachtTijdTime);
  // LED UIT
  digitalWrite(row[X], LOW);
  digitalWrite(col[Y], HIGH);
}

We kunnen nu elke keer dat je dit in jouw code schrijft (niet vergeten dat "tellen" in een array bij nul begint):

digitalWrite(row1, HIGH);
digitalWrite(col1, LOW);
delay(offTime);
digitalWrite(row1, LOW);
digitalWrite(col1, HIGH);

digitalWrite(row2, HIGH);
digitalWrite(col1, LOW);
delay(offTime);
digitalWrite(row2, LOW);
digitalWrite(col1, HIGH);

digitalWrite(row3, HIGH);
digitalWrite(col1, LOW);
delay(offTime);
digitalWrite(row3, LOW);
digitalWrite(col1, HIGH);

De code vervangen door (dus weer niet vergeten dat tellen bij nul begint:

LedAanUit(0,0,offTime);
LedAanUit(1,0,offTime);
LedAanUit(2,0,offTime); 

Niet alleen wordt de code nu aanzienlijk korter, en makkelijker, maar ook veel beter leesbaar wordt.

Hiermee kunnen we do code in jouw vorige post in z'n geheel schrijven als:

#define offTime 30
#define offTime1 500 
#define RowColCount 8

int row[RowColCount] = { A3, A2, A1, A0, 13, 12, 11, 10 };
int col[RowColCountCount] = { 2,  3,  4,  5,  6,  7,  8,  9  };


void setup() {

  delay,(offTime);

  for(int i=0; i < RowColCount; i++) {
    pinMode(row[i], OUTPUT);
    pinMode(col[i], OUTPUT);
  }

  // Om een LED te laten oplichten moet de row HIGH en de col LOW
  // Om te starten alle outputs in de uitschakel stand brengen
  
  for(int i=0; i < RowColCountCount; i++) {
    digitalWrite(row[i], LOW);
    digitalWrite(col[i], HIGH);
  }
}

void loop() {
  LedAanUit(0,0,offTime);
  LedAanUit(1,0,offTime);
  LedAanUit(2,0,offTime); 
  LedAanUit(3,0,offTime); 
  LedAanUit(4,0,offTime);
  LedAanUit(5,0,offTime); 
  LedAanUit(6,0,offTime); 
  LedAanUit(7,0,offTime);

  // Tot hier ok voor LED's col 1
 
  LedAanUit(7,1,offTime); 
  LedAanUit(7,2,offTime); 
  LedAanUit(7,3,offTime);
  LedAanUit(7,4,offTime); 
  LedAanUit(7,5,offTime); 
  LedAanUit(7,6,offTime); 
  LedAanUit(7,7,offTime); 

  // tot hier ook ok

  LedAanUit(6,7,offTime);
  LedAanUit(5,7,offTime); 
  LedAanUit(4,7,offTime);
  LedAanUit(3,7,offTime);
  LedAanUit(2,7,offTime);
  LedAanUit(1,7,offTime);
  LedAanUit(0,7,offTime);

  // Tot hier ok

  LedAanUit(0,6,offTime);
  LedAanUit(0,5,offTime);
  // etc
}

void LedAanUit(int X, int Y, int WachtTijd) {
  // LED AAN 
  digitalWrite(row[X], HIGH);
  digitalWrite(col[Y], LOW);
  // Wachten
  delay(WachtTijdTime);
  // LED UIT
  digitalWrite(row[X], LOW);
  digitalWrite(col[Y], HIGH);
}

 

Nog een keer: For-Loops

Maar zelfs dit kan nog korter, door middel van for-loops:

void loop() {
  for(int i=0; i < RowColCount; i++) {
    LedAanUit(0,i,offTime);
  }

  // Tot hier ok voor LED's col 1
  for(int i=1; i < RowColCount; i++) {
    LedAanUit(7,i,offTime);
  } 

  // tot hier ook ok
  for(int i=6; i >= 0; i--) {
    LedAanUit(i,7,offTime);
  } 

  // etc
}

 

Ik snap helemaal dat dit wat veel kan zijn, en dit is zeker niet als kritiek bedoelt, maar eerder om je verder te helpen met code schrijven voor de Arduino.

Dsu ... Food for thought 😊 


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 11 jaar geleden
Berichten: 2762
 

Omdat ik het toch een leuke oefening vond, hier de bedrading het schema die ik met Fritzing heb getekend.

De weerstandswaarde heb ik gegokt op 470 Ohm, en ik hoop dat ik de bedrading OK heb gedaan. 😉 \

 

 


   
BeantwoordenCiteren
(@danny)
New Member
Deelgenomen: 4 jaar geleden
Berichten: 0
Topic starter  

Hellokes, met de bedoeling gebruik te maken van wat ik hier als raad kon vinden van Hans, heb ik het eerste deel van de raadgevingen willen gebruiken en was het de bedoeling het verschil te begrijpen/zien tussen wat een specialist er van maakt, en wat ik ervan gemaakt heb. Maar ik krijg een foutmelding bij het compileren namelijk "EXIT STATUS 1", graag hulp waarvoor dank. Groetjes. Danny

#define offTime 30
#define offTime1 500 
#define RowColCount 8
// Definieer arrays voor regels en kolommen int row[RowColCount] = { A3, A2, A1, A0, 13, 12, 11, 10 }; int col[RowColCount] = { 2, 3, 4, 5, 6, 7, 8, 9 }; void setup() { for(int i=0; i < RowColCount; i++) { pinMode(row[i], OUTPUT);
pinMode(col[i], OUTPUT); } // Om een LED te laten oplichten moet de row HIGH en de col LOW // Om te starten alle outputs in de uitschakel stand brengen
for(int i=0; i < RowColCount; i++) { digitalWrite(row[i], LOW); digitalWrite(col[i], HIGH); } }


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 11 jaar geleden
Berichten: 2762
 

Hoi Danny,

ik denk dat je vergeten bent de void loop te plaatsen.
Aan het einde van de sketch in jouw post het volgende toevoegen:

void loop() {
// leeg
}

Bij een Arduino wordt namelijk eerst de "setup" uitgevoerd en dan automatisch de "loop" die eindeloos herhaald wordt.
Zonder de loop stop de Arduino, en een resultaat (1) wordt dan teruggegeven (EXIT).


   
BeantwoordenCiteren
(@danny)
New Member
Deelgenomen: 4 jaar geleden
Berichten: 0
Topic starter  

Dat was het Hans, bedankt.

Beginners (klussers) fout 😡 


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 11 jaar geleden
Berichten: 2762
 

Geen probleem - overkomt ons allemaal en ik had het er even bij kunnen zetten 😉 


   
BeantwoordenCiteren
Deel: