Go Down

Topic: Funzione If che su Arduino Due non Funziona [Problema aggirato] (Read 1 time) previous topic - next topic

leo72


si mangia un po di memoria ma cmq funziona e si aggira il problema.
:) :) :)

Bene, mi fa piacere.  ;)

nid69ita

Hai provato a riscrivere l'if con doppio test con due if?

void loop()
{   digitalWrite(pinON, HIGH);
    if (digitalRead(pinON) == HIGH)
    { if( digitalRead(pinFlussom) == HIGH)
      {   digitalWrite(pinValvola, HIGH);
      }
      else
     {  digitalWrite(pinValvola, LOW);
      } 
    }
    else
   {  digitalWrite(pinValvola, LOW);
    } 
}
my name is IGOR, not AIGOR


deepocean


leo72


Idem anche così non legge il primo digitalRead!!!!


Credo sia un limite del core.
Anche perché sul datasheet c'è scritto che si può leggere lo stato dal registro.

lesto

#20
Jan 31, 2013, 02:58 pm Last Edit: Jan 31, 2013, 03:00 pm by lesto Reason: 1
da wiring_digital.c:
Code: [Select]
int digitalRead(uint8_t pin)
{
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);

if (port == NOT_A_PIN) return LOW;

// If the pin that support PWM output, we need to turn it off
// before getting a digital reading.
if (timer != NOT_ON_TIMER) turnOffPWM(timer);

if (*portInputRegister(port) & bit) return HIGH;
return LOW;
}


io direi che il problema si nasconde in quella portInputRegister

edit: a quanto pare il fatto di poter leggere con una digitalRead un pin output è un bug lasciato per retrocompatibilità! :)
http://arduino.cc/forum/index.php?topic=131014.0
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

leo72



lesto

bhe comunque tradotto: legegere i pin di output con la digitalWrite è una cattiva e sbagliata abitudine dettata da un bug che permetteva di farlo. Gli arduino basati su chip AVR orami restano conformi al bug, ma le nuove schede AVR si "staccano" dal bug per seguire lo standard.

Consiglio di seguire il progetto arduino su github, si imparano tante cose interessanti dal bug tracer.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Go Up