Go Down

Topic: multiprogramma (Read 987 times) previous topic - next topic

lupo95

ciao a tutti :=)
io ho creato un programma per arduino( ma dai :) )
volevo sapere come "inserire più programmi" nello stesso programma e poi all'avvio in base a quale bottone schiaccio avvio un programma
grazie infinite in anticipo :)

sciorty

Qui si discute riguardo la possibilità di mandarli in esecuzione alternativamente ad ogni accensione, con una piccola modifica riusciresti ad adattare il codice alle tue esigente :)

lupo95

ok grazie
ho letto ma non ho capito molto come dovrei fare :P

erpomata

più o meno così:

Code: [Select]
funzione1(){
  programma1;
}

funzione2(){
  programma2;
}

loop(){
  if (pulsante premuto){
    programm1();
  }
  else{
    programm2();
  }
}
http://www.paologiammarco.it
http://www.valentinamagni.it

lupo95

io intendevo avviare un programma o l'altro in base a che bottone schiaccio
una cosa del genere l'avevo provata quando cercavo di impostare un bottone per avviare il programma
avevo scritto una cosa del genere

const int button=2;
const int led=3;
int buttonstate=0;
void setup()
{
  pinMode(button,INPUT);
}
void loop()
{
  buttonstate=digitalRead(button);
  if(buttonstate==HIGH)
  {
    controllo();      //avvia il programma
  }
  else
  {
    digitalWrite(led,HIGH);
  }
}

ma non va ovvero avvia subito il programma
i collegamenti sono giusti perchè li ho copiati dagli esempi di frizing e ricontrollati più volte

erpomata

Allora non ho capito cosa devi fare.
http://www.paologiammarco.it
http://www.valentinamagni.it

lupo95

praticamente quando accendo arduino (gli do corrente) non deve fare niente deve solo aspettare che io schiacci uno dei due bottoni e in base a quale bottone schiaccio avvia un programma diverso
scusa se non mi ero spiegato bene :)

erpomata

Una cosa così:

Code: [Select]
funzione1(){
 programma1;
}

funzione2(){
 programma2;
}

loop(){

// Aspetto la pressione di un tasto
a=digitalRead(3);
b=digitalRead(4);
while (! ((a==HIGH ) || (b==HIGH))){
 a=digitalRead(3);
 b=digitalRead(4);
}

// tasto premuto
 if (a==HIGH){
   programm1();
 }
 else{
   programm2();
 }
}
http://www.paologiammarco.it
http://www.valentinamagni.it

lupo95

scusa ae continuo a rompere ma sono stupido :)
ci sono delle cose che non capisco del programma (l'avevo detto che ero stupido   XD )
while non significa finchè ovvero non dovrebbe leggere i valori solo finché uno dei tasti è premuto?

while (! ((a==HIGH ) || (b==HIGH))){
  a=digitalRead(3);
  b=digitalRead(4);
}

e poi nella seconda parte del programma non ho capito una cosa... :)
dice che se schiaccio il bottone a avvia il programma 1 altrimenti se non lo schiaccio avvial il programma 2... ma se non premo niente ?? XD

leo72


praticamente quando accendo arduino (gli do corrente) non deve fare niente deve solo aspettare che io schiacci uno dei due bottoni e in base a quale bottone schiaccio avvia un programma diverso

Non sono "programmi" ma routine.
E' il classico esempio della chiamata condizionale:
if (qualcosa)
 eseguiQuesto():
else
 eseguiQuestAltro();

Ma hai sempre 1 unico programma che racchiude tutto. Nel mondo dei microcontrollori non c'è la distinzione di programmi come file o software separati che richiami a seconda di qualcosa. Devi scrivere un unico sketch e poi mandare in esecuzione la parte di codice che ti interessa in base ad una condizione.

leo72


scusa ae continuo a rompere ma sono stupido :)
ci sono delle cose che non capisco del programma (l'avevo detto che ero stupido   XD )
while non significa finchè ovvero non dovrebbe leggere i valori solo finché uno dei tasti è premuto?

while (! ((a==HIGH ) || (b==HIGH))){
  a=digitalRead(3);
  b=digitalRead(4);
}

e poi nella seconda parte del programma non ho capito una cosa... :)
dice che se schiaccio il bottone a avvia il programma 1 altrimenti se non lo schiaccio avvial il programma 2... ma se non premo niente ?? XD

While vuol dire "mentre".
while (a == 1) {
  fai_qualcosa
}

"mentre a è uguale ad 1 fai_qualcosa"

erpomata

Allora.
Questo pezzo di codice:
Code: [Select]

a=digitalRead(3);
b=digitalRead(4);
while (! ((a==HIGH ) || (b==HIGH))){
 a=digitalRead(3);
 b=digitalRead(4);
}


legge lo stato dei 2 tasti e blocca l'esecuzione del loop fino a che non se ne preme uno dei due. La condizione "! ((a==HIGH ) || (b==HIGH))" è vera solo se tutet e duei tasti sono off.
Quando ne premi uno dei 2 la condizione diventa falsa esce dal ciclo e la if successiva controlla quale dei due hai premuto. In quel punto per forza ne hai premuto uno dei due.
http://www.paologiammarco.it
http://www.valentinamagni.it

lupo95

aaaaaa ok grazie ora ho capito :) :)

mi ci è voluto un po ma alla fine ci sono arrivato :)

erpomata

Così forse è pure più facile e più corretto:

Code: [Select]

funzione1(){
 programma1;
}

funzione2(){
 programma2;
}

loop(){
 a=digitalRead(3);
 b=digitalRead(4);

 if (a==HIGH){
   programm1();
 }
 else if (b==HIGH){
   programm2();
 }
}

http://www.paologiammarco.it
http://www.valentinamagni.it

lupo95

ok grazie :) adesso appena posso provo e vi faccio sapere :)

Go Up