(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?
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...
}
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...
}
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.
//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");
}
}
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).
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.
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
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).
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
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.