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.
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:
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
}
// 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
De "multiple definition" kan mogelijk op een cache probleem in de IDE duiden.
Kopieer je sketch even naar bv notepad.
Sluit de IDE en open de IDE weer.
Open een nieuwe sketch.
Sluit de oude sketch.
Kopieer de inhoud van notepad naar je nieuwe sketch.
Sla je nieuwe sketch op met een zinnige naam.
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 We noemen het in het algemeen gecompileerd.
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 ?
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
}
}
Ik ben nu klaar met het bewerken van de code die ik wil hebben 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
}
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.