Fórum | MyPower.CZ | Obnovitelné zdroje energie - energetická soběstačnost | Poslední návštěva: stř úno 19, 2020 10:51 pm


Arduino 3 podlahový výtah

Automatizace, řízení, měření, logování a programování s využitím platformy Arduino.

Arduino 3 podlahový výtah

Příspěvekod Marty+- » stř led 02, 2019 12:04 pm

Dobrý den,Mám z ůkol udělat 3 podlahový výtah. Mám kod, který je ve fázi vývoje. Momentálně jsem zaměřen na podmínky ketré jsou nejdůležitější. Musím udělat podmínku aby výtah jezdil normálně když ho zavolám do každého patra a potom když třeba pojede do 3 patra a po cestě ve druhém ho někdo zavolá tak zastaví nabere a jede dál. S touto podmínkou si nevím rady.
Kód: Vybrat vše
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define PINsensPatroprvni 1
#define PINsensPatrodruhy 2
#define PINsensPatrotreti 3
#define PINbtnVytahprvni  4
#define PINbtnVytahdruhy  5
#define PINbtnVytahtreti  6
#define PINbtnPatroprvni  7
#define PINbtnPatrodruhy  8
#define PINbtnPatrotreti  9
#define motorPin1     10
#define motorPin2     11
#define motorPin3     12
#define motorPin4     13
int krokMotoru = 0;
LiquidCrystal_I2C lcd(0x27, 20, 4);

bool sensPatro1, sensPatro2, sensPatro3;  //snimace pater
bool btnVytah1, btnVytah2, btnVytah3; //tlacitka ve vytahu
bool btnPatro1, btnPatro2, btnPatro3; //tlacitka v patrech
byte stavVytahu;  //musis vedet, co vytah dela, abys podle toho mohl resit nejakou logiku. Tezko muzes privolat vytah dolu, když jede nahoru
      //0 - vytah stoji, 1 - vytah jede dolu, 2 - vytah jede nahoru, atd. Pripadne to řesit pomoci bool proměnnych
bool aktualniPatro;
bool vytahStoji=0;
bool stisknutoPrivolavaciTlacitko;
bool pozadovanePatro;
bool jedNahoru;
bool jedDolu;
bool vytahStop;


void setup() {
  // put your setup code here, to run once:
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
pinMode(PINbtnVytahprvni, INPUT);
pinMode(PINbtnVytahdruhy, INPUT);
pinMode(PINbtnVytahtreti, INPUT);
pinMode(PINbtnPatroprvni, INPUT);
pinMode(PINbtnPatrodruhy, INPUT);
pinMode(PINbtnPatrotreti, INPUT);
pinMode(PINsensPatroprvni,INPUT);
pinMode(PINsensPatrodruhy,INPUT);
pinMode(PINsensPatrotreti,INPUT);
lcd.begin();
}

void loop(){    //zde přidělit proměnným hodnoty z digitálních vstupů
 
  if(sensPatro1){
    aktualniPatro = 1;}
   
  if(sensPatro2){
    aktualniPatro = 2;}
   
  if(sensPatro3){
    aktualniPatro = 3;}
   
  if(vytahStoji && stisknutoPrivolavaciTlacitko)
  {
    if(aktualniPatro < pozadovanePatro){
      jedNahoru = true;
    }
   
    if(aktualniPatro > pozadovanePatro){
      jedDolu = true;}
     
    if(aktualniPatro == pozadovanePatro){
      jedNahoru = false;
      jedDolu = false;}         
  }


 
  if(jedNahoru && stisknutoPrivolavaciTlacitko){
   
    if(aktualniPatro<pozadovanePatro){
      vytahStop==pozadovanePatro && jedNahoru;}

    if(aktualniPatro>pozadovanePatro){
      jedNahoru = true;}
  }
   if(jedDolu && stisknutoPrivolavaciTlacitko){
   
     if(aktualniPatro<pozadovanePatro){
      jedDolu = true;}
     
     if(aktualniPatro>pozadovanePatro){
       vytahStop==pozadovanePatro && jedDolu;}
   }
}
void VypisPatra(){
 lcd.setCursor(0,0);
 lcd.print("Patro:");
 lcd.print(digitalRead(aktualniPatro));
  }
  void JedNahoru(){
  krokMotoru++;
  if(krokMotoru > 3){
    krokMotoru = 0;
  }
  RizeniMotoru(krokMotoru);
}

void JedDolu(){
  krokMotoru--;
  if(krokMotoru < 0){
    krokMotoru = 3;
  }
  RizeniMotoru(krokMotoru);
}

void RizeniMotoru(int step){
if(step < 0 || step > 3){
  //jenom takovej sichr.
  //Pokud je proměnná step menší než 0, nebo větší než 3, tak se do proměnné přiřadí 0, tedy první krok
  step = 0;
}

switch(step){
  case 0:
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  break;
  case 1:
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  break;
  case 2:
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  break;
  case 3:
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  break;   
}

delay(3);

Marty+-
 
Příspěvky: 1
Registrován: úte led 01, 2019 6:45 pm

Re: Arduino 3 podlahový výtah

Příspěvekod dub042 » stř led 02, 2019 12:32 pm

A jak to souvisi s fotovoltaikou??? Doporucoval bych dat dotaz na arduino forum
dub042
 
Příspěvky: 222
Registrován: pát kvě 09, 2014 7:11 pm

Re: Arduino 3 podlahový výtah

Příspěvekod rottenkiwi » stř led 02, 2019 12:37 pm

Radšej by som vytvoril polia a tam dal nejaké AND a OR podmienky.

Ak to bude treba rozšíriť na 5 či 10 poschodí, tak to nepojde morom ifov a elsov.

https://www.youtube.com/watch?v=v3j8XftvjXo

https://www.quora.com/How-are-elevators ... programmed
The brain rewards women for being nicer, men for being selfish, study finds.
F. Viegas Google ML Rastani REC BMS ML for PN CN for BIS StyleGAN CNN for VR
Uživatelský avatar
rottenkiwi
 
Příspěvky: 3385
Registrován: pát úno 13, 2015 2:24 pm
Bydliště: SO, SK

Re: Arduino 3 podlahový výtah

Příspěvekod willcz » stř led 02, 2019 12:46 pm

dub042 píše:A jak to souvisi s fotovoltaikou??? Doporucoval bych dat dotaz na arduino forum


Asi skolni uloha ... predpokladam ze podobna otazka bude na x dalsich forech.
google proste nasel i mypower
willcz
 
Příspěvky: 590
Registrován: úte zář 06, 2016 1:52 pm


Zpět na Arduino

Kdo je online

Uživatelé procházející toto fórum: CC [Bot] a 0 návštevníků

Reputation System ©'