Arduino 3 podlahový výtah

Automatizace, řízení, měření, logování a programování s využitím platformy Arduino.
Odpovědět
Marty+-
Příspěvky: 1
Registrován: úte led 01, 2019 6:45 pm
Reputace: 0

Arduino 3 podlahový výtah

Příspěvek od Marty+- »

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);
}  
dub042
Příspěvky: 272
Registrován: pát kvě 09, 2014 8:11 pm
Reputace: 14

Re: Arduino 3 podlahový výtah

Příspěvek od dub042 »

A jak to souvisi s fotovoltaikou??? Doporucoval bych dat dotaz na arduino forum
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Reputace: 285
Lokalita: SO, SK
Bydliště: SO, SK

Re: Arduino 3 podlahový výtah

Příspěvek od rottenkiwi »

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
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
willcz
Příspěvky: 590
Registrován: úte zář 06, 2016 2:52 pm
Reputace: 105

Re: Arduino 3 podlahový výtah

Příspěvek od willcz »

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

Odpovědět
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek