Arduino - uprava programu pro ovladani rele [VYRESENO]

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 02:00

Arduino - uprava programu pro ovladani rele [VYRESENO]

#1 Příspěvek od jiri255 »

Zdravím,
chtěl bych Vás požádat o radu ohledně programu pro ovládání relé.
Mám desku Arduino Mega 2560 a k ní modul se 4x relé. Mám připojené zatím jen jedno relé a ovládám ho tlačítkem, když stisknu tlačítko relé se sepne, když ho pustím relé vypne viz program níže.
Nevíte někdo, jak tento program upravit a přidat do něj ještě druhé tlačítko připojené k button2Pin = 4 a druhé relé připojené k Rele2Pin = 5 s tím, že obě tlačítka budou fungovat, tak že když jedno nebo druhé stisknu,
tak se jedno nebo druhé relé sepne a zůstane seplé a když je opět stisknu, tak se relé rozepnou a zůstnou rozeplá?

Děkuji za případnou pomoc Jirka

Kód: Vybrat vše

// relatka nastaveni

const int buttonPin   =  2;      // tlačítko1
const int relePin     =  3;      // rele

      int buttonState = 0;       //stav

 void setup() {
//relé jako výstup

  pinMode(relePin, OUTPUT);     

  //tlačítko jako vstup

  pinMode(buttonPin,INPUT);  

}

void loop(){
// načtení stavu
buttonState = digitalRead(buttonPin);

 // stisknutí

  if (buttonState == HIGH) {     

    // zapni relé    
   digitalWrite(relePin, LOW);

  } 

  else {

    // vypni relé
   digitalWrite(relePin, HIGH);
  }
}
Naposledy upravil(a) jiri255 dne 01 kvě 2014, 20:31, celkem upraveno 1 x.

Uživatelský avatar
monterjirka
Příspěvky: 2761
Registrován: 14 čer 2003, 02:00
Bydliště: Blížejov

#2 Příspěvek od monterjirka »

Na to by stačil IO 4013 se dvěma KO...

S Arduinem je to také možné.
Tak jde především ošetření nějakých zákmitů a pak jde o to, jestli je třeba ovládat tlačítka současně...

V podstatě jde o to hlídat stav na portech, čekat na změnu a při změně skočit do podprogramu, který provede změnu na výstupu tím, že udělá negaci výstupu patřícího ke vstupu, kde došlo ke změně a vrátí se ke sledování vstupů...

Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 02:00

#3 Příspěvek od jiri255 »

Díky za radu, ale jelikož jsem teprve začátečník, tak úplně přesně nevím, jak to do toho programu zapsat, aby mi to fungovalo...

Uživatelský avatar
nekmil
Příspěvky: 780
Registrován: 06 bře 2005, 01:00
Bydliště: Havířov

#4 Příspěvek od nekmil »

Jen tak na úvod:

// relatka nastaveni

const int buttonPin = 2; // tlačítko1
const int button2Pin = 4; // tlačítko2
const int relePin = 3; // rele1
const int rele2Pin = 5; // rele2

int buttonState = 0; //stav

void setup() {
//relé jako výstup

pinMode(relePin, OUTPUT);
pinMode(rele2Pin, OUTPUT);

//tlačítko jako vstup

pinMode(buttonPin,INPUT);
pinMode(button2Pin,INPUT);
}

z těch "závorek" se mi dělá nevolno :D a pak si přepracuj to "IF"

Něco podobného se řešilo zde:
http://www.ebastlirna.cz/modules.php?na ... ic&t=64057

prostuduj si "ovládání rele_4"

Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 02:00

#5 Příspěvek od jiri255 »

Díky za ten začátek to už teď chápu a díval jsem se i na to relé4, ale to bude napsané v něčem jiném, protože pro arduino se mi tu podmínku nepodařilo napsat :-( s tím si nevím rady

Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 02:00

#6 Příspěvek od jiri255 »

Tak uz jsem to vyresil, ten program se musi cely predelat. Pokud byste nekdo resili stejny problem, prikladam vysledek je to jenom na jedno rele + se k tomu i rozsviti ledka, kdyz se rele sepne, a kdyz se rele rozepne ledka zhasne. Doplnit si tam vice rele uz neni problem...

Kód: Vybrat vše

// ovladani rele tlacitkem


// Konstanty se nezmění . Jsou zde použity pro
// Nastavení čísla PIN :
const int buttonPin = 2;    // cislo pinu tlacitka
const int relePin = 3;      // cislo pinu rele
const int ledPin = 13;      // cislo pinu ledky

// Variables will change:
int ledState = HIGH;         // Aktuální stav výstupního pinu
int releState = LOW;         // Aktuální stav výstupního pinu
int buttonState;             // Aktuální čtení ze vstupního pinu
int lastButtonState = LOW;   // Předchozí čtení ze vstupního pinu

// Následující proměnné jsou dlouhé , protožečas , měřeno v milisekundách ,
// Se rychle stanevětší číslo , než je možné uložit do int 
long lastDebounceTime = 0;  // Poslední doba kdy výstupní pin byl přepnut
long debounceDelay = 50;    // cas konstanta zvysit

void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(relePin, OUTPUT);

  // Nastavit počáteční stav ledky a rele
  digitalWrite(ledPin, ledState);
  digitalWrite(relePin, releState);
}

void loop() {
  // Čtení stavu spínače do lokální proměnné :
  int reading = digitalRead(buttonPin);

  // Zkontroluje, zda jste právě stiskli tlačítko  

  // zmena prepinace:
  if (reading != lastButtonState) {
    // reset casovace odskoku
    lastDebounceTime = millis();
  } 
  
  if ((millis() - lastDebounceTime) > debounceDelay) {
   //  Cas tam byl déle než vstupní zpoždění , 
   //  skutečný současný stav:

    // Pokud došlo ke změněstavu tlačítka:
    if (reading != buttonState) {
      buttonState = reading;

      // Pouze přepínat ledku a rele , pokud je nové zmáčknutí:
      if (buttonState == HIGH) {
        ledState = !ledState;
        releState = !releState;
      }
    }
  }
  
  // nastaveni ledky a rele:
  digitalWrite(ledPin, ledState);
  digitalWrite(relePin, releState);
  
  // ulozeni cteni pro pristi smycku:
  lastButtonState = reading;
}

Uživatelský avatar
nekmil
Příspěvky: 780
Registrován: 06 bře 2005, 01:00
Bydliště: Havířov

#7 Příspěvek od nekmil »

No vidíš, musíš trénovat a ono to půjde. :D
Ale těch závorek, :( to mě na tom Céčku právě děsí. Radši zůstanu u toho "mého" Bascomu :) Už jsem asi starý, abych se učil něco nového. :)

Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 02:00

#8 Příspěvek od jiri255 »

mě toho na tom céčku děsí... :lol:

Uživatelský avatar
venca666
Příspěvky: 77
Registrován: 02 bře 2014, 01:00
Bydliště: u mě Doma
Kontaktovat uživatele:

#9 Příspěvek od venca666 »

aky by to šlo ovládat jednoduše časovačem 555, nebo 556.

Uživatelský avatar
stanleyv
Příspěvky: 123
Registrován: 21 led 2007, 01:00
Bydliště: Trnava

#10 Příspěvek od stanleyv »

nekmil píše:No vidíš, musíš trénovat a ono to půjde. :D
Ale těch závorek, :( to mě na tom Céčku právě děsí. Radši zůstanu u toho "mého" Bascomu :) Už jsem asi starý, abych se učil něco nového. :)
Ja si myslím, že človek nie je nikdy tak starý, aby sa učil niečo nové .... A tie zátvorky, nie sú až také zložité.... ich odsadenie znamená, ku ktorému začiatku patrí ktorý koniec.....

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“