Code gezocht

algemene C code
Berichten: 75
Geregistreerd: 27 Feb 2019, 11:19

Code gezocht

Berichtdoor Jeroentjevrij » 13 Mrt 2019, 19:23

Wie kan mij helpen.
Ik wil via een arduino 3 relais aan sturen met een momentary drukknop.
Nou lukt het mij wel een code te maken om met een drukknop een relais aan en uit te schakelen maar niet met een pulse.
Ik wil feitelijk met druk1 relais 1 i schakelen en ingeschakeld houden.
Bij de 2e druk/pulse komt relais 2 erbij.
Bij de derde komt relais 3 erbij.
En bij de 4e moeten alle relais weer uitgaan.
Kan iemand mij op weg helpen.

Advertisement

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

Re: Code gezocht

Berichtdoor Koepel » 13 Mrt 2019, 21:27

Dat is al bijna hetzelfde als de StateChangeDetection: https://www.arduino.cc/en/Tutorial/StateChangeDetection.

Dit is wat ik er van maakte:
cpp code
// Een knop zit aan pin 2 en GND
//
// buttonPushCounter is gedefinieerd als:
// 0 : alles uit
// 1 : relais 1 aan
// 2 : relais 2 er bij aan
// 3 : relais 3 er bij aan


const int buttonPin = 2;

int buttonPushCounter = 0;
int lastButtonState = HIGH; // default HIGH


void setup()
{
Serial.begin( 9600);
Serial.println( "De sketch is gestart");
pinMode( buttonPin, INPUT_PULLUP);
}


void loop()
{
int buttonState = digitalRead( buttonPin);

if( buttonState != lastButtonState)
{
if( buttonState == LOW) // LOW is knop ingedrukt
{
buttonPushCounter++;

if( buttonPushCounter > 3)
{
buttonPushCounter = 0;
}

switch( buttonPushCounter)
{
case 0:
Serial.println( "relais 1 uit, 2 uit, 3 uit");
break;
case 1:
Serial.println( "relais 1 aan");
break;
case 2:
Serial.println( "relais 2 aan");
break;
case 3:
Serial.println( "relais 3 aan");
break;
}
}

lastButtonState = buttonState; // bewaar de nieuwe waarde
}

delay( 10); // tegen het denderen van de knop
}

Berichten: 75
Geregistreerd: 27 Feb 2019, 11:19

Re: Code gezocht

Berichtdoor Jeroentjevrij » 13 Mrt 2019, 22:27

Code: Alles selecteren
Een knop zit aan pin 2 en GND

//

// buttonPushCounter is gedefinieerd als:

//   0 : alles uit

//   1 : relais 1 aan

//   2 : relais 2 er bij aan

//   3 : relais 3 er bij aan

 

 

const int buttonPin = 2;

 

int buttonPushCounter = 0;

int lastButtonState = HIGH;    // default HIGH

 

 

void setup()

{

  Serial.begin( 9600);


  pinMode( buttonPin, INPUT_PULLUP);

}

 

 

void loop()

{

  int buttonState = digitalRead( buttonPin);

 

  if( buttonState != lastButtonState)

  {

    if( buttonState == LOW)     // LOW is knop ingedrukt

    {

      buttonPushCounter++;

       

      if( buttonPushCounter > 3)

      {

        buttonPushCounter = 0;

      }

       

      switch( buttonPushCounter)

      {

        case 0:

          digitalWrite(12, LOW);
          digitalWrite(13, LOW);
          digitalWrite(14, LOW);

          break;

        case 1:

          digitalWrite(12, HIGH);

          break;

        case 2:
               

          digitalWrite(12, HIGH);
          digitalWrite(13, HIGH);
         
           
 

          break;

        case 3:

          digitalWrite(12, HIGH);
          digitalWrite(13, HIGH);
          digitalWrite(14, HIGH);

          break;

      }

    }

   

    lastButtonState = buttonState;  // bewaar de nieuwe waarde

  }

 

  delay( 10);     // tegen het denderen van de knop

}


Berichten: 75
Geregistreerd: 27 Feb 2019, 11:19

Re: Code gezocht

Berichtdoor Jeroentjevrij » 13 Mrt 2019, 23:01

Had hem eerst zo
Code: Alles selecteren
// Een knop zit aan pin 2 en GND

//

// buttonPushCounter is gedefinieerd als:

//   0 : alles uit

//   1 : relais 1 aan

//   2 : relais 2 er bij aan

//   3 : relais 3 er bij aan

 

 

const int buttonPin = 2;
      int relay1 = 12;
      int relay2 = 13;
      int relay3 = 14;

 

int buttonPushCounter = 0;

int lastButtonState = HIGH;    // default HIGH

 

 

void setup()

{

  Serial.begin( 9600);

  pinMode( buttonPin, INPUT_PULLUP);
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);

}

 

 

void loop()

{

  int buttonState = digitalRead( buttonPin);

 

  if( buttonState != lastButtonState)

  {

    if( buttonState == LOW)     // LOW is knop ingedrukt

    {

      buttonPushCounter++;

       

      if( buttonPushCounter > 3)

      {

        buttonPushCounter = 0;

      }

       

      switch( buttonPushCounter)

      {

        case 0:

          digitalWrite(relay1, LOW);
          digitalWrite(relay2, LOW);
          digitalWrite(relay3, LOW);

          break;

        case 1:

          digitalWrite(relay1, HIGH);

          break;

        case 2:
               

          digitalWrite(relay1, HIGH);
          digitalWrite(relay2, HIGH);
         
           
 

          break;

        case 3:

          digitalWrite(relay1, HIGH);
          digitalWrite(relay2, HIGH);
          digitalWrite(relay3, HIGH);

          break;

      }

    }

   

    lastButtonState = buttonState;  // bewaar de nieuwe waarde

  }

 

  delay( 10);     // tegen het denderen van de knop

}

 

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

Re: Code gezocht

Berichtdoor Koepel » 14 Mrt 2019, 08:16

Mijn voorkeur heeft dat de namen van een pin ook iets met "pin" in de naam hebben.
Code: Alles selecteren
const int relay1Pin = 12;
const int relay2Pin = 13;
const int relay3Pin = 14;


De "const" hoeft niet, maar dat is om aardig tegen de compiler te zijn. Dan weet de compiler dat die waarde niet meer verandert.

Waar komt pin 14 vandaan? Is dit niet met een Arduino Uno ?

Er zijn natuurlijk drie pinMode() nodig om de pinnen naar de relais als OUTPUT te zetten.

Heb je het voorbeeld met de tekst geprobeerd? De bedoeling is dat bij "case 0" je ze alle drie uit zet. Bij "case 1" alleen het eerste relais aanzetten, bij "case 2" alleen het tweede relais aanzetten, bij "case 3" alleen het derde relais aanzetten.

Haal je alle overbodige lege regels weg en maak je het netjes ?
Als een stuk code er netjes uit ziet, dan kun je in één oogopslag zien hoe de structuur van de code is. Dat maakt het gemakkelijker om het ook netjes te laten werken.
Als een stuk code er slordig uit ziet, dan zal de werking ook wel slordig zijn omdat niemand weet wat er gebeurt.

Berichten: 75
Geregistreerd: 27 Feb 2019, 11:19

Re: Code gezocht

Berichtdoor Jeroentjevrij » 14 Mrt 2019, 14:35

Dank je wel.
Ja klopt ik gebruik een Uno.

Code: Alles selecteren
// 3 relais met pulse
// Met dank aan koepel**arduino forum**

const int buttonPin = 2;
const int relayPin1 = 11;
const int relayPin2 = 12;
const int relayPin3 = 13;

int buttonPushCounter = 0;

int lastButtonState = HIGH;    // default HIGH

void setup()

 {
  Serial.begin( 9600);

  pinMode( buttonPin, INPUT_PULLUP);
  pinMode( relayPin1, OUTPUT);
  pinMode( relayPin2, OUTPUT);
  pinMode( relayPin3, OUTPUT);
 }
  void loop()
 {
  int buttonState  = digitalRead( buttonPin);
  if( buttonState != lastButtonState)
 {
  if( buttonState == LOW)     // LOW is knop ingedrukt
 {
  buttonPushCounter++;
  if( buttonPushCounter > 3)
 {
  buttonPushCounter = 0;
 }
  switch( buttonPushCounter)
 {
          case 0:
          digitalWrite(relayPin1, LOW);
          digitalWrite(relayPin2, LOW);
          digitalWrite(relayPin3, LOW);

          break;

          case 1:
          digitalWrite(relayPin1, HIGH);

          break;

          case 2:
          digitalWrite(relayPin1, HIGH);
          digitalWrite(relayPin2, HIGH);
         
          break;

          case 3:
          digitalWrite(relayPin1, HIGH);
          digitalWrite(relayPin2, HIGH);
          digitalWrite(relayPin3, HIGH);

          break;

      }

    }
  lastButtonState = buttonState;  // bewaar de nieuwe waarde

  }
  delay( 100);     // tegen het denderen van de knop

}


Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 3 gasten