Fórum | MyPower.CZ | Obnovitelné zdroje energie - energetická soběstačnost | Právě je stř čer 26, 2019 9:15 am


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
Reputation: 0

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: 192
Registrován: pát kvě 09, 2014 7:11 pm
Reputation: 11

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
Only God & bank can create something from nothing. LTC: LX4UmmYHzT293zcJJ4BjTcPTRSHoLWLDn7
Si anode Spectrum BMS SEI formation Float Ochrana High SOC deg. MPPT Post Carbon Pb
Uživatelský avatar
rottenkiwi
 
Příspěvky: 2455
Registrován: pát úno 13, 2015 2:24 pm
Bydliště: SO, SK
Reputation: 135

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
6.8kWp poly + XTM 4000-48 + 330Ah LiFe + Batrium s CAN
willcz
 
Příspěvky: 365
Registrován: úte zář 06, 2016 1:52 pm
Bydliště: Brno
Reputation: 63


Zpět na Arduino

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků

Reputation System ©'