Go Down

Topic: SELETTORE BCD (Read 2816 times) previous topic - next topic

uwefed


Se io metto pinMode(pin,INPUT)
e poi digitalWrite(pin,HIGH)

il compilatore mi dice che non può farlo perchè il pin è impostato come ingresso (e direi che ha PIENAMENTE ragione........)

@Michele Menniti Non ho ancora la palla disponibile; forse un uvetto potrebbe andare bene ugualmente?
@lightman750 Che compilatore usi?

lightman750

Eccolo:

const int LED1 = 5;                    //Led e uscita connesso pin 5
const int LED_ALARM = 6;               //Led di allarme connesso pin 6
const int PULS_UP = 2;                 //Sonda UP connesso pin 2
const int PULS_DW = 7;                 //Sonda DW connesso pin 7
const int BIT1 = 3;                    //Bit 1 Selettore
const int BIT2 = 4;                    //Bit 2 Selettore
const int BIT3 = 8;                    //Bit 3 Selettore
const int BIT4 = 9;                    //Bit 4 Selettore

int PULS_UP_State = 0;                 //variabile Puls UP
int PULS_DW_State = 0;                 //variabile Puls DW
int PIN_1 = 0;
int PIN_2 = 0;
int PIN_3 = 0;
int PIN_4 = 0;
int PIENO = 0;                         //variabile condizione di riempimento
int ALLARME = LOW;                     //variabile allarme
int TEMPO = 0;                         //variabile per misurazione tempo di allarme
int VALORE_SEL = 0;                    //Reset Selettore



void setup()  {
 pinMode(LED1, OUTPUT);               //inizializzazione dei PIN
 pinMode(LED_ALARM,OUTPUT);
 pinMode(PULS_UP, INPUT);
 pinMode(PULS_DW, INPUT);
 pinMode(BIT1,INPUT);
 pinMode(BIT2,INPUT);
 pinMode(BIT3,INPUT);
 pinMode(BIT4,INPUT);
 
 
 digitalWrite(LED_ALARM, LOW);
 digitalWrite(LED1, LOW);
 digitalWrite(BIT1, HIGH);

Michele Menniti

#32
Apr 09, 2012, 08:23 pm Last Edit: Apr 09, 2012, 08:26 pm by Michele Menniti Reason: 1
manca la { di chiusura alla void setup e manca completamente la void loop, le hai "tagliate" nel copia incolla o ti mancano? se mancano gli errori sono di sicuro quelli, tanto per cominciare....
così a me compila correttamente:
Code: [Select]
const int LED1 = 5;                    //Led e uscita connesso pin 5
const int LED_ALARM = 6;               //Led di allarme connesso pin 6
const int PULS_UP = 2;                 //Sonda UP connesso pin 2
const int PULS_DW = 7;                 //Sonda DW connesso pin 7
const int BIT1 = 3;                    //Bit 1 Selettore
const int BIT2 = 4;                    //Bit 2 Selettore
const int BIT3 = 8;                    //Bit 3 Selettore
const int BIT4 = 9;                    //Bit 4 Selettore

int PULS_UP_State = 0;                 //variabile Puls UP
int PULS_DW_State = 0;                 //variabile Puls DW
int PIN_1 = 0;
int PIN_2 = 0;
int PIN_3 = 0;
int PIN_4 = 0;
int PIENO = 0;                         //variabile condizione di riempimento
int ALLARME = LOW;                     //variabile allarme
int TEMPO = 0;                         //variabile per misurazione tempo di allarme
int VALORE_SEL = 0;                    //Reset Selettore

void setup()  {
  pinMode(LED1, OUTPUT);               //inizializzazione dei PIN
  pinMode(LED_ALARM,OUTPUT);
  pinMode(PULS_UP, INPUT);
  pinMode(PULS_DW, INPUT);
  pinMode(BIT1,INPUT);
  pinMode(BIT2,INPUT);
  pinMode(BIT3,INPUT);
  pinMode(BIT4,INPUT);
 
  digitalWrite(LED_ALARM, LOW);
  digitalWrite(LED1, LOW);
  digitalWrite(BIT1, HIGH);
}

void loop()  {}
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

leo72


Se io metto pinMode(pin,INPUT)
e poi digitalWrite(pin,HIGH)

il compilatore mi dice che non può farlo perchè il pin è impostato come ingresso (e direi che ha PIENAMENTE ragione........)

Questo errore non esiste, semplicemente te lo sei inventato. Non hai neppure provato.

leo72

Inoltre, casomai tu non ne fossi a conoscenza:
http://arduino.cc/en/Reference/Constants

Quote
A pin may also be configured as an INPUT with pinMode, and subsequently made HIGH with digitalWrite, this will set the internal 20K pullup resistors, which will steer the input pin to a HIGH reading unless it is pulled LOW by external circuitry.

lightman750

Voi avete ragione. Ho dovuto reinstallare il compilatore (quello originale) e oggi funziona. Mah.......
Il resto dello sketch l'ho volutamente non copiato perchè funziona. Comunque vi posto il listato intero (ovviamente non è finito) e vediamo cosa ne pensate e se è possibile semplificarlo.



const int LED1 = 5;                    //Led e uscita connesso pin 5
const int LED_ALARM = 6;               //Led di allarme connesso pin 6
const int PULS_UP = 2;                 //Sonda UP connesso pin 2
const int PULS_DW = 7;                 //Sonda DW connesso pin 7
const int BIT1 = 3;                    //Bit 1 Selettore
const int BIT2 = 4;                    //Bit 2 Selettore
const int BIT3 = 8;                    //Bit 3 Selettore
const int BIT4 = 9;                    //Bit 4 Selettore

int PULS_UP_State = 0;                 //variabile Puls UP
int PULS_DW_State = 0;                 //variabile Puls DW
int PIN_1 = 0;
int PIN_2 = 0;
int PIN_3 = 0;
int PIN_4 = 0;
int PIENO = 0;                         //variabile condizione di riempimento
int ALLARME = LOW;                     //variabile allarme
int TEMPO = 0;                         //variabile per misurazione tempo di allarme
int VALORE_SEL = 0;                    //Reset Selettore



void setup()  {
  pinMode(LED1, OUTPUT);               //inizializzazione dei PIN
  pinMode(LED_ALARM,OUTPUT);
  pinMode(PULS_UP, INPUT);
  pinMode(PULS_DW, INPUT);
  pinMode(BIT1,INPUT);
  pinMode(BIT2,INPUT);
  pinMode(BIT3,INPUT);
  pinMode(BIT4,INPUT);
 
 
  digitalWrite(LED_ALARM, LOW);
  digitalWrite(LED1, LOW);
  digitalWrite(BIT1, HIGH);
  digitalWrite(BIT2, HIGH);
  digitalWrite(BIT3, HIGH);
  digitalWrite(BIT4, HIGH);
  }
 
  //loop del programma

void loop()  {
  PULS_UP_State = digitalRead(PULS_UP);
  PULS_DW_State = digitalRead(PULS_DW);
  PIN_1 = digitalRead(BIT1);
  PIN_2 = digitalRead(BIT2);
  PIN_3 = digitalRead(BIT3);
  PIN_4 = digitalRead(BIT4);

   
  if (PULS_UP_State == LOW && PULS_DW_State == LOW && PIENO == HIGH)  {
    int (PIENO = LOW);                                                            //se le sonde sono basse e risultava pieno, resetto il flag PIENO
    digitalWrite(LED_ALARM, LOW);
    delay(100);
    }
  if (PULS_UP_State == HIGH && PULS_DW_State == LOW && PIENO == LOW) {
    digitalWrite(LED1, LOW);                                                     //se leggo solo la sonda di MAX abilitata metto in allarme
    digitalWrite(LED_ALARM, HIGH);
    digitalWrite(ALLARME, HIGH);
    delay(100);
    }
  if (PULS_UP_State == HIGH && PULS_DW_State == LOW && PIENO == HIGH) {
    digitalWrite(LED1, LOW);                                                     //se smetto di leggere la sonda MIN metto in allarme
    digitalWrite(LED_ALARM, HIGH);
    digitalWrite(ALLARME, HIGH);
    delay(100);
    }
  if (PULS_UP_State == LOW && PULS_DW_State == HIGH && PIENO == HIGH) {
    digitalWrite(LED1,LOW);                                                     //se è pieno e smette di leggere la sonda MAX non faccio nulla
    digitalWrite(LED_ALARM, LOW);
    delay(100);
    }
  if (PULS_UP_State == LOW && PULS_DW_State == LOW && PIENO == LOW)  {
    digitalWrite(LED1, HIGH);                                                   //leggo entrambi gli ingressi. se sono bassi entrambi abilito l'uscita.
    digitalWrite(LED_ALARM, LOW);
    delay(100);
    }
  if (PULS_UP_State == LOW && PULS_DW_State == HIGH && PIENO == LOW) {
    digitalWrite(LED1,HIGH);                                                    //se sta riempiendo e supera il minimo non cambio nulla
    digitalWrite(LED_ALARM, LOW);
    delay(100);
    }
  if (PULS_UP_State == HIGH && PULS_DW_State == HIGH && PIENO == LOW) {
    digitalWrite(LED1,HIGH);                                                    //se sta riempiendo e arriva al MAX dico che è pieno
    digitalWrite(LED_ALARM, LOW);
    int (PIENO = HIGH);
    delay(100);
    }
  if (PULS_UP_State == HIGH && PULS_DW_State == HIGH && PIENO == HIGH)  {
    digitalWrite(LED1, LOW);                                                     //se tutto pieno spengo l'uscita
    digitalWrite(LED_ALARM, LOW);
    delay(100);
    }
    delay(100);
    }

Go Up