Go Down

Topic: 0 RX e 1 TX (Read 1 time) previous topic - next topic

ommu

Quote
int x=0;

          pinMode(0, INPUT);
          pinMode(1, OUTPUT);

          if(digitalRead(0==1) and (X==0))
           { X=1;
              digitalWrite(1, HIGH);
              delay(1000);} 
   
    else if(digitalRead(0==1) and (X==1))
            { X=0;
               digitalWrite(1,LOW);
               delay(1000);}
Ciao a tutti,
 sto cercando di far funzionare questo semplicissimo sketch,

 il codice con un pulsante accende e spegne un led
 

  i pin 0 e 1 sono gli unici liberi che mi sono rimasti...

 PS: in altri pin, funziona perfettamente.

Come fare?

gpb01

#1
Sep 09, 2015, 03:27 pm Last Edit: Sep 09, 2015, 03:28 pm by gpb01
... ho idea che ti devi andare a ristudiare come funziona la digitalRead() perché, come l'hai messa tu negli IF ... difficilmente farà quello che vuoi tu ::)

Inoltre è sempre buona cosa metter tutto il codice perché altrimenti ... diventa di difficile comprensione.

Guglielmo

Search is Your friend ... or I am Your enemy !

ommu

Probabilmente il codice è sbagliato, dato che ho provato in tutti i modi, a farlo funzionare.

il codice giusto dato che sono alle prime armi credo sia questo.

int X=0;
int pulsante;
void setup() {
pinMode(0, INPUT);
pinMode(1, OUTPUT);
}

void loop() {
  pulsante = digitalRead(0);
   if((pulsante == HIGH) and (X==0))
      { 
          digitalWrite(1, HIGH);
          X=1;
        delay(1000);} 
   else if((pulsante == HIGH) and (X==1))
      {
        digitalWrite(1,LOW);
        X=0;
        delay(1000);} 

}

il resto del codice non riguarda con questo, dato che l'ho provato anche da solo e non va lo stesso.

gpb01

#3
Sep 09, 2015, 04:11 pm Last Edit: Sep 09, 2015, 04:13 pm by gpb01
Devi tenere conto di alcune cose ...

... primo, un pulsante reale NON è un pulsante "ideale" e, ogni volta che lo premi, in realtà sul pin di Arduino arriva questo:



e quindi DEVI adottare tecniche di "debouncing".

... secondo, un pin in input, lasciato flottante, data la sua alta impedenza, capta un'infinità di disturbi, quindi, a secondo se il tuo pulsante chiude verso massa o verso il positivo, dovrai mettere rispettivamente una resistenza di pull-up o di pull-down.

... terzo, sei conscio che, durante il delay(), il programma resta fermo li dove è e non può fare altro (... quindi se durante il delay pigi e lasci il bottone NON viene letto da nessuno)?

Sistemate/verificate tutte queste problematiche, potrai passare e capire cosa non va nel codice, prima ...
... è più difficile per te capire cosa succede ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

ommu

Il problema sembra essere nel D0 RX, PS: la resistenza a massa c'è.

lasciando il led su D1 TX e spostando il pulsante su D2 "con la resistenza!!"
tutto funziona perfettamente.

Il delay serve semplicemente per non fare accende e spegnere il led se si tiene troppo premuto il pulsante.

vbextreme

e quell' "AND"??????
da dove l'hai tirato fuori?
Easy framework linguaggio C: https://github.com/vbextreme/EasyFramework
Hack your life: http://vbextreme.netai.net/
Unoffical Telegram group: https://telegram.me/joinchat/ALRu8ACkdTdXyz-2P7v13A

ommu

l'IF chiede due condizioni una  se il pulsante è premuto l'altra "AND" chiede il valore di int 0 o 1,
questa variante serve per accendere o spegnere il led con lo stesso pulsante.

comunque ho risolto, facendo vari tentativi magari anche sbagliati dato che sto imparando adesso.
Ho risolto in questo modo, a me sembra sbagliato ma funzione bene.

void setup() {
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);

 digitalWrite(0,LOW);
}

void loop() {
 
   if(digitalRead(0==1) and (X==0))
      { 
          digitalWrite(1, HIGH);
          X=1;
        delay(1000);} 
   else if(digitalRead(0==1) and (X==1))
      {
        digitalWrite(1,LOW);
        X=0;
        delay(1000);}

}

vbextreme

#7
Sep 09, 2015, 09:01 pm Last Edit: Sep 09, 2015, 09:02 pm by vbextreme
si ma in C/C++ non esiste il token AND ma &&, quindi mi chiedevo se fosse una macro di Arduino.
Il codice va inserito all'interno dei tag code.
Quel digitaleRead è assurdo!
Code: [Select]

int X=0;
int pulsante;
void setup() {
pinMode(0, INPUT);
pinMode(1, OUTPUT);
}

void loop() {

   if( digitalRead(0) )
      { 
          delay(150);
          if (!digitalRead(0)) return;
          X = !X
          digitalWrite(1, X);
        delay(1000);
    } 
}
Easy framework linguaggio C: https://github.com/vbextreme/EasyFramework
Hack your life: http://vbextreme.netai.net/
Unoffical Telegram group: https://telegram.me/joinchat/ALRu8ACkdTdXyz-2P7v13A

ommu

sicuramente è un codice assurdo da tutti i punti di vista.
ma funziona alla grande!!!! per me è questo che conta..

gpb01

#9
Sep 09, 2015, 09:17 pm Last Edit: Sep 09, 2015, 09:18 pm by gpb01
e quell' "AND"??????
da dove l'hai tirato fuori?
@VB ... purtroppo è una PESSIMA abitudine che si sta diffondendo ... leggi da QUI in poi  :smiley-confuse: :smiley-confuse: :smiley-confuse:

Guglielmo
Search is Your friend ... or I am Your enemy !

vbextreme

che obrobrio! per di più dichiarata male! le macro andrebbero sempre dichiarate in maiuscolo!
Easy framework linguaggio C: https://github.com/vbextreme/EasyFramework
Hack your life: http://vbextreme.netai.net/
Unoffical Telegram group: https://telegram.me/joinchat/ALRu8ACkdTdXyz-2P7v13A

ommu

Ripeto sono agli inizi e i vostri commenti mi arricchiscono, ma mi chiedo, che importanza ha sul funzionamento di un circuito?

zoomx

Dichiari output e metti a zero un pin che è in input.

Ma i led che ci sono su quei pin non ne influenzano il comportamento?

ommu

Sto usando Arduino Nano, il led rosso (presente sulla scheda di arduino) collegato al pin D0 RX rimane acceso e si spegne appena premo il pulsante, sul pin D1 TX è collegato un led che si accende e si spegne perfettamente

uwefed

I pin 0 e 1 servono per la comunicazione attraverso la USB e il carico dello Sketch.
Usa come out ul pin 13 e come entrata qualsiasi altro pin che non sia 0 e 1.

Da quel codice che hai scritto devo dirti che Arduino si programma in C e conosce anche una parte di C++.
Quel codice non é ne uno né l' altro.

Ciao Uwe

Go Up