aiuto memoria arduino
code: [select]
int ar0 = 2; // ampolla reed - finecorsa ad ogni piano
int te0 = 3; // tasto esterno
int ar1 = 4;
int te1 = 5;
int ar2 = 6;
int te2 = 7;
int ar3 = 40;
int te3 = 41;
int sp0 = 44; // microswitch ad ogni piano, per segnalare l'eventuale apertura della porta della cabina
int sp1 = 45;
int sp2 = 46;
int sp3 = 47;
int lv0 = 22; // led verde
int lr0 = 23; // led rosso
int lv1 = 24;
int lr1 = 25;
int lv2 = 8;
int lr2 = 9;
int lv3 = 42;
int lr3 = 43;
int g = 28; // display 7 segmenti
int f = 29;
int = 30;
int b = 31;
int dp = 32;
int c = 33;
int d = 34;
int e = 35;
int motorpin1 = 50;
int motorpin2 = 51;
int motorpin3 = 52;
int motorpin4 = 53;
int pinpot = 0;
void setup(){
pinmode(ar0, input);
pinmode(te0, input);
pinmode(ar1, input);
pinmode(te1, input);
pinmode(ar2, input);
pinmode(te2, input);
pinmode(ar3, input);
pinmode(te3, input);
pinmode(sp0, input);
pinmode(sp1, input);
pinmode(sp2, input);
pinmode(sp3, input);
pinmode(lv0, output);
pinmode(lr0, output);
pinmode(lv1, output);
pinmode(lr1, output);
pinmode(lv2, output);
pinmode(lr2, output);
pinmode(lv3, output);
pinmode(lr3, output);
pinmode(g, output);
pinmode(f, output);
pinmode(a, output);
pinmode(b, output);
pinmode(dp, output);
pinmode(c, output);
pinmode(d, output);
pinmode(e, output);
pinmode(motorpin1, output);
pinmode(motorpin2, output);
pinmode(motorpin3, output);
pinmode(motorpin4, output);
}
void zero(){ // display numero zero
digitalwrite(g, low);
digitalwrite(f, high);
digitalwrite(a, high);
digitalwrite(b, high);
digitalwrite(e, high);
digitalwrite(d, high);
digitalwrite(c, high);
digitalwrite(dp, low);
}
void uno(){ // display numero uno
digitalwrite(g, low);
digitalwrite(f, low);
digitalwrite(a, low);
digitalwrite(b, high);
digitalwrite(e, low);
digitalwrite(d, low);
digitalwrite(c, high);
digitalwrite(dp, low);
}
void due(){ // display numero due
digitalwrite(g, high);
digitalwrite(f, low);
digitalwrite(a, high);
digitalwrite(b, high);
digitalwrite(e, high);
digitalwrite(d, high);
digitalwrite(c, low);
digitalwrite(dp, low);
}
void tre(){ // display numero tre
digitalwrite(g, high);
digitalwrite(f, low);
digitalwrite(a, high);
digitalwrite(b, high);
digitalwrite(e, low);
digitalwrite(d, high);
digitalwrite(c, high);
digitalwrite(dp, low);
}
void motoresu(){
digitalwrite(motorpin1, high);
digitalwrite(motorpin2, low);
digitalwrite(motorpin3, low);
digitalwrite(motorpin4, low);
delay(5);
digitalwrite(motorpin1, low);
digitalwrite(motorpin2, low);
digitalwrite(motorpin3, high);
digitalwrite(motorpin4, low);
delay(5);
digitalwrite(motorpin1, low);
digitalwrite(motorpin2, high);
digitalwrite(motorpin3, low);
digitalwrite(motorpin4, low);
delay(5);
digitalwrite(motorpin1, low);
digitalwrite(motorpin2, low);
digitalwrite(motorpin3, low);
digitalwrite(motorpin4, high);
delay(5);
}
void motoregiu(){
digitalwrite(motorpin4, high);
digitalwrite(motorpin3, low);
digitalwrite(motorpin2, low);
digitalwrite(motorpin1, low);
delay(5);
digitalwrite(motorpin4, low);
digitalwrite(motorpin3, low);
digitalwrite(motorpin2, high);
digitalwrite(motorpin1, low);
delay(5);
digitalwrite(motorpin4, low);
digitalwrite(motorpin3, high);
digitalwrite(motorpin2, low);
digitalwrite(motorpin1, low);
delay(5);
digitalwrite(motorpin4, low);
digitalwrite(motorpin3, low);
digitalwrite(motorpin2, low);
digitalwrite(motorpin1, high);
delay(5);
}
void motorefermo(){
digitalwrite(motorpin1, low);
digitalwrite(motorpin2, low);
digitalwrite(motorpin3, low);
digitalwrite(motorpin4, low);
}
void ledrossi(){ // cabina in movimento, tutti led rossi sono accesi
digitalwrite(lv0, low);
digitalwrite(lv1, low);
digitalwrite(lv2, low);
digitalwrite(lv3, low);
digitalwrite(lr0, high);
digitalwrite(lr1, high);
digitalwrite(lr2, high);
digitalwrite(lr3, high);
}
void ledpiano0 (){ // led accesi con la cabina al piano 0
digitalwrite(lv0, high);
digitalwrite(lv1, low);
digitalwrite(lv2, low);
digitalwrite(lv3, low);
digitalwrite(lr0, low);
digitalwrite(lr1, high);
digitalwrite(lr2, high);
digitalwrite(lr3, high);
}
void ledpiano1 (){ // led accesi con la cabina al piano 1
digitalwrite(lv0, low);
digitalwrite(lv1, high);
digitalwrite(lv2, low);
digitalwrite(lv3, low);
digitalwrite(lr0, high);
digitalwrite(lr1, low);
digitalwrite(lr2, high);
digitalwrite(lr3, high);
}
void ledpiano2 (){ // led accesi con la cabina al piano 2
digitalwrite(lv0, low);
digitalwrite(lv1, low);
digitalwrite(lv2, high);
digitalwrite(lv3, low);
digitalwrite(lr0, high);
digitalwrite(lr1, high);
digitalwrite(lr2, low);
digitalwrite(lr3, high);
}
void ledpiano3 (){ // led accesi con la cabina al piano 3
digitalwrite(lv0, low);
digitalwrite(lv1, low);
digitalwrite(lv2, low);
digitalwrite(lv3, high);
digitalwrite(lr0, high);
digitalwrite(lr1, high);
digitalwrite(lr2, high);
digitalwrite(lr3, low);
}
// inizio del programma
void loop(){
ar0 = digitalread(2);
te0 = digitalread(3);
ar1 = digitalread(4);
te1 = digitalread(5);
ar2 = digitalread(6);
te2 = digitalread(7);
ar3 = digitalread(40);
te3 = digitalread(41);
//0000000000000000000000000000000000000000000000000000000000000000000
// azionamento motore
if (ar0 == high) { // il piano attuale è lo 0?
ledpiano0(); // accendi led del piano zero
zero(); // segnala il numero 0 sul display
if (te1 == high){ // è stato premuto il tasto del piano 1?
while (ar1 == low){ // entra in un ciclo infinito e ne esce quando ar1 diventa high
ar1 = digitalread(4); // leggi lo stato del finecorsa del piano 1
ledrossi();
motoresu();
}
}
else if (te2 == high){
while (ar2 == low){
ar2 = digitalread(6);
ledrossi();
motoresu();
}
}
else if (te3 == high){
while (ar3 == low){
ar3 = digitalread(40);
ledrossi();
motoresu();
}
}
else if (ar1 == high){
motorefermo();
uno();
ledpiano1();
}
else if (ar2 == high){
motorefermo();
due();
ledpiano2();
}
else if (ar3 == high){
motorefermo();
tre();
ledpiano3;
}
} // fine azionamento motore
// controllo destinazione
else if (ar1 == high){
motorefermo();
uno();
ledpiano1();
}
else if (ar2 == high){
motorefermo();
due();
ledpiano2();
}
else if (ar3 == high){
motorefermo();
tre();
ledpiano3;
}
// fine controllo destinazione
} // fine loop
// fine programma
questo è il mio programma per il comando di un ascensore in miniatura, ho incollato solo il segmento di software che riguarda solo il caso in cui il finecorsa del piano terra è high e vengono premuti rispettivamente tasti del piano 1 (te1) del piano 2 (te2) e del piano 3 (te3).
il funzionamento è il seguente: viene effettuato un controllo dei finecorsa ad ogni piano che indicherà la presenza della cabina, successivamente viene effettuato il controllo dei tasti di chiamata che verranno premuti e il motore girerà fino quando non si attiverà il finecorsa del piano del tasto premuto.
io però vorrei chiamare più piani contemporaneamente, cioè se la cabina è al piano terra e io premo il tasto del piano 1 e mentre il motore gira premo il tasto del piano 2, vorrei che prima si fermasse al piano 1 per tot secondi, 5 ad esempio, per poi ripartire in direzione del piano 2 e così via se dovessi premere prima il tasto del terzo piano e poi quello del secondo...
qualche idea? dovrei immagazzinare lo stato del tasto premuto mentre il motore gira nella memoria di arduino?
ti serve un array in cui memorizzare il pulsante premuto. il 1° elemento dell'array è il piano successivo che l'ascensore deve raggiungere. una volta raggiunto, lo elimini dall'array e fai scorrere le altre celle di 1 posto. una volta svuotato l'array, l'ascensore si ferma all'ultimo piano raggiunto.
ps:
il titolo è fuorviante, non fa capire di cosa si stia parlando nel thread
ps:
il titolo è fuorviante, non fa capire di cosa si stia parlando nel thread
Arduino Forum > International > Italiano > Software (Moderator: leo72) > aiuto memoria arduino
arduino
Comments
Post a Comment