végállás,prell figyelés

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
dckillman
Biztosítékgyilkos
Hozzászólások: 61
Csatlakozott: 2013. október 7. hétfő, 11:23

végállás,prell figyelés

Hozzászólás Szerző: dckillman »

Sziasztok!

Itt van egy kódrészlet amit csinálgatok.:-)

(A lényeg az lesz a végén, hogy van egy motor ami elindul és hajt egy tengelyt ami tulajdonképpen egy menetes orsó.
Ezen van egy "kocsi" amivel mozgatok ide-oda egy munkaasztalt.
Azt szeretném ha elindulna a motor, ha beindítom egy kapcsolóval. Megállna a végállásnál majd x idő elteltével visszaindulna a kiindulási helyére ahol ismét végállás miatt áll meg...
)

Ebben az esetben a végállást hogyan prell mentesíthetem?

Kódrészlet: amiben a prell nincs megoldva

Kód: Egész kijelölése

int inPin=2;
int outPin=13;
int bekapcsolt=1;
int beolvastam_a_gombot;
int limit1=0;
int limit2=0;
void setup(){
  pinMode(inPin,INPUT);
  pinMode(outPin,OUTPUT);
  Serial.begin(9600);
  Serial.println("Serial.println teszt");
}

void loop(){

  if(bekapcsolt==1);
  {
    digitalWrite(outPin, HIGH);
  }

  while(bekapcsolt==1 && digitalRead(inPin)==HIGH)
  {
    Serial.println("Addig megy a motor ameddig nincs végállásnál");
  }
  limit1=1;
  //kiléptem a ciklusból azaz megjött a jel/végállásnál van.
  Serial.println("Végállásnál vagyok");
  //Várok egy kis időt
  //kiléptem a ciklusból azaz megjött a jel/végállásnál van.
  delay(1000);
  //majd megy tovább a dolog...
}
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: végállás,prell figyelés

Hozzászólás Szerző: Robert »

Kód: Egész kijelölése

NyomottGomb=0
If gomb=1 {
  delaymilisec(50)
  if gomb =1 {
    Nyomottgomb=1
  }
}
Azaz, ha a gomb nyomva, meglesed, hogy a prell utan is nyomott-e...
Ha igen, nyomott: nem teves jelzes volt.

Viszont kerdes, hogy a motor hogy viseli, hogy még 50 msec-ig megy (bár szerintem ennyi tehetetlenség van benne).
dckillman
Biztosítékgyilkos
Hozzászólások: 61
Csatlakozott: 2013. október 7. hétfő, 11:23

Re: végállás,prell figyelés

Hozzászólás Szerző: dckillman »

Köszi az ötletet!
A hozzászólást 1 alkalommal szerkesztették, utoljára dckillman 2013. október 28. hétfő, 9:48-kor.
dckillman
Biztosítékgyilkos
Hozzászólások: 61
Csatlakozott: 2013. október 7. hétfő, 11:23

Re: végállás,prell figyelés

Hozzászólás Szerző: dckillman »

Szóval itt járok vele:(Holnap folytatom a vezérlést csak veszek 3-4 nyomógombot )

Kód: Egész kijelölése

int inPin=2;
int outPin=13;
int bekapcsolt=1;
int limitStart=0;
int limitEnd=0;
int elore=1;
int hatra=0;
int vezerlojel;
void setup(){
  pinMode(inPin,INPUT);
  pinMode(outPin,OUTPUT);
  Serial.begin(9600);
  Serial.println("Serial.println teszt");
}

void loop(){


  while(limitEnd==0)
  {
    Serial.println("Addig megy a motor ameddig nincs végállásnál");

    if(digitalRead(inPin)==LOW){
      delay(20);
      if(digitalRead(inPin)==LOW){
        digitalWrite(outPin,LOW);
        limitEnd=1;
        int hatra=1;
        int elore=0;
      }
    }    
  }
  Serial.println("Végálláshoz ért...5 sec szünet majd vissza");
  delay(5000);   //5 sec szünet majd vissza indul a másik irányba...
}
dckillman
Biztosítékgyilkos
Hozzászólások: 61
Csatlakozott: 2013. október 7. hétfő, 11:23

Re: végállás,prell figyelés

Hozzászólás Szerző: dckillman »

Szóval eddig jutottam vele ma.Vannak benne feleslege sorok és változók de azokat szeretném a kásőbbiek során még használni

Leírom hogy ez hogyan működik.A nyomógombbal elindítom a motort és a vezérlést.Elmegy a végállásáig majd 5 sec szünet és visszajön az elejére.Itt újabb indítást vár.

Hogyan megoldható az hogy egy másik kapcsolóval megoldjam azt hogy pl előre elindul a motor automata állásban ha egy másik kapcsolót benyomok akkor pedig megáll az automata program és ha mégegyszer megnyomom azt a bizonyos másik kapcsolót akkor visszajön a motor.

Köszönöm a segítséget

Kód: Egész kijelölése

//BEMENETEK

int nyomogomb1=2;
int nyomogomb2=3;
int nyomogomb3=4;

//KIMENETEK
int outPinLed1=10;
int outPinLed2=11;
int outPinLed3=12;
int relayElore=8;
int relayHatra=9;

//VÁLTOZÓK
int nyomogomb1_kapcsol=0;
int nyomogomb2_kapcsol=0;
int nyomogomb3_kapcsol=0;
int outPinLed1_allapot=0;
int outPinLed2_allapot=0;
int outPinLed3_allapot=0;
int kiir=0;
int villogo=13;
int elore_kiir=0;
int hatra_kiir=0;
int veg_kiir=0;
int limitVege=0;
int limitStart=0;
int elore=0;
int hatra=0;
int sum=0;
int automataszunet=5000;


void setup(){
  pinMode(nyomogomb1,INPUT);
  pinMode(nyomogomb2,INPUT);
  pinMode(nyomogomb3,INPUT);
  pinMode(outPinLed1,OUTPUT);
  pinMode(outPinLed2,OUTPUT);
  pinMode(outPinLed3,OUTPUT);
  pinMode(relayElore,OUTPUT);
  pinMode(relayHatra,OUTPUT);
  pinMode(villogo,OUTPUT);
  Serial.begin(9600);
  Serial.println("Serial.println teszt");
}

void uzem_villogo(){
  digitalWrite(villogo,HIGH);
  delay(250);
  digitalWrite(villogo,LOW);
  delay(250);
}

void szunet_villogo(){
  digitalWrite(villogo,HIGH);
}
void loop(){

  if(kiir==0)
  {
    Serial.println("A foprogram elindult");
    kiir=1;
  }

  /*
  A főprogramot a kapcsolóval elindítom
   */

  if(digitalRead(nyomogomb1)==LOW){ //nyomogomb ha nyomott
    delay(10); //prell kivárása
    if(digitalRead(nyomogomb1)==LOW){  //még mindig nyomott akkor kapcsoljunk.Tehát a motor induljon el automata állásban
      nyomogomb1_kapcsol=1;
    }
  }
  if(digitalRead(nyomogomb1)==HIGH && nyomogomb1_kapcsol==1)
  {
    digitalWrite(outPinLed1,HIGH);
    Serial.println("A motor elindult ");
    nyomogomb1_kapcsol=0;
    digitalWrite(villogo,HIGH);


    while(limitVege==0)
    {


      digitalWrite(outPinLed2,HIGH);
      digitalWrite(relayElore,HIGH);
      uzem_villogo();
      if(elore_kiir==0){
        Serial.println("Addig megy a motor mig nem allitja a vegallaskapcsolo(orso vege)");
        elore_kiir=1;
      }

      if(digitalRead(nyomogomb2)==LOW){  //megnyomta a végállást
        delay(10);  //Prell kivárása
        if(digitalRead(nyomogomb2)==LOW){ //még mindig nyomva van akkor álljunk meg
          limitVege=1;
          elore=0;
          hatra=1;
          digitalWrite(outPinLed2,LOW);
          digitalWrite(relayElore,LOW);
        }
      }
    }  

    for(int i=0;i<1;i++){
      Serial.println("Automata szunet ( jelenleg 5 masodperc)");   
    }


    delay(automataszunet); // 5 másodperc szünet majd automatikasn visszaindul

    while(limitStart==0)
    {
      digitalWrite(outPinLed3,HIGH);
      digitalWrite(relayHatra,HIGH);
      if(hatra_kiir==0){
        Serial.println("Addig megy a motor mig nem allitja a vegallaskapcsolo(orsó eleje)");
        hatra_kiir=1;
      }
      uzem_villogo();

      if(digitalRead(nyomogomb3)==LOW){  //megnyomta a végállást
        delay(10);  //Prell kivárása
        if(digitalRead(nyomogomb3)==LOW){ //még mindig nyomva van akkor álljunk meg
          limitStart=1;
          elore=1;
          hatra=0;
          digitalWrite(outPinLed3,LOW);
          digitalWrite(relayHatra,LOW);
        }
      }
    }
    for(int i=0;i<1;i++){
      Serial.println("orulhetunk hogy a program hiba nelkül kilepett"); 
      elore_kiir=0;
      hatra_kiir=0;
      limitStart=0;
      limitVege=0;
      sum=sum+1;
      veg_kiir=0;


      //befejeződött visszaállítju a kapcsolót 0 állásba és várjuk a következő indítást.
    }
    Serial.println("\n");
    Serial.println("Bekapcsolas ota : ");
    Serial.println(sum);
    Serial.println("mukodott a vezerles");
    Serial.println("...");
    Serial.println("\n");
  }
}

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: végállás,prell figyelés

Hozzászólás Szerző: Robert »

"Állapotgép"

A fő ciklusban nézed, hogy melyik gomb, milyen státuszban van és a programod is melyik alfeladatot hajtja végre.
Ha változás van - akkor projekt (állapotmódosítás).
dckillman
Biztosítékgyilkos
Hozzászólások: 61
Csatlakozott: 2013. október 7. hétfő, 11:23

Re: végállás,prell figyelés

Hozzászólás Szerző: dckillman »

Kicsit bővebb magyarázatot kérhetek?
A gombot minden ciklsuban figyeltessem és amikor bekövetkezik akkor hogyan lehet megoldani egy kisebb példa progi is tanulságos lehetne számomra.

Köszönöm
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: végállás,prell figyelés

Hozzászólás Szerző: Robert »

Vazlatkent:

Kód: Egész kijelölése

do
waitms 10
ha gomb1 nyomva call elore
ha gomb2 nyomva call hatra
loop

sub elore
motor elore
return

sub hatra
gomb=gomb+1
if gomb= 1 megall
if gomb>1 hatramegy
return
dckillman
Biztosítékgyilkos
Hozzászólások: 61
Csatlakozott: 2013. október 7. hétfő, 11:23

Re: végállás,prell figyelés

Hozzászólás Szerző: dckillman »

Ehhez hol találok programozási segédletet.Mert ezt, így még nem értem!(kevés a tudásom)...

Igazából rájöttem hogy azt szeretné megcsinálni hogy ha azzal a kapcsolóval elindítom a cuccot amivel eddig is.(ha nem nyomok közben akkor automata állás ha idő közben nyomok bármelyik "részben" akkor manuális lesz belőle).

Ha ezt megnyomom akkor meg áll a program és a következő nyomásra elindul visszafelé.

Azért kellene ez mert akkor a rövidebb anyag esetén is tudnám a dolgot szabályozni nem kellene kimenni a végére(esetleg itt menteni is lehet).
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: végállás,prell figyelés

Hozzászólás Szerző: Robert »

Ez volt most másik fórumban kivesézve: Kapcsolóval LED ki-/bekapcsolás...
Arra építs... :)
dckillman
Biztosítékgyilkos
Hozzászólások: 61
Csatlakozott: 2013. október 7. hétfő, 11:23

Re: végállás,prell figyelés

Hozzászólás Szerző: dckillman »

Magyarul a gombot figyeljem minél több helyen és akkor cselekedjek.Pl lépjek ki a ciklusból vagy ilyesmi?

Ezekről a parancsokról hol olvashatok?

Kód: Egész kijelölése

do
waitms 10
ha gomb1 nyomva call elore
ha gomb2 nyomva call hatra
loop

sub elore
motor elore
return

sub hatra
gomb=gomb+1
if gomb= 1 megall
if gomb>1 hatramegy
return
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: végállás,prell figyelés

Hozzászólás Szerző: Robert »

1, 60 nap alatt Arduino tanfolyam, http://www.tavir.hu/60nap
2, Arduino notebook (pdf)
3, Basic: Bascom-AVR, súgó (http://avr.tavir.hu)
dckillman
Biztosítékgyilkos
Hozzászólások: 61
Csatlakozott: 2013. október 7. hétfő, 11:23

Re: végállás,prell figyelés

Hozzászólás Szerző: dckillman »

Azt meglehet oldani hogy ha gombnyomás van akkor a program egy adott részhez ugrik a végrehajtásban?
(Sajnos nem találom az ismert forrásokban a megoldást)

Magyarul figyelem a gomb kapcsolását több helyen(mindenhova szúrjak be egy gombfigyelést?),Ha gombnyomás történik bárhol akkor megszakítom a vezérlést és egy külön programrészlet re ugrok?

Bocsi hogy értetlenkedek, de nem értem a dolgot ,mert kevés az információm.

Hátha megértem egyszer :-)

Köszönöm
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: végállás,prell figyelés

Hozzászólás Szerző: kapu48 »

Kersdmeg a fenti 3. pon: Bascom konyv, megszakitasok kezelese oldalt!
Ot van a megoldas. Bemenetek allapot valtozasara megszakitas keres. 8)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: végállás,prell figyelés

Hozzászólás Szerző: kapu48 »

Bocsi!
De az Androidos MK808-on nem megy meg jol a szoveg szerksztes! :oops:
Válasz küldése