Go Down

Topic: [Risolto] 2 button 2 Led (Read 774 times) previous topic - next topic

ouassour

Dec 29, 2018, 10:39 pm Last Edit: Jan 01, 2019, 09:38 pm by ouassour
Salve vorrai inserire 2 bUTTON per eseguire  lo stesso codice.

parte con led11 led12 HIGH
PER 2 ORE
SE BUTTON 1 HIGHt --> LED11 HIGH 12 lOW finché button 2 diventa Hight
attesa 2 ore se button 2 high ----> led11 LOW 12 HIGH fine button1 diventa  hight
attesa 2 ore rifare il ciclo

in teoria devo inserire solo 2 fine corsa
GRazie




Code: [Select]
 
  #define LED 11  
    #define LED 12  
  // LED collegato al pin digitale 11  
  
void setup() {  
  pinMode(12, OUTPUT);     // imposta il pin digitale come output  
    pinMode(11, OUTPUT);     // imposta il pin digitale come output  

}  
  
void loop() {  
  digitalWrite(12, HIGH);
  digitalWrite(11, HIGH); // spegne il LED
 delay(2000);
  digitalWrite(12, HIGH);  // accende il LED  
  digitalWrite(11, LOW);  // accende il LED  
  delay(5000);              // aspetta un secondo  
  digitalWrite(12, HIGH);
  digitalWrite(11, HIGH); // spegne il LED  
  delay(2000);  
   digitalWrite(12, LOW);
  digitalWrite(11, HIGH);
  delay(5000);  
 
}

torn24

Ciao! Certamente quello che chiedi è possibile, ma bisogna vedere se tu ora hai raggiunto una competenza
sul linguaggio che ti permette di farlo  :)
Il codice da te postato non si avvicina neanche un po alla soluzione del tuo problema  :)

1) Tu devi fare la stessa  cosa alla pressione di un pulsante, ma su pin diversi e con valori diversi.
     Allora penso per prima cosa crearsi una funzione che lo faccia, non userai costanti dei pin,ma
     una variabile, alla pressione del pulsante alla variabile assegni il valore del pin-led su cui agire, poi
     richiami la funzione che accenderà o spegnerà il led.

2)Per calcolare la pausa di ore userai un ciclo while e la funzione mills, il ciclo continua fino a quando non
   sono passate le ore desiderate, all'interno del while leggerai la pressione del pulsante, se premuto cambi valore alla variabile che contiene il numero dei pin, e esci dal while con break.

In pratica, sia i pin dei led, sia i pin dei pulsanti, non sono individuati con costanti "sempre quelli", ma con variabili a cui assegnerai di volta in volta i pin che dovrai usare.





Silente

Millis() é utilizzabile se non desideri precisioni superiori al minuto, ed anche in quel caso su lungo periodo può sforare. Se vuoi precisioni superiori ti consiglio l'uso di un RTC. Esso assicura la precisione del secondo, se non di più. Ma chiaramente sarebbe una cosa in più da acquistare e saper usare.
Comunque credo che il tuo problema si possa risolvere con un codice che faccia questo
Code: [Select]

//la loop deve fare
{
  Se (sento il tasto 1)
  {
    Finché (non sento il tasto 2)
    {
      Spengo il led di 2
      Accendo il led di 1
    }
    Accendo il led di 2
  }
  Altrimenti se (sento il tasto 2)
  {
    //sopra con invertiti 1 e 2
  }
  Aspetto due ore
}

É quello che vuoi fare? Come lo traduci?
Dove va un numero va una variabile, una funzione e/o  un test.
Per ottenere devi spiegare

Strumenti/Formattazione automatica fino alla morte!
Cristianesimo:bibbia='C':K&R

ouassour

detta semplice led11 e led 12 controllano un motore.
quando il led11 e 12 sono alti ho il motore fermo.
per qui quando arriva al  relè si ferma. 2 ore
11 basso 12 alto gira orario
11 alto 12 basso gira anti orario

mentre 6 e il 7 o i rely

quando arriva al 6 o al 7 rimane fermo 2 ore poi passa al altro senso per 2 ore

Silente

Nel senso che:
Inizia nella posizione A
Va verso B
Aspetta due ore muovendosi
É a B.
Si ferma
Aspetta 2 ore fermo
Riparte verso A
Aspetta 2 ore muovendosi
É a A
Si ferma
Aspetta 2 ore fermo
Il ciclo ricomincia

Ho capito bene?
Dove va un numero va una variabile, una funzione e/o  un test.
Per ottenere devi spiegare

Strumenti/Formattazione automatica fino alla morte!
Cristianesimo:bibbia='C':K&R

ouassour

 :)  si proprio cosi la posizione A e B si devi fermare perchè avrò un fine corsa 0/1
sto usando un L298N

Silente

Ok. Quindi se é ESATTAMENTE come hi detto basta dire
Muovo in un senso (sai tu come)
delay (2*3600*1000)
Spegni
delay (2*3600*1000)
Muovi nell'altro senso
delay (2*3600*1000)
Spegni
delay (2*3600*1000)

Lo sai fare?
Dove va un numero va una variabile, una funzione e/o  un test.
Per ottenere devi spiegare

Strumenti/Formattazione automatica fino alla morte!
Cristianesimo:bibbia='C':K&R

torn24

Io dal suo primo post avevo capito qualcosa di diverso! Il post non era molto chiaro e forse ho capito male :)

Però avevo capito che doveva leggere lo stato di due pulsanti durante le pause di 2 ore, se premuti la situazione doveva cambiare e fare altre cose... Ma forse ho capito male  :)

Datman

#8
Dec 31, 2018, 11:08 am Last Edit: Dec 31, 2018, 11:21 am by Datman
Con 2 ore di delay come fa a leggere i fine corsa???
Inoltre, se è per un macchinario potenzialmente pericoloso, non si può fare da soli. Se è per un trenino o simile, invece, gioca quanto vuoi! :-)
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

ouassour

Ecco il video per capire https://www.youtube.com/watch?v=R4voLvz_nYc
devo solo mettere 2 fine corsa.
cosi rimane fermo a 45 gradi ogni 2 ore

Silente

Ho scritto nel post numero 2 la descrizione italiana di un codice che dovrebbe fare quello che ho capito tu hai bisogno.
Puoi per favore spiegare tu, a parole tue, Quali sono le differenze tra la descrizione ti ho dato io nel post 2 e il tuo desiderio?
Inoltre, perdonami, ma se io dovessi far muovere un motore di Totti gradi ogni tot tempo mi comprerei un servo il quale può essere comandato direttamente in posizione. Chiaramente so che il lato hardware di un progetto non si può cambiare. Grazie del video, ma credo che sarebbe più utile una spiegazione precisa in parole tu e, in quanto è più facile capire un codice di cui si sa descrivere il comportamento, come è più facile scriverlo
Dove va un numero va una variabile, una funzione e/o  un test.
Per ottenere devi spiegare

Strumenti/Formattazione automatica fino alla morte!
Cristianesimo:bibbia='C':K&R

Datman

#11
Dec 31, 2018, 04:38 pm Last Edit: Dec 31, 2018, 04:41 pm by Datman
Fai così:
Code: [Select]
void setup()
{
 pinMode(11, OUTPUT);     // imposta il pin digitale come output
 pinMode(12, OUTPUT);     // imposta il pin digitale come output
}
 
void loop()
{
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
delay(2*3600*1000); // 2 ore

digitalWrite(12,HIGH);
digitalWrite(11,LOW);
delay(2*3600*1000); // 2 ore
}

Un microswitch deve commutare un filo del motore tra l'uscita 11 e massa;
l'altro microswitch deve commutare l'altro filo del motore tra l'uscita 12 e massa.
In questo modo ogni 2 ore il motore parte, poi si ferma quando scatta il fine corsa. Quando arriva corrente dall'altro pin, il motore riparte al contrario e si ferma quando scatta l'altro fine corsa.
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

ouassour

Ho scritto nel post numero 2 la descrizione italiana di un codice che dovrebbe fare quello che ho capito tu hai bisogno.
Puoi per favore spiegare tu, a parole tue, Quali sono le differenze tra la descrizione ti ho dato io nel post 2 e il tuo desiderio?
Inoltre, perdonami, ma se io dovessi far muovere un motore di Totti gradi ogni tot tempo mi comprerei un servo il quale può essere comandato direttamente in posizione. Chiaramente so che il lato hardware di un progetto non si può cambiare. Grazie del video, ma credo che sarebbe più utile una spiegazione precisa in parole tu e, in quanto è più facile capire un codice di cui si sa descrivere il comportamento, come è più facile scriverlo
Avevo capito bene ma devi capire che sono alle prime armi non facile per me capire quel. Codice con le if

Silente

#13
Dec 31, 2018, 06:36 pm Last Edit: Dec 31, 2018, 06:37 pm by Silente
Ok.
Chiedo scusa se son sembrato arrabbiato.
Il programma postato da Datman é soluzione?
Dove va un numero va una variabile, una funzione e/o  un test.
Per ottenere devi spiegare

Strumenti/Formattazione automatica fino alla morte!
Cristianesimo:bibbia='C':K&R

ouassour

Fai così:
Code: [Select]
void setup()
{
 pinMode(11, OUTPUT);     // imposta il pin digitale come output
 pinMode(12, OUTPUT);     // imposta il pin digitale come output
}
 
void loop()
{
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
delay(2*3600*1000); // 2 ore

digitalWrite(12,HIGH);
digitalWrite(11,LOW);
delay(2*3600*1000); // 2 ore
}

Un microswitch deve commutare un filo del motore tra l'uscita 11 e massa;
l'altro microswitch deve commutare l'altro filo del motore tra l'uscita 12 e massa.
In questo modo ogni 2 ore il motore parte, poi si ferma quando scatta il fine corsa. Quando arriva corrente dall'altro pin, il motore riparte al contrario e si ferma quando scatta l'altro fine corsa.
questo codice funziona unica problema che il delay mi blocca il codice un if che ho nel programma oltre questo codice

Go Up