multiprogramma

ciao a tutti :=)
io ho creato un programma per arduino( ma dai :slight_smile: )
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 :slight_smile:

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 :)

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

più o meno così:

funzione1(){
  programma1;
}

funzione2(){
  programma2;
}

loop(){
  if (pulsante premuto){
    programm1();
  }
  else{
    programm2();
  }
}

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

Allora non ho capito cosa devi fare.

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 :)

Una cosa così:

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();
  }
}

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

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

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.

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

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

"mentre a è uguale ad 1 fai_qualcosa"

Allora. Questo pezzo di codice:

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.

aaaaaa ok grazie ora ho capito :) :)

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

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

funzione1(){
  programma1;
}

funzione2(){
  programma2;
}

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

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

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

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 :)

dipende un po dalla semplicita dei programmi

esempio se un programma utilizza un pin (es:5) come INPUT,

e un altro programma utilizza il pin pin (es:5) come OUTPUT,

le cose si complicano perche i settaggi nel void setup vengono eseguiti una volta sola devi trovare il sistema di attivare anche i settaggi per quel programma che vuoi utilizzare

be si si questo lo avevo immaginato anche se non mi viene in mente niente che si possa usare sia come input che come output :)

ho provato ma non va come faccio ad aggiungere il programma con la scritta code? ovvero come aveva fatto erpomata?

State sbagliando terminologia. Non sono "programmi". Chiamatele funzioni o routine, ma NON programmi. Di programmi ce n'è uno solo ed è lo sketch nella sua interezza.

Chiamiamo le cose col loro nome, e non è pignoleria: sennò mi metto a chiamare voltaggio la tensione, eh! :P

intendo qui sul forum :slight_smile: