lettura flottante pin non connesso

:open_mouth: appena qualcuno mi aiuta a capire cambio il titolo del post

carico questo skatch su arduino uno

const int led =13;
const int sen =2;

void setup()
{
  pinMode(led,OUTPUT);
  pinMode(sen,INPUT);
  //Serial.begin(9600);
}

void loop()
{
  if (digitalRead(sen)==HIGH)
  {
    digitalWrite(led,HIGH);
    //Serial.println(analogRead(sen));
  }
  else
    digitalWrite(led,LOW);
}

a vuoto, cioè senza alcun collegamento hardware

c'ho che mi sembra strano è che quando avvicino le dita al pin 2, spesso il led (pin 13) si accende. booo
il led si accende anche ogni qual volta collego un semplice cavo al pin 2. boooooo la cosa ancora più strana è che nemmeno si spenge più :fearful:
scollego il cavo e dopo all'incirca 5sec si spenge

allora ho provato coi pin analogici decommentando le due righe nello sketch precedente
il comportamento è lo stesso e vedo la seriale stampare le misurazioni degli ingressi della porta analogica con picchi di 1023 booooo

:fearful:

federico

fonzod:
:open_mouth: appena qualcuno mi aiuta a capire cambio il titolo del post

No, prima cambialo in modo corretto e poi ti spiego il motivo di questo comportamento apparentemente anomalo, ma in realtà normalissimo.

mi associo a Astrobeed.

uwefed:
mi associo a Astrobeed.

+1 :slight_smile:
un titolo così non ha molto senso :wink:

o regà io metto sto titolo
comportamento apparentemente anomalo :blush:
?

federico

metti "lettura flottante pin non connesso".

comunque in pratica succede che il pin, non essendo connesso, si comporta da antenna e legge i campi magnetici... in questo caso il campo magnetico umano :slight_smile:

noooo
già avevo in mente di alimentare arduino semplicemente tenendolo in mano :sleeping:

apparte i sogni, mi rimane strano pensare che il nostro campo magnetico sia ina grado di provocare all'incirca 5V :fearful: :grin:

federico

in teoria per avere una lettura digitale alta bastano 3v... cmq il campo magnetico provoca vari V di diversità, è l'amperaggio prodotto che è ridicolo. Però credo che sia parzialmente sfuttabile... molto più profique sono le onde radio però.

OT
srebbe interessante, al giorno d'oggi, poter avere corrente elettrica senza fili (pace all'anima di Tesla) con la sicurezza di non alterare gli equilibri naturali con il rischio di mandare l'intera Terra in risonannza.
mi piacerebbe un mondo più open e libero dai $ anche se per quello che leggo (non avendo le prove) pare che già le onde intorno ai 2-2,5 GH del wirelees siano nocive per la salute e, chi sa se alla lunga anche all'intero ambiente.

non sono un ambientalista. mi piace pensare che la prevenzione della Terra sia un profitto per noi animali :stuck_out_tongue_closed_eyes:

rimanendo nel mondo reale, vedo più naturale uno sfruttamento dei campi magnetici che l'uomo si porta dietro (o che trascinano l'uomo (o entrambe)) :sleeping:

federico

lesto:
comunque in pratica succede che il pin, non essendo connesso, si comporta da antenna e legge i campi magnetici... in questo caso il campo magnetico umano :slight_smile:

@lesto Non mi risulta che il corpo umano produca un campo magetico significante.
I disturbi sino di natura elettromagnetica e ogni oggetto conducente funge da antenna e puó disturbare componenti elettronici. Poi non parliamo delle cariche elettrostatiche che si scaricano a massa con una scossa.
@fonzod
attiva le resistenze pullup interne e non avrai piú letture casuali.
http://www.arduino.cc/en/Tutorial/DigitalPins sotto pullup.

Ciao Uwe

uwefed:
@fonzod
attiva le resistenze pullup interne e non avrai piú letture casuali.

..peccato :stuck_out_tongue:

const int led =13;
const int sen =2;

void setup()
{
  pinMode(led,OUTPUT);
  pinMode(sen,INPUT);           //set pin to input
  digitalWrite(sen,HIGH);        //turn on pullup resistors
  //Serial.begin(9600);
}

void loop()
{
  if (digitalRead(sen)==HIGH)
  {
    digitalWrite(led,HIGH);
    //Serial.println(analogRead(sen));
  }
  else
    digitalWrite(led,LOW);
}

con la resistenza di pullup attiva, il pin interessato rimane sempre ad uno stato alto ... infatti il led non si spegne mai almeno che non lo cortocircuiti a massa (ma questo succedeva anche senza pullup)

federico

arduino internamente ha solo le pull-up, ma se metti una sesistenza tra il pin e GND ottieni una pull-down (osserva i nomi: tieni-alto, e tieni-basso)

NON circuitare le pull-up a GND, così come quando usi le pull-down le pull-UP devono essere disattive.

fonzod:
con la resistenza di pullup attiva, il pin interessato rimane sempre ad uno stato alto ... infatti il led non si spegne mai almeno che non lo cortocircuiti a massa (ma questo succedeva anche senza pullup)

Questo é giusto.
Ciao Uwe

Oppure trasforma:

{
  if (digitalRead(sen)==HIGH)
  {
    digitalWrite(led,HIGH);
    //Serial.println(analogRead(sen));
  }
  else
    digitalWrite(led,LOW);
}

in:

{
  if (digitalRead(sen)==LOW)
  {
    digitalWrite(led,HIGH);
    //Serial.println(analogRead(sen));
  }
  else
    digitalWrite(led,HIGH);
}

invertendo la logica il LED non resta acceso ed il pin resta in attesa di essere collegato a massa per far accendere il LED; l'altrenativa è quella di lesto: disabiliti la pull-up interna e monti una pull-down esterna, e lasci il tuo code com'è.

menniti:
invertendo la logica il LED non resta acceso ed il pin resta in attesa di essere collegato a massa per far accendere il LED

ok, infatti con la pull-up interna attiva, invertendo la logica e collegando il pin 4 al pin 8

const int pin =8;

void setup()
{
  pinMode(pin,INPUT);
  digitalWrite(pin,HIGH);

  pinMode(13,OUTPUT);
  pinMode(4,OUTPUT);

  digitalWrite(4,LOW);
}
void loop()
{  
  if(digitalRead(pin)==LOW)
  {
    digitalWrite(13,HIGH);
    delay(1000);
    digitalWrite(4,HIGH);
  }
  else
  {
    digitalWrite(13,LOW);
    delay(1000);
    digitalWrite(4,LOW);
  }
}

questo codice produce l'effetto da te descritto cioè il led si accende quando lo stato del pin in ingresso 8 è basso (pin 4 basso)

analogamente

menniti:
l'altrenativa è quella di lesto: disabiliti la pull-up interna e monti una pull-down esterna, e lasci il tuo code com'è.

giustamente dovrei avere lo stesso effetto, disabilitando la pull-up interna, abilitando la pull-down esterna(resistenza 10Kohm a GND)

const int pin =8;

void setup()
{
  pinMode(pin,INPUT);
  //digitalWrite(pin,HIGH);

  pinMode(13,OUTPUT);
  pinMode(4,OUTPUT);

  digitalWrite(4,HIGH);
}
void loop()
{
  if(digitalRead(pin)==HIGH)
  {
    digitalWrite(13,HIGH);
    delay(1000);
    digitalWrite(4,LOW);
  }
  else
  {
    digitalWrite(13,LOW);
    delay(1000);
    digitalWrite(4,HIGH);
  }
}

ma in questo caso il led non si accende mai cioè la pull-down esterna succhia tutto. l'unico modo che ho trovato è collegare il pin 8 diretto ai 5V con l'effetto di avere dei svarioni di arduinoo(led on lampeggia)

federico

Ma tu stai usando l'autofecondazione per cambiare stato al pin di ingresso?
Cioè, dai il segnale sul pin 8 tramite il pin 4?

+1 a Leo (hai MP)
ho ha creato un loop stravagante oppure chissà come li ha collegati questi pin; la pull-down non succhia proprio niente se è DAVVERO da 10K; magari dovresti spiegare cosa/come hai collegato o meglio ancora postare lo schema.

leo72:
Ma tu stai usando l'autofecondazione per cambiare stato al pin di ingresso?

ohohoh :open_mouth:
:blush: si
dici che i pin dell'atmega generano corrente e quindi è sbagliato pensare di collegarci un qualcosa(pin) che a sua volta genera corrente?

federico

i pin so collegati co un semplice ((stravagante) ]:D) filo

federico

e la pull-down esterna la abilito aggiungendo una R da 10Kohm tra il pin 8 e GND

federico