Pages: 1 [2]   Go Down
Author Topic: Funzione If che su Arduino Due non Funziona [Problema aggirato]  (Read 1387 times)
0 Members and 1 Guest are viewing this topic.
Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 333
Posts: 23015
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

si mangia un po di memoria ma cmq funziona e si aggira il problema.
 smiley smiley smiley
Bene, mi fa piacere.  smiley-wink
Logged


ivrea (to)
Offline Offline
Faraday Member
**
Karma: 87
Posts: 5022
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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);
    } 
}
Logged

my name is IGOR, not AIGOR

Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Questa sera provo e vi faccio sapere !!!
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 333
Posts: 23015
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


0
Online Online
Shannon Member
****
Karma: 132
Posts: 10508
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

da wiring_digital.c:
Code:
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à! smiley
http://arduino.cc/forum/index.php?topic=131014.0
« Last Edit: January 31, 2013, 09:00:36 am by lesto » Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 333
Posts: 23015
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bravo, bella scoperta  smiley-wink
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Complimenti  smiley smiley smiley
Logged

0
Online Online
Shannon Member
****
Karma: 132
Posts: 10508
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: 1 [2]   Go Up
Jump to: