Go Down

Topic: eindelijk (Read 11366 times) previous topic - next topic

sterretje

#45
Jan 23, 2021, 06:59 pm Last Edit: Jan 23, 2021, 07:04 pm by sterretje
OK, het eerste wat je moet doen is je programma in the IDE fatsoenlijk indenteren. Er is een functie (tools-> autoformat) die dat voor je doet. Daarna zie je het volgende stukje
Code: [Select]
void setup() {
  {
    // set up the LCD's number of columns and rows:
    lcd.begin(20, 4);
    lcd.print("TRAPPE");
    lcd.setCursor(11, 0);
    lcd.print("GARAGE");
    lcd.setCursor(0, 1);
    lcd.print("L.HAL");
    lcd.setCursor(11, 1);
    lcd.print("S.HAL");
    lcd.setCursor(0, 2);
    lcd.print("KORR");
    lcd.setCursor(11, 2);
    lcd.print("VASKER");
    lcd.setCursor(0, 3);
    lcd.print("GARAGEP");
    lcd.setCursor(11, 3);
    lcd.print("DYR");
  };





  void loop()

Het feit dat void loop() niet aan het begin van een regel is gezet door de autoformat geeft aan dat je ergens ervoor een } mist voor void loop().

Nadat je dat weg gewerkt hebt en een nieuwe autoformat doet kom je het volgende tegen
Code: [Select]
void loop()
// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
(if (digitalRead(inputPin1) == LOW))
{
  digitalWrite(outputPin1, HIGH);
} else {

Het feit dat (if (digitalRead(inputPin1) == LOW)) aan het begin van de regel staat geeft aan dat je een { mist na void loop().

Na dat opgelost te hebben en weer een autoformat te hebben gedaan zul je zien dat er geen } staat aan het begin van de laatste regel (eigenlijkde regel erna, vermoed ik). Dat geeft aan dat je loop() functie niet is afgesloten. Je zult } ergens moeten toevoegen tot de laatste aan het begin van een nieuwe regel staat; je mist er drie).

Verder moet je even kijken of dit de bedoeling is
Code: [Select]
  (if (digitalRead(inputPin1) == LOW))
  {
    digitalWrite(outputPin1, HIGH);
  } else {
    // turn LED off:
    digitalWrite(outputPin1, LOW);
    // read the state of the pushbutton value:
    buttonState = digitalRead(inputPin1);


    // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
    if (inputPin2 == HIGH) {

De tweede if is onderdeel van de else. Misschien is het de bedoeling, misschien niet.

Terugkomend op die tweede if, inputPin2 heeft de waarde 25; de kans dat 25 gelijk is aan HIGH is ongeveer nul; digitalRead vergeten?

En die eerste if moet niet tussen ( en ). Even de eerste ( en de laatste  ) kwijt raken.

Dat is het voor nu.

PS
Let even op hoe ik code snippets heb gepost door het te plaatsen tussen [code] en [/code] (de zogenaamde code tags)
If you understand an example, use it.
If you don't understand an example, don't use it.

Electronics engineer by trade, software engineer by profession. Trying to get back into electronics after 15 years absence.

Hedalen

Arduino: 1.8.13 (Windows Store 1.8.42.0) (Windows 10), Board: "Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"


C:\Users\janih\Desktop\VERLICHTING-NIEUW\VERLICHTING-NIEUW.ino: In function 'void setup()':


C:\Users\janih\Desktop\VERLICHTING-NIEUW\VERLICHTING-NIEUW.ino:55:1: warning: declaration of 'void loop()' has 'extern' and is initialized


 (if (digitalRead(inputPin1) == LOW)


 ^


VERLICHTING-NIEUW:55:1: error: initializer provided for function


VERLICHTING-NIEUW:132:1: error: expected ',' or ';' at end of input


 }


 ^


VERLICHTING-NIEUW:132:1: error: expected '}' at end of input


Multiple libraries were found for "LiquidCrystal.h"


 Used: C:\Users\janih\Documents\Arduino\libraries\LiquidCrystal


 Not used: C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.42.0_x86__mdqgnx93n4wtt\libraries\LiquidCrystal


exit status 1


initializer provided for function






This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

shooter

HEDALEN als je een nieuw onderwerp wil starten dan krijg je ook goede reacties ipv een lijntje onderin 2018 das 4 jaar oud.
als antwoord op je probleem is dat je een loop begint met void loop (){ en eindigt met een }
de compiler waarschuwd je maar het is niet helemaal duidelijk natuurlijk wat er aan de hand is.
en verwacht niet dat alle software foutloos is van wie dan ook, houd het simpel en begin eens met blink en dan blink without delay.
er is trouwens nog een forum op arduinoforum.nl
paul deelen
shooter@home.nl
making controls with codesys PLC and arduino

shooter

en je hebt een paar keer lcd library in je computer staan zorg dat al die libs in het documentendirectory staan en verder niet

paul deelen
shooter@home.nl
making controls with codesys PLC and arduino

MAS3

#49
Jan 24, 2021, 12:21 am Last Edit: Jan 24, 2021, 09:06 pm by MAS3
Je kunt de foutmelding ook kopiƫren door op het betreffende knopje te klikken in de IDE.
Vervolgens kun je het complete foutbericht hier ook tussen [code]   [/code] tags op het forum zetten.

Ondanks dat je telkens vergeet ons te helpen jou te helpen, heb ik toch even gekeken of ik iets voor je kan vinden in wat je hier laat zien.
Daarvoor heb ik de tekst die je geplaatst hebt eens gekopieerd, en de eerste regel maar even weggelaten omdat die er niet logisch uitziet.

Wat ik meen te kunnen zien, is dat je met allerlei onnodige haakjes (deze dus) aan de gang gaat, en dat je de noodzakelijke {accolades} niet onder controle hebt.
Dat is vast even wennen, en iedereen hier heeft daar fouten mee gemaakt.
Maar het is een basis die je onder controle moet hebben als je met C++ (volgens sommigen is er een Arduino taal, maar er bestaat helemaal geen Arduino taal) aan de gang wil.

De IDE kan je er mee helpen dit onder controle te houden:
Wanneer je de cursor rechts naast een (, ), {, of } zet, zal de IDE een lichtgekleurd kadertje om het daarbij behorende ), (, }, of {.
Zo kun je controleren of dit wel klopt.

Je kunt ook jezelf helpen dit goed te doen.
Want telkens als je een ( typt, doe dan meteen een ) er achter aan en ga dan terug naar de voor de ) om daar neer te zetten wat er moet komen.
En hetzelfde natuurlijk ook met de {}.

[edit]
Oeps, ik zie nu dat er nog een pagina achteraan kwam nadat ik gereageerd had.
Dat maakt de informatie uit dit bericht echter niet minder waar, dus ik laat m lekker staan.

Verder raad ik je aan nog eens de gebruiksaanwijzing van dit forum te lezen, het is er niet voor niets.
En dan ook gelijk even de welkomst thread, want die staat ook vol met tips die voor jou heel behulpzaam zullen blijken.
[/edit]
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

Hedalen

het project is eigenlijk:

er komen 8 draden van benedenverdieping, deze draden kunnen "hoog" of "laag" zijn
de draden moeten dan via de poorten 23, 25, 27, 29, 31, 33, 35 en 37
de poorten 22, 24, 26, 28, 30, 32, 34 en 36 "hoog" of "laag" maken.

dit om 8 LEDs aan te sturen, en om tekst op een 20 04 LCD

dus ik had gedacht om het meeste te copieeren en plakken van de sketch : "button" en "Hello World"

de fouten komen hoogst waarschijnlijk voort uit de "{ }" en de "( )"

sterretje

Hoe worden die ingangs draden bestuurd? Met knoppen? Of met wat anders?

Voor lange draden zul je je ervan bewust moeten zijn dat deze gemakkelijk rotzooi uit de omgeving kunnen op pikken en mogelijk valse signalen op pikt (bv een LOW die niet van het begin van je bedrading komt).
If you understand an example, use it.
If you don't understand an example, don't use it.

Electronics engineer by trade, software engineer by profession. Trying to get back into electronics after 15 years absence.

Hedalen

via een sturings print met chips, dus 5V
Nu nog met een pic chip, later misschien vervang ik die print voor n Arduino Mega

MAS3

Zoals aangegeven, los van de code moet je daar wel goed over nadenken.
Want 5 volt signalen uit een controllertje, PIC of wat anders maakt niet uit, zijn niet bedoeld om grote afstanden van meters te overbruggen.
Dergelijke lange draden zijn hele mooie antennes.
Daar gaan stoorsignalen op binnenkomen die je systeem aardig kunnen laten spoken.

Uiteraard zijn daar best oplossingen voor te bedenken, maar je moet je daar wel van bewust zijn.
Je kunt dat ook uitwerken nadat je je systeem werkend hebt gemaakt en hebt getest met kortere draden.
Maar wanneer de oplossing uiteindelijk een andere manier van communiceren word, heb je wel veel tijd gestoken in iets dat je niet gaat gebruiken.
Ongetwijfeld heb je daar dan wel van geleerd, maar dat maakt het niet minder frustrerend.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

Hedalen

het is n UTP cat5 kabeltje van ongeveer 3 meter, dus niet echt lang, geen echte stoorsignalen in de buurt

sterretje

Als het werkt, werkt het. Maar 3 meter is zo ongeveer een lichtjaar in electronica :D En zeg nooit dat er geen stoor signalen in de buurt zijn ;)

Goed, om de hele boel een beetje te vereenvoudigen, onderstaand een voorbeeldje om je wat op weg te helpen.

Ik zou beginnen om eens wat te lezen over arrays. Op het moment dat je variabele namen gaat gebruiken met nummers (om onderscheid te maken) ben je in principe op de verkeerde weg.

Plaats het volgende voor setup().
Code: [Select]
const byte inputPins[] = {23, 25, 27};
const byte outputPins[] = {22, 24, 26};

Nu kun je in setup door de arrays lopen om de pinnen als output of input te definieren
Code: [Select]
void setup()
{
  // set input pins to input
  for (byte cnt = 0; cnt < sizeof(inputPins); cnt++)
  {
    pinMode(inputPins[cnt], INPUT);
  }

  // and output pins as output
  for (byte cnt = 0; cnt < sizeof(outputPins); cnt++)
  {
    pinMode(outputPins[cnt], OUTPUT);
  }

  ...
  ...
}

sizeof geeft het aantal bytes dat het array gebruikt en in dit geval is dat hetzelfde als het aantal elementen in het array (omdat het een array van bytes is).

En in loop() kun je ook een for-loop gebruiken. Ik heb buttonState lokaal gemaakt omdat deze alleen in loop() wordt gebruikt
Code: [Select]
void loop()
{
  // variable for reading the pushbutton status
  int buttonState = 0;

  // below assumes that there are as many input pins as there are associated output pins

  // below assumes that there are as many input pins as there are output pins and that there is a one-on-one relationship
  for (byte cnt = 0; cnt < sizeof(inputPins); cnt++)
  {
    buttonState = digitalRead(inputPins[cnt]);
    digitalWrite(outputPins[cnt], buttonState);
  }
}

Het is me opgevallen dat de eerste ingang in je code omgedraaid is (laag geeft hoog en vv); dit kan een foutje van jouw kant zijn of het kan de bedoeling zijn. Bovenstaande gaat ervan uit dat het een foutje van jouw kant is aangezien het wat gemakkelijker was als voorbeeld.

Vervolgens kun je wat verder studeren en structs of classes gebruiken. Je kunt dat zien als een record in een telefoon boek waar gerelateerde informatie samen is opgeslagen (bv naam, telefoon nummer en adres); in dit geval het pin nummer van een ingang en het pin nummer van de bijbehorende uitgang.

Plaats het volgende voor setup()
Code: [Select]
// struct to link pins
struct IO
{
  const byte inputPin;
  const byte outputPin;
};

// array of linked pins
IO pinMapping[] =
{
  {23, 22},
  {25, 24},
  {27, 26},
};

De struct linkt een ingans pin en een uitgans pin; daarna wordt een array gedefinieerd met de juiste gegevens.

Vervolgens kun je in setup de volgende for-loop gebruiken om de pinnen als ingang of uitgan te definieren
Code: [Select]
void setup()
{
  // configure inputs and outputs
  for (byte cnt = 0; cnt < sizeof(pinMapping) / sizeof(pinMapping[0]); cnt++)
  {
    pinMode(pinMapping[cnt].inputPin, INPUT);
    pinMode(pinMapping[cnt].outputPin, OUTPUT);
  }
 
  ...
  ...
}

Omdat de elementen nu niet een (1) byte zijn, is er een andere constructie gebruikt in de for-loop om het aantal elementen te berekenen; deze methode kan gebruikt worden voor enig array (array met bytes, met ints, met floats etc).

En in loop() kun je weer door het array lopen met een for-loop
Code: [Select]
void loop()
{

  // variables will change
  int buttonState = 0;         // variable for reading the pushbutton status

  // below assumes that there are as many input pins as there are output pins and that there is a one-on-one relationship
  for (byte cnt = 0; cnt < sizeof(pinMapping) / sizeof(pinMapping[0]); cnt++)
  {
    buttonState = digitalRead(pinMapping[cnt].inputPin);
    digitalWrite(pinMapping[cnt].outputPin, buttonState);
  }
}

Je kunt de IO struct uitbreiden met tekst (bv TRAPPE, GARAGE enz.) en de plaats van die tekst op het scherm enz.

Volledig priogramma voor 3 IOs; lcd spul verwijdert om te concentreren op arrays en structs
Code: [Select]
// struct to link pins
struct IO
{
  const byte inputPin;
  const byte outputPin;
};

// array of linked pins
IO pinMapping[] =
{
  {23, 22},
  {25, 24},
  {27, 26},
};


void setup()
{
  // configure inputs and outputs
  for (byte cnt = 0; cnt < sizeof(pinMapping) / sizeof(pinMapping[0]); cnt++)
  {
    pinMode(pinMapping[cnt].inputPin, INPUT);
    pinMode(pinMapping[cnt].outputPin, OUTPUT);
  }
}

void loop()
{

  // variables will change
  int buttonState = 0;         // variable for reading the pushbutton status

  // below assumes that there are as many input pins as there are output pins and that there is a one-on-one relationship
  for (byte cnt = 0; cnt < sizeof(pinMapping) / sizeof(pinMapping[0]); cnt++)
  {
    buttonState = digitalRead(pinMapping[cnt].inputPin);
    digitalWrite(pinMapping[cnt].outputPin, buttonState);
  }
}
If you understand an example, use it.
If you don't understand an example, don't use it.

Electronics engineer by trade, software engineer by profession. Trying to get back into electronics after 15 years absence.

Hedalen

 :smiley-sad-blue: ik kom er niet uit, OMG

sterretje

Waar uit? Uit de kast ?

:D :D :D
If you understand an example, use it.
If you don't understand an example, don't use it.

Electronics engineer by trade, software engineer by profession. Trying to get back into electronics after 15 years absence.

Hedalen

hahaha, leuk hoor

sterretje

Ik vond hem wel grappig, ja.

 :smiley-lol:  :smiley-lol:  :smiley-lol:


Maar serieus, je zult meer details moeten geven. Bv
1)
Is dit met je originele programma of gebasserd op het voorbeeld in antwoord 55?
2)
Toon je poging om het werkende te krijgen.
If you understand an example, use it.
If you don't understand an example, don't use it.

Electronics engineer by trade, software engineer by profession. Trying to get back into electronics after 15 years absence.

Go Up