Help, spoorweg, drukknop!!!

Berichten: 1
Geregistreerd: 21 Mrt 2021, 11:27

Help, spoorweg, drukknop!!!

Berichtdoor cin_b_ » 21 Mrt 2021, 11:32

Hoi allemaal;
ik ben relatief nieuw met Arduino.
-Doel; met een drukknop (debouncer); wanneer de drukknop ingedrukt wordt, gaan 4 ledjes blinken, gaat en speaker aan en gaan 2 servo's (spoorbomen) bewegen.

-Ik heb nu uiteindelijk een werkende formule voor de drukknop.
-ik heb een functie gemaakt voor de blinkende led-jes
-maar ik begrijp niet, waar in de formule in de ledjes, speaker, en servo opdrachten moet invoeren.
HELP!!!
dank jullie wel
const int buttonpin = 7;
const int ledpin = 13;
const int ledpin2 = 12;
const int ledpin3 = 11;
const int ledpin4 = 10;
int ledstate = LOW;
int buttonstate;
int lastbuttonstate;

void setup() {
pinMode(ledpin, OUTPUT);
pinMode(ledpin2, OUTPUT);
pinMode(ledpin3, OUTPUT);
pinMode(ledpin4, OUTPUT);
pinMode(buttonpin, INPUT_PULLUP); }

void loop() {
buttonstate = !debounce( buttonpin); // Vanwege de Pull-up is ingedrukt keren we het om.
if (buttonstate == HIGH && lastbuttonstate == LOW) ledstate = !ledstate; // Button ingedrukt, dDraai ledstate om
lastbuttonstate = buttonstate; // Onthoud de vorige toestand van de button
lampjes(); // voer functie lampjes uit
}
boolean debounce(int pin)
{
boolean state;
boolean previousState;
previousState = digitalRead(pin); // Lees de button voor de 1e keer in.
for (int counter = 0; counter < 10; counter++) // Lees nu 10 msec. lang steeds opnieuw de button in.
{
delay(1); //wait 1 millisecond
state = digitalRead(pin); //read the pin
if (state != previousState) // Als in die 10 msec. De buttonstate veranderd gaat opnieuw 10 msec. In.
{
counter = 0; //reset the counter
previousState = state; // Kennelijk is de button 10 msec. stabiel.
}
}
return state;
}

void lampjes() {
digitalWrite(ledpin, HIGH);
delay(200);
digitalWrite(ledpin2, HIGH);
delay(200);
digitalWrite(ledpin3, HIGH);
delay(200);
digitalWrite(ledpin4, HIGH);
delay(200);
digitalWrite(ledpin, LOW);
delay(300);
digitalWrite(ledpin2, LOW);
delay(300);
digitalWrite(ledpin3, LOW);
delay(300);
digitalWrite(ledpin4, LOW);
delay(300);
}

Advertisement

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

Re: Help, spoorweg, drukknop!!!

Berichtdoor shooter » 22 Mrt 2021, 21:43

jouw programma stopt onder lampjes omdat daar een accolade staat, wat eronder staat wordt niet gezien je kunt er wel functies plaatsen bijvoor beeld zoals je dat met lampjes gedaan hebt,
verder is het slim als je leert hoe je blink without delay kunt doen. Dan gaat er echt een wereld voor je open.
dus in jouw stukje staat debounce en lampjes als functie, zo kun je dus ook de servo laten dalen als een functie zien, dat laten dalen moet je lanzaam doen dus telkens 1 opellen bij de stand. En ondertussen loopt je loop gewoon door. dus telkens kijken of er een timer gedaan is en daar dan actie op doen.
dan gaat ineens alles tegelijk knipperen en gaan de bomen langzaam open/dicht.
gewoon uitbreiden je bent prima op weg trouwens.
paul deelen
shooter@home.nl

Berichten: 22
Geregistreerd: 26 Aug 2015, 11:57

Re: Help, spoorweg, drukknop!!!

Berichtdoor Frits1956 » 25 Mrt 2021, 20:19

Hier een klein voorbeeldje hoe je nieuwe functies in je programma aan kan roepen.
Let ook op wat shooter zéér terecht opmerkt. Vergeet hierbij niet dat een delay eigenlijk betekent dat de arduine gedurende de delaytijd stopt met opdrachten uitvoeren. Het is verstandiger om een teller mee te laten lopen en iedere keer als je in een loop langs kom te kijken of er al een statement uitgevoerd moet worden. Zie en bestudeer blink without delay

Code: Alles selecteren
const int buttonpin = 7;
const int ledpin = 13;
const int ledpin2 = 12;
const int ledpin3 = 11;
const int ledpin4 = 10;
int ledstate = LOW;
int buttonstate;
int lastbuttonstate;

void setup() {
  pinMode(ledpin, OUTPUT);
  pinMode(ledpin2, OUTPUT);
  pinMode(ledpin3, OUTPUT);
  pinMode(ledpin4, OUTPUT);
  pinMode(buttonpin, INPUT_PULLUP);
}

void loop() {
  buttonstate = !debounce( buttonpin); // Vanwege de Pull-up is ingedrukt keren we het om.
  if (buttonstate == HIGH && lastbuttonstate == LOW) ledstate = !ledstate; // Button ingedrukt, dDraai ledstate om
  lastbuttonstate = buttonstate; // Onthoud de vorige toestand van de button
  lampjes(); // voer functie lampjes uit
}

boolean debounce(int pin)
{
  boolean state;
  boolean previousState;
  previousState = digitalRead(pin); // Lees de button voor de 1e keer in.
  for (int counter = 0; counter < 10; counter++) // Lees nu 10 msec. lang steeds opnieuw de button in.
  {
    delay(1); //wait 1 millisecond
    state = digitalRead(pin); //read the pin
    if (state != previousState) // Als in die 10 msec. De buttonstate veranderd gaat opnieuw 10 msec. In.
    {
      counter = 0; //reset the counter
      previousState = state; // Kennelijk is de button 10 msec. stabiel.
    }
  }
  return state;
}

void lampjes() {
  speelgeluidaf();
  digitalWrite(ledpin, HIGH);
  delay(200);
  digitalWrite(ledpin2, HIGH);
  delay(200);
  digitalWrite(ledpin3, HIGH);
  delay(200);
  digitalWrite(ledpin4, HIGH);
  delay(200);
  digitalWrite(ledpin, LOW);
  delay(300);
  digitalWrite(ledpin2, LOW);
  delay(300);
  digitalWrite(ledpin3, LOW);
  delay(300);
  digitalWrite(ledpin4, LOW);
  delay(300);
  laatboomzakken();
}

void laatboomzakken()
{ //schrijf hier het aansturen van de motor om de slagboom te laten zakken
}
void speelgeluidaf()
{ // schrijf hier hoe je de geluidmodule aanstuurt.
}

Terug naar Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast