leggere tempo pulsante premuto...

:-)

ntenere?

ggiungo

izione

H)

Banale sintassi, immagina di parlare e vedi che la scrittura ti viene naturale:

if( pulschiusura == HIGH && pulsapertura==LOW && finecorsa==HIGH) { digitalWrite (relechiusura, HIGH); }

ma suggerisco quando le condizioni sono tante una

if( ( pulschiusura == HIGH ) && ( pulsapertura == LOW ) && ( finecorsa == HIGH ) ) { digitalWrite (relechiusura, HIGH); }

non la riga. Puoi mettere tra parentesi qualsiasi cosa e se anche quelle che ho messo in ciascuna condizione sono superflue io preferisco qualcosa che posso leggere a colpo

essere considerato raccapricciante ma per me funziona.

if( ( ( pulschiusura == HIGH ) || ( 1 == 1 ) ) && ( pulsapertura == LOW ) && ( finecorsa == HIGH ) ) { digitalWrite (relechiusura, HIGH); }

--
- Thanks for introducing me to minimalims. 
- It's the least I could do.
Reply to
Archaeopteryx
Loading thread data ...

H)

PS: suggerisco spaziare, si legge meglio. Per esempio

if( a == b )

if( a==b )

--
- Thanks for introducing me to minimalims. 
- It's the least I could do.
Reply to
Archaeopteryx

Il 10/09/2019 15:12, Drizzt do'Urden ha scritto:

Non si sprecano gli interrupt per leggere un pulsante. Ti ripeto che un modo e' di associare 2 variabili ad ogni pulsante:

#define pinPulse 3

boolean pulse, pulse_old;

//dentro il setup

pinMode(pinPulse,INPUT_PULLUP); // normalmente e' alto pulse_old=true;

//dentro il loop

pulse=digitalRead(pinPulse); if (pulse==false && pulse_old==true) // E' stato premuto il pulsante //(cioe' va a massa) { delay(30) // se necessario in quanto i rinbalzi non sono //eliminati dall'hard // routine di gestione della pressione pulsante }

pulse_old=pulse;

Non mi sembra tanto difficile, G

Reply to
Giorgio

Il 10/09/2019 15:50, Giorgio ha scritto: .

mano, ormai lo so a memoria ma non conta nulla :-)

--
Saluti da Drizzt. 


www.agidone.altervista.org 
 Click to see the full signature
Reply to
Drizzt do'Urden

Il 10/09/2019 15:39, Archaeopteryx ha scritto:

ahhh, ok :-)

basta prenderci la mano :-)

--
Saluti da Drizzt. 


www.agidone.altervista.org 
 Click to see the full signature
Reply to
Drizzt do'Urden

Ma al mio ci hai dato un'occhiata? Credo che la seconda versione corretta dovrebbe *quasi* funzionare e penso mantenga il vantaggio di essere praticamente linguaggio parlato ma espresso in sintassi C.

In ogni caso ci sono cose che appaiono banali e invece sono lunghe e altre viceversa (riguardano soprattutto l'uso dei puntatori e ci arriverai, sono potentissimi). La

hai tonnellate di codice in rete da copincollare. La ruota

--
- Thanks for introducing me to minimalims. 
- It's the least I could do.
Reply to
Archaeopteryx

Vale anche per me, ho sbagliato a usare "or" e ci andava "and".

--
- Thanks for introducing me to minimalims. 
- It's the least I could do.
Reply to
Archaeopteryx

Il 10/09/2019 16:16, Archaeopteryx ha scritto:

sisi l'ho guardato ma ora sono in studio, quando torno in laboratorio accendo la baracca e riprovo tutto quello che mi avete postato :-)

venire richiamata all'occorrenza?

--
Saluti da Drizzt. 


www.agidone.altervista.org 
 Click to see the full signature
Reply to
Drizzt do'Urden

Pensi di riposarti senza provare altro ?

Reply to
Franco Af

Il 10/09/2019 16:44, Franco Af ha scritto:

l'ingresso digitale :-)

non faccio molti passi avanti, quando mi sono messo in testa di provare

--
Saluti da Drizzt. 


www.agidone.altervista.org 
 Click to see the full signature
Reply to
Drizzt do'Urden

sicuro che intendi un'altra cosa e la risposta potrebbe variare a seconda dell'intento della domanda.

--
- Thanks for introducing me to minimalims. 
- It's the least I could do.
Reply to
Archaeopteryx

Il 10/09/2019 17:06, Archaeopteryx ha scritto:

dunque, se non ho inteso male, il micro esegue tutto il codice in sequenza per cui bisogna valutare bene come inserire le varie istruzioni

una parte di codice che esegua determinate azioni solo se richiamato, tipo l'interrupt.

esempio:

il mio codice fa tutta una serie di cose ma se arriva un input va ad eseguire una parte di codice che normalmente non viene toccata, una specie di subroutine :-)

--
Saluti da Drizzt. 


www.agidone.altervista.org 
 Click to see the full signature
Reply to
Drizzt do'Urden

organizzativo. Tipicamente il tuo loop ha varie sezioni in cui puoi entrare se no vengono automaticamente saltate.

potresti avere vere entrambe le condizioni e dover eseguire entrambe le cose, o saltare una o entrambe. Ci ho

stato fatto niente e il problema da risolvere lo permette,

loop).

proprio quello che tu chiedi...

void loop () { char some_task_executed = 0 ;

if( key1_released_after_1_sec () ) { // parte di codice rel. a pulsante 1

sub_key1 () ; some_task_executed = 1 ; }

if( key2_released_after_1_sec () ) { // parte di codice rel. a pulsante 2

sub_key2 () ; some_task_executed = 1 ; }

if( !some_task_executed ) Sleep (10) ; }

--
- Thanks for introducing me to minimalims. 
- It's the least I could do.
Reply to
Archaeopteryx

Il 10/09/19 13:58, blisca ha scritto:

Arduino e` solo un microcontroller corredato di regolatore di tensione e adattatore seriale/USB. La schedina non e` certificata per alcun uso industriale/civile e non passa alcun test EMI, e` cioe` pensata solo per un utilizzo sperimentale al banco.

L'IDE di Arduino e` un ambiente "semplificato" che nasconde tutti i dettagli del micro (non c'e` bisogno di occuparsi di alcun registro) e mette a disposizione un piccolo layer software che si occupa dei processi in background (comunicazione seriale, contatore del tempo, bus i2c, generazione PWM).

In effetti "Arduino" e` un ventaglio di board con processori diversi, ma su tutte l'istruzione digitalWrite(3,HIGH); manda alto il terminale 3 della board (e ci impiega anche 5 microsecondi!)

Tutto cio` lo rende formidabile per la prototipazione rapida, ma trova il suo punto debole proprio nei compiti che richiederebbero un controllo specifico delle periferiche interne del micro (che il 99% degli Ardu-user ignora totalmente).

Se si vuole e` comunque possibile accedere a tutti i registri, scrivere direttamente sulle porte in 120 nanosecondi ecc, ma sono cose che l' Ardu-user medio non fa e non sa (e mi ci metto anch'io, le facevo in assembly sui PIC).

Reply to
Claudio_F

Il 10/09/19 17:42, alfio ha scritto:

Forse mi sfugge, ma per me il valore ritornato da millis a un certo punto fa "tutto il giro" raggiungendo 't' e quella condizione risulta di nuovo falsa per un secondo. Questo ogni 2 alla 32esima millisecondi.

Reply to
Claudio_F

dichiari una variabile (rigorosamente volatile) all'inizio del file che

Nella funzione di interrupt modifichi il valore. Nel loop dovrai controllarla nei punti dove vuoi eseguire il codice. Es: if(variabile == valore-interrupt){

// imposti nuovamente la variabile al valore iniziale }

Reply to
Franco Af

Il 10/09/19 15:09, Drizzt do'Urden ha scritto:

Questa e` una sintassi valida (chiamata comma operator, cioe` operatore virgola), ma come gia` detto non fa quello che pensavi, di fatto l'unica condizione considerata dall' if e` solo l'ultima.

E dimentica per sempre il comma operator, io l'ho scoperto dopo anni... o forse lo avevo rimosso subito :D

Reply to
Claudio_F

Mi sarebbe piaciuto giocare un po' seriamente coi micro ma mi sono arenato. Ne presi un paio consigliati su

verso di farlo vedere all'IDE, forse un giorno ci

la vedo dura.

--
- Thanks for introducing me to minimalims. 
- It's the least I could do.
Reply to
Archaeopteryx

Mi pare ma solo mi pare di ricordare che la differenza tra due tempi t1, t2 invece funziona sempre, anche quando t2

dimostrare ammesso che io ricordi bene.

--
- Thanks for introducing me to minimalims. 
- It's the least I could do.
Reply to
Archaeopteryx

Il 10/09/2019 18:12, Franco Af ha scritto: )

--
Saluti da Drizzt. 


www.agidone.altervista.org 
 Click to see the full signature
Reply to
Drizzt do'Urden

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.