Tænd/ sluk af flere udgange samtidigt. (Læst 5616x)

Offline EVR5

  • Nyfødt El-Elsker
  • *
  • Indlæg: 3
  • Antal brugbare Indlæg: 0
    • Vis profil
Tænd/ sluk af flere udgange samtidigt.
« Dato: Oktober 03, 2017, 12:16:53 »
Jeg har lidt problemer med programmering - måske har jeg bare stirret mig blind på det.
Det jeg ønsker er:
Kande tændt/ slukke flere udgange samtidigt - hvordan gøres dette?
Ved hjælp af en indgang (knap) kan slukke alle udgange.

Opbygningen er således 12 relæer til hver sin udgang der styres af kontakter (alt dette virker), men på en af indgangene vil jeg gerne have styret 2 udgange, så er det nemmere ledningsmæssigt for mig - dette skal jeg have hjælp til.
Der skal også være en indgang der skal kunne slukke alle udgange - dette skal jeg have hjælp til.

Håber der er nogen der kan hjælpe eller pege der rigtige vej for en løsning.

Hilsen
Erik

 

Offline anderserlkker

  • Jordet Collector
  • *
  • Indlæg: 114
  • Antal brugbare Indlæg: 20
    • Vis profil
Sv: Tænd/ sluk af flere udgange samtidigt.
« Svar #1 Dato: Oktober 10, 2017, 22:24:57 »
Prøv at uploade koden, så vi alle kan se det. Er det en arduino du er i gang med?
Mvh Anders 8)

 

Offline EVR5

  • Nyfødt El-Elsker
  • *
  • Indlæg: 3
  • Antal brugbare Indlæg: 0
    • Vis profil
Sv: Tænd/ sluk af flere udgange samtidigt.
« Svar #2 Dato: August 23, 2018, 16:22:55 »
Hej.
Ja, det er Arduino Mega2560 jeg er i gang med.
Som sagt drejer det sig om at een knap (indgang) kan slukke alle udgange.

Her er koden på systemet:
// Multiple toggles!
const int button1 =  2;  // LED pin number
const int led1Pin =  30;
const int button2 =  3;
const int led2Pin =  31;
const int button3 =  4;
const int led3Pin =  32;
const int button4 =  5;
const int led4Pin =  33;
const int button5 =  6;
const int led5Pin =  34;
const int led5Pin2 =  35;
const int button6 =  7;
const int led6Pin =  36;
const int led6Pin2 =  37;
const int button7 =  8;
const int led7Pin =  38;
const int button8 =  9;
const int led8Pin =  39;
const int led8Pin2 = 44;
const int button9 =  10;
const int led9Pin =  40;
const int led9Pin2 =  45;
const int button10 =  11;
const int led10Pin =  41;

char bstate1 = 0;
char bstate2 = 0;
char bstate3 = 0;
char bstate4 = 0;
char bstate5 = 0;
char bstate6 = 0;
char bstate7 = 0;
char bstate8 = 0;
char bstate9 = 0;
char bstate10 = 0;
char bstate11 = 0;
char bstate12 = 0;

unsigned long bcount1 = 0; // button debounce timer.
unsigned long bcount2 = 0;
unsigned long bcount3 = 0;
unsigned long bcount4 = 0;
unsigned long bcount5 = 0;
unsigned long bcount6 = 0;
unsigned long bcount7 = 0;
unsigned long bcount8 = 0;
unsigned long bcount9 = 0;
unsigned long bcount10 = 0;
unsigned long bcount11 = 0;
unsigned long bcount12 = 0;

char led1State = LOW;        // initialise the LED
char led2State = LOW;
char led3State = LOW;
char led4State = LOW;
char led5State = LOW;
char led6State = LOW;
char led7State = LOW;
char led8State = LOW;
char led9State = LOW;
char led10State = LOW;
char led11State = LOW;
char led12State = LOW;

// Have we completed the specified interval since last confirmed event?
// "marker" chooses which counter to check
boolean timeout(unsigned long *marker, unsigned long interval) {
  if (millis() - *marker >= interval) {
    *marker += interval;    // move on ready for next interval
    return true;
  }
  else return false;
}

// Deal with a button read; true if button pressed and debounced is a new event
// Uses reading of button input, debounce store, state store and debounce interval.
// Routines by Paul__B of Arduino Forum
boolean butndown(char button, unsigned long *marker, char *butnstate, unsigned long interval) {
  switch (*butnstate) {               // Odd states if was pressed, >= 2 if debounce in progress
    case 0: // Button up so far,
      if (button == HIGH) return false; // Nothing happening!
      else {
        *butnstate = 2;                 // record that is now pressed
        *marker = millis();             // note when was pressed
        return false;                   // and move on
      }

    case 1: // Button down so far,
      if (button == LOW) return false; // Nothing happening!
      else {
        *butnstate = 3;                 // record that is now released
        *marker = millis();             // note when was released
        return false;                   // and move on
      }

    case 2: // Button was up, now down.
      if (button == HIGH) {
        *butnstate = 0;                 // no, not debounced; revert the state
        return false;                   // False alarm!
      }
      else {
        if (millis() - *marker >= interval) {
          *butnstate = 1;               // jackpot!  update the state
          return true;                  // because we have the desired event!
        }
        else
          return false;                 // not done yet; just move on
      }

    case 3: // Button was down, now up.
      if (button == LOW) {
        *butnstate = 1;                 // no, not debounced; revert the state
        return false;                   // False alarm!
      }
      else {
        if (millis() - *marker >= interval) {
          *butnstate = 0;               // Debounced; update the state
          return false;                 // but it is not the event we want
        }
        else
          return false;                 // not done yet; just move on
      }
    default:                            // Error; recover anyway
      {
        *butnstate = 0;
        return false;                   // Definitely false!
      }
  }
}

// ----------------------------- toggle ------------------------------------------
char toggle(char *flip) {   // Yes, it toggles the variable pointed to
  if (*flip == LOW) {
    *flip = HIGH;
  }
  else {
    *flip = LOW;
  }
  return *flip;
}

void setup() {
  pinMode(button1, INPUT_PULLUP);
  pinMode(led1Pin, OUTPUT);
  pinMode(button2, INPUT_PULLUP);
  pinMode(led2Pin, OUTPUT);
  pinMode(button3, INPUT_PULLUP);
  pinMode(led3Pin, OUTPUT);
  pinMode(button4, INPUT_PULLUP);
  pinMode(led4Pin, OUTPUT);
  pinMode(button5, INPUT_PULLUP);
  pinMode(led5Pin, OUTPUT);
  pinMode(led5Pin2, OUTPUT);
  pinMode(button6, INPUT_PULLUP);
  pinMode(led6Pin, OUTPUT);
  pinMode(led6Pin2, OUTPUT);
  pinMode(button7, INPUT_PULLUP);
  pinMode(led7Pin, OUTPUT);
  pinMode(button8, INPUT_PULLUP);
  pinMode(led8Pin, OUTPUT);
  pinMode(led8Pin2, OUTPUT);
  pinMode(button9, INPUT_PULLUP);
  pinMode(led9Pin, OUTPUT);
  pinMode(led9Pin2, OUTPUT);
  pinMode(button10, INPUT_PULLUP);
  pinMode(led10Pin, OUTPUT);
  pinMode(22, INPUT_PULLUP);
  pinMode(42, OUTPUT);
  pinMode(23, INPUT_PULLUP);
  pinMode(43, OUTPUT);

  digitalWrite (led1Pin, HIGH);
  digitalWrite (led2Pin, HIGH);
  digitalWrite (led3Pin, HIGH);
  digitalWrite (led4Pin, HIGH);
  digitalWrite (led5Pin, HIGH);
  digitalWrite (led5Pin2, HIGH);
  digitalWrite (led6Pin, HIGH);
  digitalWrite (led6Pin2, HIGH);
  digitalWrite (led7Pin, HIGH);
  digitalWrite (led8Pin, HIGH);
  digitalWrite (led8Pin2, HIGH);
  digitalWrite (led9Pin, HIGH);
  digitalWrite (led9Pin2, HIGH);
  digitalWrite (led10Pin, HIGH);
}

void loop() {
  int sensorValue22 = digitalRead(22);
  if (sensorValue22)
  {
    digitalWrite(42, HIGH);   // set the LED on
  }
  else
    digitalWrite(42, LOW);    // set the LED off

  int sensorValue23 = digitalRead(23);
  if (sensorValue23)
  {
    digitalWrite(43, HIGH);   // set the LED on
  }
  else
    digitalWrite(43, LOW);    // set the LED off

  // Toggle LED if button debounced
  if (butndown(digitalRead(button1), &bcount1, &bstate1, 10UL )) {
    toggle(&led1State);
    digitalWrite(led1Pin, led1State);
  }
  if (butndown(digitalRead(button2), &bcount2, &bstate2, 10UL )) {
    toggle(&led2State);
    digitalWrite(led2Pin, led2State);
  }
  if (butndown(digitalRead(button3), &bcount3, &bstate3, 10UL )) {
    toggle(&led3State);
    digitalWrite(led3Pin, led3State);
  }
  if (butndown(digitalRead(button4), &bcount4, &bstate4, 10UL )) {
    toggle(&led4State);
    digitalWrite(led4Pin, led4State);
  }
  if (butndown(digitalRead(button5), &bcount5, &bstate5, 10UL )) {
    toggle(&led5State);
    digitalWrite(led5Pin, led5State);
    digitalWrite(led5Pin2, led5State);
  }
  if (butndown(digitalRead(button6), &bcount6, &bstate6, 10UL )) {
    toggle(&led6State);
    digitalWrite(led6Pin, led6State);
    digitalWrite(led6Pin2, led6State);
  }
  if (butndown(digitalRead(button7), &bcount7, &bstate7, 10UL )) {
    toggle(&led7State);
    digitalWrite(led7Pin, led7State);
  }
  if (butndown(digitalRead(button8), &bcount8, &bstate8, 10UL )) {
    toggle(&led8State);
    digitalWrite(led8Pin, led8State);
    digitalWrite(led8Pin2, led8State);
  }
  if (butndown(digitalRead(button9), &bcount9, &bstate9, 10UL )) {
    toggle(&led9State);
    digitalWrite(led9Pin, led9State);
    digitalWrite(led9Pin2, led9State);
  }
  if (butndown(digitalRead(button10), &bcount10, &bstate10, 10UL )) {
    toggle(&led10State);
    digitalWrite(led10Pin, led10State);
  }
}

 

Offline dani8303

  • Spændingsdeler
  • ****
  • Indlæg: 63
  • Antal brugbare Indlæg: 9
  • ESP8266, Linux server, PHP, JS, så spiller det.
    • Vis profil
    • Egen side til styring, energi mm. tag et kig :-)
Sv: Tænd/ sluk af flere udgange samtidigt.
« Svar #3 Dato: August 29, 2018, 21:36:26 »
Hej
Har skrevet din kode om, så det ikke fylder så meget. Pin 14 er sat til at slukke alle udgange. Koden skulle virke, men er ikke testet(Kompilere dog fint).
Kode:
#include <Arduino.h>

const int numLeds = 10;
const int button[] = {2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10,11}; //Pins for buttons
const int led[] =    {30,31,32,33,34,36,38,39,40,41}; //Pins for light emiting diodes
const int ledExtra[] {-1,-1,-1,-1,35,37,-1,44,45,-1}; //Extra pin for same output

const int shutdownAll = 14; //Pin to shutdown all outputs;

long buttonLastDown[] = {0,0,0,0,0,0,0,0,0,0};//Latest time the button was pressed down
bool ledStat[] = {0,0,0,0,0,0,0,0,0,0};//The current stat of the leds. Change all 0 to 1 for default to turn on.

void updateLeds(){
for(int i = 0; i < numLeds; i++){
digitalWrite(led[i],ledStat[i]);
digitalWrite(ledExtra[i],ledStat[i]);
}
}

void setup(){
for(int i = 0; i < numLeds; i++){//All led pins will be outputs
pinMode(led[i],OUTPUT);
pinMode(ledExtra[i],OUTPUT);
}
updateLeds();
    for(int i = 0; i < numLeds; i++){//All button pins will be pulled up.
pinMode(button[i],INPUT_PULLUP);
}
    pinMode(shutdownAll, INPUT_PULLUP);//PULLUP for all off button.
    /*OLD CODE*/
    pinMode(22, INPUT_PULLUP);
    pinMode(42, OUTPUT);
    pinMode(23, INPUT_PULLUP);
    pinMode(43, OUTPUT);
}

void loop(){
    /*Reading all the buttons*/
    for(int i = 0; i < numLeds; i++){
        if(!digitalRead(button[i])){//Button down NO-button. Remove invert(!) for NC-button.
            if(millis()- buttonLastDown[i] > 500){//It is over 0.5 sec since the button was pressed.
                ledStat[i] = !ledStat[i];
                updateLeds();
            }
            buttonLastDown[i] = millis();//Blocking debounce
        }
    }
    /*Shutdown all*/
    if(!digitalRead(shutdownAll)){//Button down NO-button. Remove invert(!) for NC-button.
        for(int i = 0; i < numLeds; i++){
            ledStat[i] = 0;//Set to 1 in order to turn on all leds instead
        }
        updateLeds();
    }

    /*OLD CODE - SIMPLI*/
    digitalWrite(42, digitalRead(22));
    digitalWrite(43, digitalRead(23));
}
« Senest Redigeret: August 30, 2018, 15:54:26 af dani8303 »