Help ons, de code werkt niet

IDE gerelateerde berichten
Berichten: 1
Geregistreerd: 13 Mrt 2019, 12:41

Help ons, de code werkt niet

Berichtdoor jochum.jur » 13 Mrt 2019, 12:49

Hallo allemaal,

We zijn bezig met een opdracht voor onze opleiding en we komen er echt niet uit.
Zou iemand tips kunnen geven zodat we verder kunnen?

M.v.g.
Koen, Jacob & Jochum

Opdracht:
"Sluit 2 leds aan op pinnummers D5 en D6. Bij de waarden 0 tot en met 511 moet de led op pin D5 langzaam verder omhoog “faden”. Bij de waarden 511 tot en met 1023 gaat de led op pin D6 steeds feller branden. Als de potentiometer dicht wordt gedraaid gaat eerst de led op pin D6 minder vel branden totdat deze uit is en vanaf waarde 511 gaat de led op D5 minder vel branden tot deze uit is.
Op de seriële monitor komt het volgende:
Led 1: 0…511
Led 2: 511…1023

Sluit vervolgens twee schakelaars aan op pinnummers D2 en D3. Pas het geschreven programma aan zodat led 1 op pinnummer D5 alleen aangaat als de schakelaar op D2 is ingeschakeld. Doe hetzelfde voor led 2 en de schakelaar op D3. Het aansluitschema voor een schakelaar is gegeven in het figuur hiernaast."



Onze code:
Code: Alles selecteren
void setup()
  {
      Serial.begin(9600);                       //Maakt het mogelijk om met USB de arduino aan te kunnen sluiten
      pinMode(5,OUTPUT);                        //Zet pin 5 als output
      pinMode(6,OUTPUT);                        //Zet pin 6 als output
      pinMode(2,INPUT);                         //Zet pin 2 als input
  }

void loop()
  {
      int waarde;                               //Zet variabele "waarde"
      int schak1;                               //Zet variabele "schak1"
     
      schak1=digitalRead(2);                    //Lees waarde af in pin 2
     
      if (waarde < 511)                         //Als de variabele "waarde" onder 511 zit
        {
          waarde = analogRead(0);               
          delay(50);                            //Tijdsduur bovenstaande actie
          analogWrite(5,HIGH);                  //Zet lampje 5 aan
          analogWrite(6,LOW);                   //Zet lampje 6 uit
        }
      else if (waarde >= 511)                   //Als de variabele "waarde" gelijk is aan, of hoger is dan 511
        {
          analogWrite(6,HIGH);                  //Zet lampje op pin 6 aan
          analogWrite(5,HIGH);                  //Zet lampje op pin 5 aan
          waarde = analogRead(0);               
          delay(50);                            //Tijdsduur bovenstaande actie
        }
  }

Advertisement

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

Re: Help ons, de code werkt niet

Berichtdoor Koepel » 13 Mrt 2019, 13:38

Het is gemakkelijker om in het begin van de loop() alle waarden van de sensoren en ingangen te verzamelen, en de sensoren en ingangen slechts één keer te lezen. Dus niet zomaar ergens halverwege de potentiometer lezen en ook niet twee keer lezen.

De naam van de variabele "waarde" geeft niet aan wat het is. Die heeft een betere naam nodig. Bijvoorbeeld: "de_analog_waarde_van_de_potentiometer" of "draaipotInstellingVan0tot1023". Verzin iets dat kort is en gemakkelijk te lezen en toch duidelijk maakt wat het is.

Lees de referentie van analogWrite() eens door: https://www.arduino.cc/reference/en/language/functions/analog-io/analogwrite/.
De tweede parameter heeft een waarde van 0 tot en met 255 en niet LOW of HIGH. Pas je sketch aan zodat die parameter ook echt die waarden krijgt, niet meer en niet minder. Voor beide leds.
Schrijf voor beide leds eens op papier welke waarde ze krijgen bij verschillende standen van de potentiometer. Bijvoorbeeld bij 511 is de waarde voor led1 255 en voor led2 0.

Als iets niet kleiner dan 511 is dan... ? dan is het dus vanzelf groter of gelijk aan 511. Je hoeft bij de "else" dat dus niet nog eens extra te testen.

Als je een delay() gebruikt, weet je dan ook waarom? Je kunt de sketch vertragen om het denderen van de knoppen tegen te gaan. Bijvoorbeeld helemaal onderin de loop() een delay(10) of delay(20).

Waar is de header met commentaar ? Bijvoorbeeld met de datum; voor welk Arduino board het is; Welke versie Arduino IDE je hebt gebruikt; voor wie of wat je deze opdracht doet; enzovoorts.

Tip: Je kunt dit simuleren met Tinkercad.com bij het onderdeel Circuits. Het is dan wel nodig om je bij autodesk aan te melden.

Je kunt indruk maken door nog iets extra's toe te voegen. Het menselijk oog ziet helderheid met een logaritmische schaal. Dat is bijna gelijk aan log10. Je zou de helderheid van de leds kunnen aanpassen aan het menselijk oog.

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

Re: Help ons, de code werkt niet

Berichtdoor shooter » 17 Mrt 2019, 23:54

kijk naar hoe map werkt. dan kun je dus je ingang omzetten naar een analoog uitgang pin 5 en 6 zijn PWM uitgangen dus in jullie verhaal een stuk schrijven over analoog uit met PWM. let op voor negatieve waarden. een ingang werkt tot 1023 en een uitgang tot 255 dus je zult een beetje moeten rekenen.
lees de opdracht goed!!
en bedenk wat je op je scherm wilt laten zien.
paul deelen
shooter@home.nl

Terug naar Arduino IDE

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast