traffic lights [opgelost]

hallo,

ik heb hier uit een boek eens proberen verkeerslichten na te maken ,
gevonden uit een boek.

Ik heb alles ingegeven, en de fouten er uitgehaald,
maar toch geeft hij het volgende probleem aan ;

Arduino: 1.6.3 (Windows 7), Board:"Arduino Uno"
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard C:\Users\dries\AppData\Local\Temp\build887013342772191138.tmp\sketch_apr04atraffic.cpp -o C:\Users\dries\AppData\Local\Temp\build887013342772191138.tmp\sketch_apr04atraffic.cpp.o
sketch_apr04atraffic.ino: In function 'void loop()':
sketch_apr04atraffic.ino:51:43: error: too few arguments to function 'void digitalWrite(uint8_t, uint8_t)'
In file included from sketch_apr04atraffic.ino:11:0:
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:126:6: note: declared here
void digitalWrite(uint8_t, uint8_t);
** ^**
Fout bij het compileren.

Hieronder,
het volledige programma ...

#define westButton 3
#define eastButton 13
#define westRed 2
#define westYellow 1
#define westGreen 0
#define eastRed 12
#define eastYellow 11
#define eastGreen 10

#define yellowBlinkTime 500
boolean trafficWest = true;
int flowTime = 1000; // amount of time to let traffic flow
int changeDelay = 2000; // amount of time between colors

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

//setup digital I/O pins
pinMode(westButton, INPUT);
pinMode(eastButton, INPUT);
pinMode(westRed, OUTPUT);
pinMode(westYellow, OUTPUT);
pinMode(westGreen, OUTPUT);
pinMode(eastRed, OUTPUT);
pinMode(eastYellow, OUTPUT);
pinMode(eastGreen, OUTPUT);

// set initial state for lights - west side is green first

digitalWrite(westRed, LOW);
digitalWrite(westYellow, LOW);
digitalWrite(westGreen, HIGH);
digitalWrite(eastRed, HIGH);
digitalWrite(eastYellow, LOW);
digitalWrite(eastGreen, HIGH);
}

void loop()
{
if (digitalRead(westButton)== HIGH) // Request west > east traffic flow
{
if(trafficWest != true)
// only continue if traffic flowing in the east direction
{
trafficWest=true; // change traffic flow flag to west > east
delay(flowTime); // give time for traffic to flow
digitalWrite(eastGreen, LOW); // change east-facing lights from green to yellow to red

digitalWrite(eastYellow, HIGH);
digitalWrite(changeDelay);
digitalWrite(eastYellow, LOW);
digitalWrite(eastRed, HIGH);
delay(changeDelay);
for (int a=0; a<5 ; a++) // blink yellow light
{
digitalWrite(westYellow, LOW);
delay (yellowBlinkTime);
digitalWrite(westYellow, HIGH);
delay(yellowBlinkTime);
}
digitalWrite(westYellow, LOW);
digitalWrite(westRed, LOW); //change west-facing lights from red to green
digitalWrite(westGreen, HIGH);
}
}
if(digitalRead(eastButton)==HIGH) // request east > west traffic flow
{
if(trafficWest == true)
// only continue if traffic flow is in the opposite (west) direction
{
trafficWest=false; //change traffic flow flag to east > west
delay(flowTime);
digitalWrite(westGreen, LOW);
// change west lights from green to yellow flag to east > west
digitalWrite(westYellow, HIGH);
delay(changeDelay);
digitalWrite(westYellow, LOW);
digitalWrite(westRed, HIGH);
delay(changeDelay);
for (int a=0 ; a<5 ; a++) // bink yellow light
{
digitalWrite(eastYellow, LOW);
delay(yellowBlinkTime);
digitalWrite(eastYellow, HIGH);
delay(yellowBlinkTime);
}
digitalWrite(eastYellow, LOW);
digitalWrite(eastRed, LOW); // change east-facing lights from red to green
digitalWrite(eastGreen, HIGH);
}
}

}

heeft er iemand raad wat er foutloopt ?
Alvast bedankt
dries

De foutmelding vertelt je dat je fout zit in regel 51, en op positie 43.

Op die regel doe je dit:

                  digitalWrite(changeDelay);

Je vertelt er dus dat er iets geschreven moet worden, maar niet wat er dan geschreven moet worden.
Als je dat gecorrigeerd hebt, zal ie wel compileren.

Wanneer je dit aan de gang hebt, is het leuk om er eens mee te gaan spelen.
Dus dat je verkeerslicht net ff iets anders reageert op de verschillende zaken en zo.
Zo leer je de sketch net ff iets beter kennen, en oefen je spelenderwijze je programmeerkunsten.

Veel plezier ermee.

welk board heb je aanstaan?
en welke poort (want dat wordt dan de volgende fout.
inderdaad je hebt gelijk foutmelding is wat kryptisch.

is om mee te beginnen wel een hele kluif hoor.
en om even mas3 aan te vullen er is geen pin 2000 dus tja daar zal een typefout staan.

jah, idd...
Toch wel vreemd dat ik er nog een hele tijd op heb moeten zoeken wat er nu verkeerd was.
Het leek zo correct, maar toch fout... lol

Ik ging er zowiezo eens mee spelen, anders moet ik hiet niet maken, want dit is idd al een hele
kluif .

Nu alvast bedankt jongens voor mij vooruit te helpen !

Thumbs up .
:grin:

driesdep:
jah, idd...
Toch wel vreemd dat ik er nog een hele tijd op heb moeten zoeken wat er nu verkeerd was.
Het leek zo correct, maar toch fout... lol

Ik ging er zowiezo eens mee spelen, anders moet ik hiet niet maken, want dit is idd al een hele
kluif .

Nu alvast bedankt jongens voor mij vooruit te helpen !

Thumbs up .
:grin:

Beter commentarïeren van je programma. En voor je zelf duidelijk maken wat je doet. Ook dan kan je nog last krijgen van programmeursblindheid, maar maakt het wel een stuk eenvoudiger. Bijgaand een simpel programmatje voor het besturen van een lak machientje om hengels te lakken (de hengel moet roteren).

/**
 * @file    FishingRodVarnishMotorControl.ino
 * @author     Nico Verduin
 * @date      04-04-2015
 *
 * @mainpage FishingRodVarnishMotorControl
 * Program to control a small geared motor (max 70mA) using PWM and a potentiometer. The motor is used
 * to turn a fishing rod while the Varnish is drying.
 *
 *
 * @par Version Control
 * | Revision     | Author         | Date         |
 * | :-------     | :-----         | :----        |
 * | $Revision$ | $Author$         | $Date$     |
 *
 *
 * @par License info
 *
 * source program to control a small geared motor with start/stop control
 *
 * Copyright (C) 2015  Nico Verduin
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * Program : FishingRodVarnishMotorControl  Copyright (C) 2015  Nico Verduin
 * This is free software, and you are welcome to redistribute it.
 *
 */
#include "Arduino.h"
//
// Pin definitions
//
#if defined __AVR_ATtinyX5__        // ATTINY85 pin setting

#define PWM_PIN         0            // Pin 5 - PWM pin used to drive motor speed
#define RUN_STOP_PIN    1            // Pin 6 - Run Stop momentary switch
#define SPEED_PIN      A1            // Pin 7 - Analog input from potentiometer
#define RUN_LED_PIN     3            // Pin 2 - Run led
#define STOP_LED_PIN    4            // Pin 3 - Stop Led

#else                                // Assuming an arduino UNO

#define PWM_PIN         3            // Pin 3  - PWM pin used to drive motor speed
#define RUN_STOP_PIN   14            // Pin 14 - Run Stop momentary switch
#define SPEED_PIN      A5            // Pin A5 - Analog input from potentiometer
#define RUN_LED_PIN     4            // Pin 4 - Run led
#define STOP_LED_PIN    5            // Pin 5 - Stop Led

#endif

//
// global defines & parameters
//
#define ALLOW_RESPONSE    250                // respond to a button again after a second
#define PWM_OFFSET         80                // motor does not run below this
//
// global variables
//
bool        waitingForRelease = false;    // if true we are waiting for the switch to be released
bool        allowMotorToRun   = false;    // do not start the motor yet
uint16_t    analogReading;                // analog value from potentiometer
uint8_t     pwmValue;                     // value sent tot PWM
unsigned long ignoreTimer;                // once a button is pressed ignore it for a second
/**
 * @name setup()
 * initialize the program
 */
void setup()
{
    //
    // Setup IO
    //
    pinMode(PWM_PIN     , OUTPUT);
    pinMode(RUN_STOP_PIN, INPUT_PULLUP);
    pinMode(RUN_LED_PIN , OUTPUT);
    pinMode(STOP_LED_PIN, OUTPUT);
    //
    // set Leds
    //
    digitalWrite(RUN_LED_PIN    , LOW);
    digitalWrite(STOP_LED_PIN   , HIGH);
    //
    // set PWM
    //
    analogWrite(PWM_PIN, 0);
    //
    // set the ignore timer
    //
    ignoreTimer = millis();
}

/**
 * @name loop()
 * main loop of program and runs endlessly
 */
void loop()
{
    //
    // respond to the switch after some delay. In this way we can
    // support even the worst case quality buttons
    //
    if ((millis() - ignoreTimer) > ALLOW_RESPONSE) {
        //
        // check if button is pressed
        //
        if (digitalRead(RUN_STOP_PIN) == LOW) {
            //
            // the button is pressed. However check first if it was released first
            // after previous action
            //
            if (!waitingForRelease){
                //
                // we may support this button press so flip motor activity. if false, the
                // motor will stop. else it will run
                //
                allowMotorToRun = !allowMotorToRun;
                //
                // and set program to wait for button to be released in future
                //
                waitingForRelease = true;
                //
                // set ignore timer. This is used to delay some time
                // before checking the buttons in future
                //
                ignoreTimer = millis();
            }
        } else {
            //
            // the button is in any case released
            //
            waitingForRelease = false;
        }
    }
    //
    // if the motor is allowed to run, get its speed setting
    //
    if (allowMotorToRun) {
        //
        // set the correct led
        //
        digitalWrite(RUN_LED_PIN    , HIGH);
        digitalWrite(STOP_LED_PIN   , LOW);
        //
        // get the analog reading from the potentiometer
        //
        analogReading = analogRead(SPEED_PIN);
        //
        // and map it to a value from PWM_OFFSET
        //
        pwmValue = map(analogReading, 0, 1023, PWM_OFFSET, 255);
        //
        // and set the motor speed
        //
        analogWrite(PWM_PIN,pwmValue);
    } else {
        //
        // set the correct led
        //
        digitalWrite(RUN_LED_PIN    , LOW);
        digitalWrite(STOP_LED_PIN   , HIGH);
        //
        // stop the motor
        //
        analogWrite(PWM_PIN, 0);
    }
}

Het verschil in stijl van programmeren lijkt me duidelijk. Je kan er alles van vinden. Maakt mij niet uit :grin: . Maar ik kan heel snel door de code fietsen. Ook een paar jaar later. 't is ff meer werk met typen, maar het betaald zich dubbel en dwars terug.

het verschil met nico is toch wel dat wij niet betaald worden.
maar om een vishengel te draaien is het wel erg mooi.

Nico heeft meestal wel gelijk met zijn commentaren, MAAR...

Dan moet je wel een code hebben die je zelf schrijft.
Het overtypen van de code uit een boek is nauwelijks zelf schrijven (ook al maak je een vergissing tijdens dat typen).
Het toevoegen van commentaar is dan erg lastig.

Aan de andere kant, als je tijdens het overtypen tegelijk zou bedenken wat je dan eigenlijk aan het typen bent, kun je die gedachten wel toevoegen als commentaar.
Alleen is het dan de vraag of die gedachten wel kloppen.

ik heb die code idd overgetypt, omdat het mijn eerste week is dat ik hiermee terug bezig ben.
Ik ben nu idd aan het uitzoeken hoe het marcheert ...

Kan ik de waarden van een variabel te zien krijgen in een tabel ofzo, terwijl men die uitvoert ?
Ik dacht dat dit mogelijk was in C, of C++ ...

kan je uit lezen in je monitor

vind ik niet, maar niet erg ...

er bestaat wel iets om online de geheugens te leze, zelfs een simulator als je geen uno hebt, de simpelste manier is om de variabelen die je wilt zien in serial monitor te krijgen door in je programma
in setup serial.Begin(9600)
en als je een variabele wilt zien dan serial.lPrint (varnaam); te zetten (mag overal ook in functies)
op je PC in de IDE zit een monitor.

ok, ik zal dit eens proberen, bedankt.

Ik heb wel een uno, maar het is soms interessant om de variabelen te zien veranderen op het programma ... )

Bedankt

shooter:
het verschil met nico is toch wel dat wij niet betaald worden.
maar om een vishengel te draaien is het wel erg mooi.

Niet alles wat ik schrijf is betaald hoor. Heeft meer te maken met zelfdiscipline....

  • of het gebrek eraan -

@driesdep:

Om met de seriële monitor de waarde van variabelen te kunnen zien, moet je er wel voor zorgen dat die sketch zich daar bewust van is.
Dat betekent dat je de sketch die variabelen naar de seriële poort moet laten sturen, anders zullen ze daar ook nooit belanden.
Aangezien je hier nog maar net mee bezig bent, is het de vraag of je dat nu al wil doen.
Maar anders betekent het dat je je moet inlezen over het gebruik van de seriële poort van je Arduino.
Als je dat onder de knie hebt is het gebruik ervan wel een heel mooie om te debuggen (net zoals het gebruik van een display).

ja nee,we gaan daar nog niet aan beginnen.
Maar ik heb hier het bugje gevonden in mijn bordje .

Bedankt

ik plaats hier nog eens het programma, met de nodige commentaren ...
:smiley:

#define westButton 3
#define eastButton 13
#define westRed 2
#define westYellow 1
#define westGreen 0
#define eastRed 12
#define eastYellow 11
#define eastGreen 10

#define yellowBlinkTime 500  // Pinktijd van het oranje
boolean trafficWest = true;
int flowTime = 1000;        // tijd na het drukken van de drukknop , om de auto's nog laten passeren in andere richting
int changeDelay = 2000;    //  Tijd tussen de kleuren van de verkeerslichten

void setup() 
{

//setup digital I/O pins

pinMode(westButton, INPUT);
pinMode(eastButton, INPUT);
pinMode(westRed, OUTPUT);
pinMode(westYellow, OUTPUT);
pinMode(westGreen, OUTPUT);
pinMode(eastRed, OUTPUT);
pinMode(eastYellow, OUTPUT);
pinMode(eastGreen, OUTPUT);

// set initial state for lights - west side is green first

digitalWrite(westRed, LOW);
digitalWrite(westYellow, LOW);
digitalWrite(westGreen, HIGH);
digitalWrite(eastRed, HIGH);
digitalWrite(eastYellow, LOW);
digitalWrite(eastGreen, HIGH);
}

void loop() 
{
if (digitalRead(westButton)== HIGH)                       // Drukknop om westlichten op groen te plaatsen
  {
    if(trafficWest != true)                              // check de richting van de traffic. Is de traffic niet door het westen ??
                
                {
                  trafficWest=true;                      // verander de richting van het traffic naar het westen
                  delay(flowTime);                      // Na het drukken op de knop, de tijd geven om nog door te rijden in het oosten.(wachttijd in het westen)
                  digitalWrite(eastGreen, LOW);         // Veranderen lichten in het oosten, Groen uit
                  
                  digitalWrite(eastYellow, HIGH);        // In het oosten , oranje aan en daarna terug uit met een tijd van 2 seconde aan
                  delay(changeDelay);
                  digitalWrite(eastYellow, LOW);
                  digitalWrite(eastRed, HIGH);            // Oostlichten op rood
                  delay(changeDelay);                     // 2 secondes wachten vooraleer de westlichten verspringen
                  for (int a=0; a<5 ; a++)    // blink yellow light
                  {
                    digitalWrite(westYellow, LOW);        //orange blinkt 5 maal aan en uit (rood licht is nog aan)
                    delay (yellowBlinkTime);
                    digitalWrite(westYellow, HIGH);
                    delay(yellowBlinkTime);
                    }
                    digitalWrite(westYellow, LOW);
                    digitalWrite(westRed, LOW);          // na 5 maal pinken, doen we rood en oranje uit, en groen licht aan.
                    digitalWrite(westGreen, HIGH);
                    }
   }
   
   
   // Omgekeer nu, we plaatsen de oostlichten op groen.
   
   if(digitalRead(eastButton)==HIGH)    // Drukknop om oostlichten op groen te plaatsen.
   {
     if(trafficWest == true)            // Check de richting van de traffic. Is de taffic niet naar het oosten ?
   
     {
       trafficWest=false;               //verander de richting van de traffic naar het oosten (westen = false)
       delay(flowTime);                  // Tijd om nog door te rijden in het westen
       digitalWrite(westGreen, LOW);      // Groen uitdoen in het oosten
   
       digitalWrite(westYellow, HIGH);    // Oranje doen branden, een (changedelay) aantal seconden.
       delay(changeDelay);
       digitalWrite(westYellow, LOW);
       digitalWrite(westRed, HIGH);        // Rood aan in het westen
       delay(changeDelay);                  
       for (int a=0 ; a<5 ; a++)           // nadat het rood aan is in het westen wachten we nog een (changedelay) aantal seconden, om oranje 5 maal te doen blinken
       {                                    // Oostrood is nog steed hoog, dus rood brandt, oranje pinkt met een frequentie van  (yellosBlinkTime)
         digitalWrite(eastYellow, LOW);
         delay(yellowBlinkTime);
         digitalWrite(eastYellow, HIGH);
         delay(yellowBlinkTime);
        }
        digitalWrite(eastYellow, LOW);      // Na het 5 maal herhalen, doven we orange en rood, en steken we groen in het oosten aan.
        digitalWrite(eastRed, LOW);  
        digitalWrite(eastGreen, HIGH);
      } 
     }           

}

En, wat was de bug in het boardje ?

Mijn componenten stonden heel dicht bij elkaar, waardoor ze mss elkaar aanraakten,

en mijn schakelaars gingen ook niet naar de massa .

Gezien alles te dicht bij elkaar stond, heb ik dan maar eens alles opnieuw gemaakt,
waardoor alles duidelijker werd .