If: gebeurt iets, Else niets

Wat moet je doen als je een code schrijft voor je arduino project en je wil dat als er op een knop gedrukt word iets gebeurt en als er op die knop niet gedrukt word niets gebeurt. (if en else)
bij deze code draaiden de motoren voor ik op de aanknop had gedrukt...:

#include <NewPing.h>
#include <Servo.h>

// Instellingen voor de ultrasone sensor
#define TRIGGER_PIN 9  // pin waarop de Trigger is aangesloten
#define ECHO_PIN 10    // pin waarop de Echo is aangesloten
#define MAX_DISTANCE 200 // maximale afstand in centimeters

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Maak een NewPing object aan

// Maak een Servo object aan
Servo myServo;  
const int servoPin = 11; // pin waarop de servo is aangesloten

// Motor en knop pins
const int motor1 = 2;    // linker motor
const int motor2 = 3;    // rechter motor 
const int knop1 = 4;     // aanknop
const int knop2 = 5;     // uitknop

void setup() {
  Serial.begin(9600);              // Start seriƫle communicatie
  pinMode(motor1, OUTPUT);         // motor 1 instellen als output
  pinMode(motor2, OUTPUT);         // motor 2 instellen als output
  pinMode(knop1, INPUT);           // knop 1 instellen als input
  pinMode(knop2, INPUT);           // knop 2 instellen als input
  myServo.attach(servoPin);        // Koppel de servo aan de juiste pin
  myServo.write(0);                // Begin met de servo in positie 0 graden
}

void loop() {
  // Motor bediening met knoppen
  int switchState1 = digitalRead(knop1);
  int switchState2 = digitalRead(knop2);
    
  Serial.println(switchState1);    // Print de status van knop 1
  Serial.println(switchState2);    // Print de status van knop 2

  if (switchState1 == HIGH) {       // als knop 1 high is:
    digitalWrite(motor1, HIGH);   
    digitalWrite(motor2, HIGH);     // Motor 1 & 2 aan
  } else if (switchState2 == HIGH) { // als knop 2 high is:
    digitalWrite(motor1, LOW);
    digitalWrite(motor2, LOW);      // Motor 1 & 2 uit
  } else {                           // anders:
    digitalWrite(motor1, LOW);
    digitalWrite(motor2, LOW);      // Motor 1 & 2 uit
  }

  // Meete afstand met ultrasone sensor
  delay(50);                        // Korte pauze tussen metingen
  float afstand = sonar.ping_cm(); // Meet de afstand in centimeters

  // Toon de afstand in de seriƫle monitor
  Serial.print("Afstand: ");
  Serial.print(afstand);
  Serial.println(" cm");

  // Controleer of de afstand minder dan 50 cm is
  if (afstand > 0 && afstand < 50) {
    myServo.write(90);              // Draai de servo naar 90 graden
    delay(1000);                    // Houd de servo 1 seconde in deze positie
    myServo.write(0);               // Draai de servo terug naar 0 graden
    delay(1000);                    // Wacht een seconde voordat je opnieuw meet
  }
}

Gebruik je pull-up of pull-down weerstanden. Indien niet, dan heb je waarschijnlijk last van zwevende ingangen. Die pikken signalen op uit de omgeving en daar reageert je programma op.

Je kunt het onderstaande gebruiken.

  pinMode(knop1, INPUT_PULLUP);           // knop 1 instellen als input
  pinMode(knop2, INPUT)_PULLUP);           // knop 2 instellen als input

De knoppen moeten dan geplaatst worden tussen pin en GND; een ingedrukte knop zal laag geven en een niet ingedrukte knop hoog.

dat moet dan zeker op de plaats van:

pinMode(knop1, INPUT);           // knop 1 instellen als input
  pinMode(knop2, INPUT);           // knop 2 instellen als input

?

Inderdaad

Met pull up wordt dat dan
if (switchState1 == LOW) { // als knop 1 ingedrukt is

Zo ook voor de andere knop.
Leo..

eigenlijk helpt dit niets, Sterretje, ik denk dat u mij verkeerd begrijpt. Dat komt door mij, ik had het verkeerd uitgelegd. Ik wil eigenlijk dat er zoiets staat (effe in het nederlands): als dat niet zo is dan gebeurt er niets. maar bij de aanknop moet er dan niet staan:

     } else {                           // anders:
         digitalWrite(motor 1, LOW);
         digitalWrite(motor 2, LOW);    // motor 1 & 2 low (“blijven` uit) 

en omgekeerd:

     } else {                           // anders:
         digitalWrite(motor 1, HIGH);   
         digitalWrite(motor 2, HIGH);   // motor 1 & 2 low (“blijven` aan) 

Ik hoop dat u er iets mee kan.

Als je wilt dat knop1 de motor inschakelt en knop2 de motor uitschakelt moet je de verschillende if niet combineren.

Gebaseerd op je origineel in de opening post

  if (switchState1 == HIGH) {       // als knop 1 high is:
    digitalWrite(motor1, HIGH);   
    digitalWrite(motor2, HIGH);     // Motor 1 & 2 aan
  }

  if (switchState2 == HIGH) { // als knop 2 high is:
    digitalWrite(motor1, LOW);
    digitalWrite(motor2, LOW);      // Motor 1 & 2 uit
  } 

Bedankt!!! Hier kom ik een stuk verder mee!

tot zo ver...
Ik had deze code gefertificeerd:

// de ene motor is op 2 aangesloten en de andere op 3
// de aanknop is op 4 aangesloten en de uitknop op 5
// de servo is op 11 aangesloten
// aansluitingen voor de ultrasoon afstandssensor:
//trigger pin: 9
//echo pin: 10

#include <NewPing.h>
#include <Servo.h>

const int motor1 = 2;             // linker motor
const int motor2 = 3;             // rechter motor
const int knop1 = 4;              // aanknop
const int knop2 = 5;              // uitknop

int switchState1 = digitalRead(knop1);
int switchState2 = digitalRead(knop2);

void setup() {
Serial.begin(9600);
pinMode(motor1, OUTPUT);
pinMode(motor2, OUTPUT);  // motor 1 & 2 instellen als output
pinMode(knop1, INPUT);
pinMode(knop2, INPUT);    // knop 1 & 2 instellen als input

}

void loop() {
 
if (switchState1 == HIGH) {       // als knop1 high is:
    digitalWrite(motor1, HIGH);  
    digitalWrite(motor2, HIGH);     // Motor1 & Motor2 aan
  }

  if (switchState2 == HIGH) { // als knop2 high is:
    digitalWrite(motor1, LOW);
    digitalWrite(motor2, LOW);      // Motor1 & Motor2 uit
  }
}

en ik kreeg een compilation error:

C:\Users\sangd\AppData\Local\Temp.arduinoIDE-unsaved2025022-8800-dq75e0.1qy78\sketch_jan22a\sketch_jan22a.ino: In function 'void setup()':
C:\Users\sangd\AppData\Local\Temp.arduinoIDE-unsaved2025022-8800-dq75e0.1qy78\sketch_jan22a\sketch_jan22a.ino:52:6: error: redefinition of 'void setup()'
void setup() {
^~~~~
C:\Users\sangd\AppData\Local\Temp.arduinoIDE-unsaved2025022-8800-dq75e0.1qy78\sketch_jan22a\sketch_jan22a.ino:19:6: note: 'void setup()' previously defined here
void setup() {
^~~~~
C:\Users\sangd\AppData\Local\Temp.arduinoIDE-unsaved2025022-8800-dq75e0.1qy78\sketch_jan22a\sketch_jan22a.ino: In function 'void loop()':
C:\Users\sangd\AppData\Local\Temp.arduinoIDE-unsaved2025022-8800-dq75e0.1qy78\sketch_jan22a\sketch_jan22a.ino:58:6: error: redefinition of 'void loop()'
void loop() {
^~~~
C:\Users\sangd\AppData\Local\Temp.arduinoIDE-unsaved2025022-8800-dq75e0.1qy78\sketch_jan22a\sketch_jan22a.ino:28:6: note: 'void loop()' previously defined here
void loop() {
^~~~
Multiple libraries were found for "Servo.h"
Used: C:\Users\sangd\OneDrive\Documents\Arduino\libraries\Servo
Not used: C:\Users\sangd\AppData\Local\Arduino15\libraries\Servo
exit status 1

Compilation error: redefinition of 'void setup()'

Wat is er aan de hand!!! :weary:

De "multiple definition" kan mogelijk op een cache probleem in de IDE duiden.

  1. Kopieer je sketch even naar bv notepad.
  2. Sluit de IDE en open de IDE weer.
  3. Open een nieuwe sketch.
  4. Sluit de oude sketch.
  5. Kopieer de inhoud van notepad naar je nieuwe sketch.
  6. Sla je nieuwe sketch op met een zinnige naam.
  7. Compileer.

Alternatief (voor IDE 2.x)
Delete de directory C:\Users\yourUsername\AppData\Local\arduino of de twee directories die daar in staan. De directories zullen worden aangemaakt zodra je opnieuw compileert.

Ik denk dat je geverifieerd bedoelt :wink: We noemen het in het algemeen gecompileerd.

meest waarschijnlijke is dat in de lib <NewPing.h> of <Servo.h>

al een setup is geschreven. Kan het zijn dat je een van deze lib zelf hebt gemaakt/gewijzigd
?

@Frits1956

De fout refereert alleen naar de ino file, niet naar andere files.

En de sketch compileert op mij PC.

Je leest eerst van je drukknoppen, en daarna stel je ze in als ingangen.
Ik denk niet dat daar de fout vandaan komt, maar ik zou het wel anders doen.
Ik weet ook niet of de IDE eerst setup opzoekt en uitvoert, en daarna de rest van je code.

De eerste foutmelding klaagt over een probleem op regel 52 en karakter 6 op die regel.
Maar je hebt helemaal geen 52 regels in de code die je laat zien.

Heb je toevallig een sketch gekopieerd en per ongeluk 2 keer in de IDE geplakt ?

En heb je sterretje's advies om eens opnieuw te plakken naar de IDE al geprobeerd ?

wat betreft:

Ik had per ongeluk niet de hele code geplakt, deze doet het, betreft

ook op mijn laptop. Hier is de goede code:

// de ene motor is op 2 aangesloten en de andere op 3
// de aanknop is op 4 aangesloten en de uitknop op 5
// de servo is op 11 aangesloten
// aansluitingen voor de ultrasoon afstandssensor:
//trigger pin: 9
//echo pin: 10

#include <NewPing.h>
#include <Servo.h>

const int motor1 = 2;             // linker motor
const int motor2 = 3;             // rechter motor
const int knop1 = 4;              // aanknop
const int knop2 = 5;              // uitknop

int switchState1 = digitalRead(knop1);
int switchState2 = digitalRead(knop2);

void setup() {
Serial.begin(9600);
pinMode(motor1, OUTPUT);
pinMode(motor2, OUTPUT);  // motor 1 & 2 instellen als output
pinMode(knop1, INPUT);
pinMode(knop2, INPUT);    // knop 1 & 2 instellen als input

}

void loop() {
 
if (switchState1 == HIGH) {       // als knop1 high is:
    digitalWrite(motor1, HIGH);  
    digitalWrite(motor2, HIGH);     // Motor1 & Motor2 aan
  }

  if (switchState2 == HIGH) { // als knop2 high is:
    digitalWrite(motor1, LOW);
    digitalWrite(motor2, LOW);      // Motor1 & Motor2 uit
  }
}

// Instellingen voor de ultrasone sensor
#define TRIGGER_PIN 9  // pin waarop de Trigger is aangesloten
#define ECHO_PIN 10    // pin waarop de Echo is aangesloten
#define MAX_DISTANCE 200 // maximale afstand in centimeters

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Maak een NewPing object aan

// Maak een Servo object aan
Servo myServo;  
const int servoPin = 11; // pin waarop de servo is aangesloten

void setup() {
  myServo.attach(servoPin); // Koppel de servo aan de juiste pin
  myServo.write(0); // Begin met de servo in positie 0 graden
  Serial.begin(9600); // Begin seriƫle communicatie voor debugging
}

void loop() {
  delay(50); // Korte pauze tussen metingen
  float afstand = sonar.ping_cm(); // Meet de afstand in centimeters
 
  // Toon de afstand in de seriƫle monitor
  Serial.print("Afstand: ");
  Serial.print(afstand);
  Serial.println(" cm");

  // Controleer of de afstand minder dan 50 cm is
  if (afstand > 0 && afstand < 50) {
    // Draai de servo naar 90 graden
    myServo.write(90);
    delay(1000); // Houd de servo 1 seconde in deze positie
    // Draai de servo terug naar 0 graden
    myServo.write(0);
    delay(1000); // Wacht een seconde voordat je opnieuw meet
  }
}

sorry voor het nogmaalse ongemak...

Ik ben nu klaar met het bewerken van de code die ik wil hebben :sweat_smile: Maar ik wel nog wel graag dat hij bewerkt word.
Hier is hij:

// de ene motor is op 2 aangesloten en de andere op 3
// de aanknop is op 4 aangesloten en de uitknop op 5
// de servo is op 11 aangesloten
// aansluitingen voor de ultrasoon afstandssensor:
//trigger pin: 9
//echo pin: 10
//1
//2 ja
//3 ja
//4 ja
//5 ja
//6 ja
//7
//8
//9 ja
//10ja
//11ja
//12
//13
#include <NewPing.h>
#include <Servo.h>

const int motor1 = 2;             // linker motor
const int motor2 = 3;             // rechter motor
const int knop1 = 4;              // aanknop
const int knop2 = 5;              // uitknop

int switchState1 = digitalRead(knop1);
int switchState2 = digitalRead(knop2);

void setup() {
Serial.begin(9600);
pinMode(motor1, OUTPUT);
pinMode(motor2, OUTPUT);  // motor 1 & 2 instellen als output
pinMode(knop1, INPUT);
pinMode(knop2, INPUT);    // knop 1 & 2 instellen als input

}

void loop() {
 
if (switchState1 == HIGH) {       // als knop1 high is:
    digitalWrite(motor1, HIGH);  
    digitalWrite(motor2, HIGH);     // Motor1 & Motor2 aan
  }

  if (switchState2 == HIGH) { // als knop2 high is:
    digitalWrite(motor1, LOW);
    digitalWrite(motor2, LOW);      // Motor1 & Motor2 uit
  }
}

// Instellingen voor de ultrasone sensor
#define TRIGGER_PIN 9  // pin waarop de Trigger is aangesloten
#define ECHO_PIN 10    // pin waarop de Echo is aangesloten
#define MAX_DISTANCE 200 // maximale afstand in centimeters

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Maak een NewPing object aan

// Maak een Servo object aan
Servo myServo;  
const int servoPin = 11; // pin waarop de servo is aangesloten

void setup() {
  myServo.attach(servoPin); // Koppel de servo aan de juiste pin
  myServo.write(0); // Begin met de servo in positie 0 graden
  Serial.begin(9600); // Begin seriƫle communicatie voor debugging
}

void loop() {
  delay(50); // Korte pauze tussen metingen
  float afstand = sonar.ping_cm(); // Meet de afstand in centimeters
 
  // Toon de afstand in de seriƫle monitor
  Serial.print("Afstand: ");
  Serial.print(afstand);
  Serial.println(" cm");

  // Controleer of de afstand minder dan 50 cm is
  if (afstand > 0 && afstand < 50) {
    // Draai de servo naar 90 graden
    myServo.write(90);
    delay(1000); // Houd de servo 1 seconde in deze positie
    // Draai de servo terug naar 0 graden
    myServo.write(0);
    delay(1000); // Wacht een seconde voordat je opnieuw meet
  }
}

int ldrPin = A0;              // middelste pin
int ldrVal = 0;               // +
int ledPin = 6;     //LED

void setup() {
  Serial.begin(9600);         // Stel de seriƫle monitor in
  pinMode(LED_BUILTIN, OUTPUT);
}

// Herhaal oneindig
void loop() {
  
  ldrVal = analogRead(ldrPin);    // Lees de analoge waarde van de LDR
  Serial.println(ldrVal);         // Toon de waarde in de seriƫle monitor

  if (ldrVal < 200) {             // Als de LDR waarde lager is dan 200
    digitalWrite(ledPin, HIGH);   // Zet LED aan
  } else {
    digitalWrite(ledPin, LOW);    // LED uit
  }

  delay(100);                     // Pauzeer 1 seconden
  
}

int buzzerPin = 8;   // buzzer
int pirPin = 7;   // Pin voor de HC-S501 sensor
int pirValue;      // Uitgelezen sensor waarde

void setup() {
  pinMode(buzzerPin, OUTPUT);    // Stel de ledPin in als uitvoer
  pinMode(pirPin, INPUT);     // Stel de pirPin in als invoer
  digitalWrite(ledPin, LOW);  // Zet het ingebouwde LED uit
}

// Herhaal oneindig
void loop() {
  pirValue = digitalRead(pirPin); // Lees de waarde van de PIR uit
  digitalWrite(buzzerPin, pirValue); // Schrijf de gelezen waarde naar de buzzer  
}

Ik hoor graag nog iets!

(als het goed is 129 regels :grin:)

Je hebt twee setup() functies en twee loop() functies. Dat gaat niet werken.

Je zult de twee setup() functies moeten combineren en de twee loop() functies ook.

Sterker nog, het zijn er van beide 4.
Behalve dat je van ieder 1 mag hebben (de IDE klaagt dus terecht), moet je ook controleren of je niets dubbel gebruikt.
Dus geen dubbele (globale) variabele namen, en geen pins die je voor 2 verschillende zaken wil gebruiken.
Ik weet het niet want heb niet zover gekeken in je code.

Wat veel beginners een void noemen (omdat dat zichtbaar is in je code), zijn functies.
Je kunt geen functies hebben met dezelfde naam, en er zijn 2 verplichte functies, te weten setup() en loop().
Je kunt wel meerdere functies hebben, maar die moeten dan een eigen naam hebben, en ergens anders aangeroepen worden (meestal vanuit loop()).
Wanneer een functie op zichzelf staat, wel wat doet maar niets terug hoeft te geven dan wordt die omschreven als void (== leegte).
Anders geef je 'm de bij wat 'ie terug gaat geven passende variabele naam.
Maar zover ben je nog niet en dus laat dat nog maar heel even liggen.

Ik zal als ik de code heb verbeterd hem nog even laten zien, oke?