Selezionare due programmi diversi tramite un interruttore 1-0-2

Ho costruito un supporto che fa ruotare lo smartphone per fare le fotografie panoramiche, ma volendo si può usare anche per girare brevi video a 360º.
Ho usato uno stepper collegato ad una scheda nano v3.0 e alimentato da due lipo da 3.7V messe in serie per raddoppiare il voltaggio.
Un interruttore a bilanciere on/off accende e spegne lo ”Spinphone” (gli ho dato questo nome).
Poi a seconda che uno voglia fare una foto panoramica (240º) o un video (360º) il programma cambia.

Ciò che vorrei fare è caricare sulla scheda entrambi i programmi e selezionare quale farle eseguire usando un interruttore a bilanciere di tipo 1-0-2 cioè con due diverse posizioni di accensione.
Interruttore sull’1–> foto panoramica
Interruttore sul 2 → video
Interruttore sullo 0 → Spinphone spento

Ho provato mille combinazioni diverse tra collegamenti e programmi, ma nessuno ha funzionato.
Qualcuno ha qualche idea da darmi, per favore?
Spiegate in modo semplice perché sono una niubba!

ciao chatandplay,

non ho capito se a te interessa "solo" far ruotare, tramite il selettore, il cellulare oppure abilitare anche il cellulare a fare foto/video!?

Chiarissimo

Domani ci vediamo dentro

Non è difficile

Presumo che tu voglia che lo spinphone torni indietro e che non ripeta anche se ti dimentichi di riportare indietroi l'interruttore

Posta almeno uno degli sketch che hai fatto

Mi basta far ruotare il cellulare, Orso.

Ho approntato tutta la documentazione per riprodurlo, sketches compresi, a questo link: https://drive.google.com/drive/u/0/mobile/folders/0BzkG_YgHBgBsdmg5enlQZkVRMWs Questa è la versione in cui carico un programma alla volta: o quello per le panoramiche o quello per i video. Adesso invece vorrei riunire il tutto in un solo Spinphone che esegue un programma o l'altro a seconda della posizione dell'interruttore.

Ok, non difficile

Scegli due input liberi della tua arduino

chiamimoli I1 e I2

li dichiari input_pullup

il centrale del selettore 1-0-2 va al meno

il polo 1 a I1 e il polo 2 a I2

dichiari due varibili int in più

int st=0;
int stp=0;

nella setup non cambia nulla

crei una funzione

void ruota(int valore){
// Rotazione completa CW
 motore.setSpeed(40);   // Impostiamo la velocita'
 motore.step(valore* rapporto);
 delay(2-000);
 
// Rotazione completa Anti-CW
 motore.setSpeed(400);  // Re impostiamo la velocita'
 motore.step(-valore * rapporto);
 delay(2000);
}

invece nella loop metti solo:

st=!digitalread(I1)-!digitalread(i2);
if (stp!=st){
  stp=st;
  if (st==1){
   ruota(22);

  }
if (st==-1){
   ruota(32);

  }


}

adesso devo andare, dopo ti spiego come funziona, ma non è difficile

>docsavage: ... che fai ... ti ci metti anche tu a NON racchiudere il codice nei tag CODE ? >:(

Guglielmo

4 righe

Per volta...

Non mi ero accorto di essermi dilungato..

Stasera riaccende pc e metto a posto

Da telefono è un casino

A proposito, buone ferie

Ti servono due funzioni, in una metterai il programma per fare foto, nella seconda metti il programma per fare video. Nella funzione loop() leggerai due input, un pin che stabilisce se è acceso o spento e un pin che seleziona se è attivo il programma foto o il programma video.

Esempio:

/* dichiaro tutti i pin e tutte le variabili globali usate da i due programmi "foto e video" */
#define pinOnOff 10
#define pinVideoFoto 11

void setup(){
   
    /* i pin sono in pullup quindi LOW se premuti */

    pinMode(pinOnOff, INPUT_PULLUP);
    pinMode(pinVideoFoto, INPUT_PULLUP);

}



void loop(){

    if(digitalRead(pinOnOff)==LOW){ // esegue solo se il pin pinOnOff è attivo

        if(digitalRead(pinVideoFoto)==LOW){ // pin selettore o foto o video
            Foto();
        }else{
            Video();
        }

   }

}


void Foto(){

 // Programma per fare le foto

}

void Video(){

  //Programma per fare i video

}

[OT]

ma come, pensavo che su questo forum non si desse la "pappa pronta" ma si aiutasse l'utente nel creare da solo il proprio software e aiutarlo nel correggerlo, vedo che basta che arrivi una donzella in difficoltà e piovono codici come niente fosse :o 8) 8)

Va che il codice è il suo Io mi sono limitato a scriverlo con 2 if

Il resto è copiato dal suo link....

pensavo che su questo forum non si desse la "pappa pronta"

Penso che le cose stiano cosi, non si può pretendere che una persona dedichi un ora o più ore di tempo per scrivere un codice che risolve un problema relativamente complesso, ma a volte per proporre una soluzione banale, è giusto il tempo di scrivere 5-10 righe di codice. Spesso "opinione personale", si impara di più vedendo un piccolo esempio che spiegare una cosa con decine di righe di testo, è anche la filosofia adottata da arduino, per ogni funzione è mostrato un piccolo esempio di codice che ne mostra l'utilizzo, proprio perché mostrare un esempio è anch'esso un modo di insegnare :)

Personalmente invece, se il problema è semplice mi diverte anche farlo, mentre se richiedesse un ora di tempo non mi metterei proprio a farlo :)

... concordo con -zef- e ricordo che, indipendetemente dalle opinioni personali, esiste uno "stile di comportamento" ben definito su questo forum e quindi TUTTI sono pregati di adeguarcisi ... la "pappa fatta" NON si fornisce.

Vale sempre il detto citato tante volte da Astro ... "Dai un pesce a un uomo e lo nutrirai per un giorno. Insegnagli a pescare e lo nutrirai per tutta la vita."

Grazie a tutti,

Guglielmo

Due righe, giusto per far capire che ... non è una cosa decisa così, magari per fare chissà quale dispetto, o per quale strano recondito motivo ...

... ritengo infatti (... e non solo io, ma anche i più "anziani" ed "esperti") che lo scopo del forum e della comunità sia "far crescere" le persone (facendole studiare e ragionare) e non fornirgli "pappa fatta" per cui, alla prossima difficoltà ... sono da capo a dodici.

Con codice fornito bello che fatto, la tentazione, da parte di chi fa domande, di fare solo copia/incolla (... senza capire, purché funzioni), è sicuramente forte ed il risultato è di [u]aver imparato poco o nulla/u.

E' bene invece cercare di spiegare la teoria e gli errori fatti (... senza fornire la soluzione), indicare testi da leggere/studiare, così che, chi pone le domande, si sforza, capisca/studia e riesce a realizzare [u]da solo[/u] quello che vuole ... con il risultato che IMPARA. ;)

Guglielmo

gpb01: ... ritengo infatti (... e non solo io, ma anche i più "anziani" ed "esperti") che lo scopo del forum e della comunità sia "far crescere" le persone (facendole studiare e ragionare) e non fornirgli "pappa fatta" per cui, alla prossima difficoltà ... sono da capo a dodici.

Assolutamente si, ovviamente qualche riga di codice come esempio alla eventuale spiegazione non si nega mai, scrivere per un intero un programma per soddisfare la richiesta di un iscritto non se ne parla proprio, sia perché non abbiamo tempo da dedicare ad una cosa simile, sia perché così non impara nulla. Se poi nel proprio archivio si ha del codice pronto, scritto da noi o trovate in rete, che può essere utile alla soluzione del problema credo sia a discrezione personale fornirlo o meno, dal mio punto di vista dipende molto anche da come viene formulata la domanda iniziale e chi la fa, se è il classico nuovo utente che cerca il software pronto per una qualche tesina può pure aspettare fino alla fine dei tempi per quanto mi riguarda. :) Ovviamente se il problema posto da un iscritto entra nella sfera di interesse personale nulla vieta di cooperare attivamente alla realizzazione del progetto, però sempre tenendo conto dello scopo principale di questo forum, non siamo un help desk, anche perché non ci paga nessuno, siamo un mezzo per imparare cose nuove. Tra gli iscritti a questo forum, inteso in globale e non solo la sezione italiana, ci sono hardwaristi, softwaristi, ingegneri, matematici, fisici, chimici, etc, molto preparati nei loro settori, siamo una enorme risorsa di conoscenza sia teorica che pratica, probabilmente se mettiamo assieme tutte le menti di questo forum andiamo su Marte molto prima della NASA e di Spacex. :)

astrobeed: ... ovviamente qualche riga di codice come esempio alla eventuale spiegazione non si nega mai, scrivere per un intero un programma per soddisfare la richiesta di un iscritto non se ne parla proprio, sia perché non abbiamo tempo da dedicare ad una cosa simile, sia perché così non impara nulla.

Assolutamente d'accordo ... due righe, un diagramma logico, uno scheletro in meta-linguaggio, un riferimento ad un esempio in rete, ecc. vanno benissimo, lo scrivere buona parte del codice no ... per quanto già su spiegato ;)

Guglielmo

In realtà è una filosofia molto comune in diversi forum, e io mi adeguerò :)

Però io se vedo un esempio spesso imparo, mica non si impara niente :) comunque rispetterò la filosofia del forum, e per quanto riguarda quello che ho postato in questo thread, in pratica sono due if() commentati...

Grazie mille docsavage e Torn24 il vostro aiuto mi è davvero prezioso.

Mi scuso con tutti per aver involontariamente causato questa bagarre, non era mia intenzione. Mi sono finalmente decisa a rivolgermi a questo forum dopo aver provato di tutto con le mie scarsissime conoscenze in materia. Sono la prima a voler arrivare alla soluzione di un problema da sola, ma quando proprio non ce la faccio allora cerco aiuto.

I suggerimenti fornitimi saranno comunque spunto di studio da parte mia per capire il funzionamento di funzioni che non conoscevo. A volte un suggerimento velato può bastare, ma quando serve di più, come nel mio caso, un esempio già ben strutturato è fonte e stimolo per ulteriori studi e approfondimenti e non mera "pappa pronta".

Grazie ancora a tutti e buona giornata.

chatandplay:
Mi scuso con tutti per aver involontariamente causato questa bagarre, non era mia intenzione.

Assolutamente nessun problema, è stata un’ottima occasione per ribadire alcuni importanti concetti :wink:

Prosegui quindi nella scrittura del tuo codice e … se avrai problemi, non esistare a metterlo qui (… mi raccomando, in conformità al regolamento, punto 7, racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> … primo a sinistra) e chiedere spiegazioni su eventuali errori o malfunzionamenti :slight_smile:

Guglielmo

D'accordo Guglielmo, Grazie!

astrobeed: ... probabilmente se mettiamo assieme tutte le menti di questo forum andiamo su Marte molto prima della NASA e di Spacex. :)

... non farti sentire, altrimenti quei due (NASA e SpaceX :P) ci fanno oscurare il forum dai loro hacker per paura di arrivare secondi e fare una brutta figura ... (:D)

EDIT: oppure fanno iscrivere un po dei loro ingenieri come utenti del forum a porre domande apparentemente slegate fra loro per sfruttarci gratis a risolvere tutti i loro problemi ... :D :D :D