utilizzare pin 13

buongiorno,
ho la necessita di utilizzare il pin13 per comandare un contattore....solamente che appena collego l'arduino alla 12V
l'uscita lampeggia e questo mi fa attrarre il conttatore 4-5 volte. come posso evitarlo?

Hai caricato il tuo programma sull'Arduino ?

Sul pin 13 è presente anche il led "L", che viene usato durante il reset per segnalazioni da parte del bootloader.
Collegando l'alimentazione la prima volta, il led "L" però non lampeggia. Lampeggia se successivamente viene resettato l'Atmega328, il reset avviene anche per l'apertura della porta seriale.
Personalmente ho provato anche a collegare 12V al jack di Arduino e, come supponevo, la prima volta il led non lampeggia.

Che versione dell'Arduino usi? UNO R1, UNO R2, MEGA ecc..?

ho l'uno...se stacco l'alimentazione e la riattacco, prima di partire il programma corretto, lampeggia il LED e quindi di conseguenza anche il mio contattore

liso:
ho l'uno...

Che versione? R1, R2, R3?
Io ho la R1 ma con il bootloader della R3 e se attacco l'alimentazione il led non lampeggia. Lampeggia solo se successivamente premo il tasto di reset.

UNO R3...

Ovvio che il,primo consiglio è quello di spostarti al pin 12 :smiley: ma resterebbe il mistero, non puoi postare il tuo codice?

sisi è che ho finito i pin...cmq lo posto!

include <LiquidCrystal.h>


#define ON 1
#define OFF 0

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


const int enel = 6;
const int gruppo = 7;
const int rele1 = 8;
const int rele2 = 9;
const int contattore = 10;
const int spia = 13;



boolean stato_enel;
boolean stato_gruppo;
boolean flag =0;
boolean error =false;
int cicli =0;



void setup(){
  Serial.begin(9600);
  lcd.begin(16, 4);
  
  lcd.clear();


  pinMode(enel, INPUT_PULLUP);
  pinMode(gruppo, INPUT_PULLUP);
  
  pinMode(rele1, OUTPUT);
  pinMode(rele2, OUTPUT);
  pinMode(contattore, OUTPUT);
  pinMode(spia, OUTPUT);
}


void ritardo(int i){
  Serial.print("Sto aspettando ");
  Serial.print(i);
  Serial.println(" secondi");
  for (int k=0; k<i; k++){ 
  lcd.setCursor(0,3);
  lcd.print("Wait ");
  lcd.print(i-k);
  lcd.write(" secondi      ");
    delay(1000);
  }
}

void accensione_gruppo() {
  Serial.println("Accensione gruppo elettrogeno in corso...");
  lcd.setCursor(0,2);
  lcd.print("Accensione...   ");
  lcd.setCursor(0,3);
  Serial.print("Tentativo n: ");
  lcd.print("Tentativo : ");
  Serial.println(cicli+1);
  lcd.print(cicli+1);
  lcd.print("  ");
  delay(2000);
  digitalWrite(rele1, HIGH);
  delay(2000);
  digitalWrite(rele2, HIGH);
  delay(1500);
  digitalWrite(rele2,LOW);
  cicli++;
}

void spengimento_gruppo(){
  Serial.println("Spengimento gruppo elettrogeno in corso...");
  lcd.setCursor(0,2);
  lcd.print("Spengimento...  ");
  ritardo(18);
  digitalWrite(contattore, LOW);
  ritardo(6);
  digitalWrite(rele1, LOW);
}

void errore() {
  digitalWrite(spia, HIGH);
  digitalWrite(rele1, LOW);
  digitalWrite(rele2, LOW);
  error = true;
  Serial.println("ERRORE IL GRUPPO NON SI E' ACCESO");
  lcd.setCursor(0,2);
  lcd.print("     ERRORE     ");
  lcd.setCursor(0,3);
  lcd.print("NON SI E' ACCESO");
}





void loop(){
  stato_enel = digitalRead(enel); //controllo se c'è rete
  stato_gruppo = digitalRead(gruppo);
  Serial.print("Stato Enel: ");
  Serial.println(stato_enel);
  Serial.print("Stato Gruppo: "); 
  Serial.println(stato_gruppo);
  lcd.setCursor(0,0);
  lcd.print("ENEL   : ");
  if(stato_enel==ON) 
    lcd.print("OK     ");
  else lcd.print("ASSENTE");
  lcd.setCursor(0,1);
  lcd.print("GRUPPO : ");
  if(stato_gruppo==ON) 
    lcd.print("ON ");
  else lcd.print("OFF");
  
  
  //Senza enel 
  if (stato_enel== OFF){ //senza ENEL

    if (stato_gruppo == OFF) {  //Gruppo Spento

      if(cicli == 0) {
        lcd.setCursor(0,2);
        lcd.print(" Sto aspettando ");
        ritardo(12);
      }
      if (digitalRead(enel) == 0) {
        if(cicli<3) accensione_gruppo();
        else errore();
      }
      
    }
    if (stato_gruppo == ON){ //Gruppo Acceso e non attaccato
      if (flag == 0){
        Serial.println("Gruppo acceso");
        lcd.setCursor(0,2);
        lcd.print("Gruppo Acceso   ");
        ritardo(15); //15 secondi
        digitalWrite(contattore, HIGH);
        flag = 1;
        cicli = 0;
      }
      if (flag == 1) {
        Serial.println("Gruppo acceso e collegato");
          lcd.setCursor(0,3);
          lcd.print("Gruppo collegato");
      }
    }
  }

  //c'è Enel
  if (stato_enel == ON ) {
    if (stato_gruppo == ON) {
      spengimento_gruppo();
      flag = 0;
      cicli=0;
    }
    if (stato_gruppo == OFF) {
      Serial.println(" Tutto OK");
      lcd.setCursor(0,2);
      if (error == true ) lcd.print("     ERRORE     ");
      else lcd.print("                ");
      lcd.setCursor(0,3);
      lcd.print("    Tutto OK    ");
  }
}

}

Non hai finito i pin, mi pare che tu non usi quelli analogici.
Sappi che questi pin possono essere utilizzati come normali pin digitali semplicemente indirizzandoli con i valori da 14 a 19 rispettivamente per A0...A5.

Comunque a me con la R1 il led non lampeggia quando collego la scheda. Ci vorrebbe la testimonianza di qualcun altro che ha la R3, forse il firmware dell'Atmega16U2 gestisce in modo diverso l'avvio.

Nello sketch parli di "spia", cosa è attaccato esattamente al pin 13?
Come ti ha detto Leo puoi usare i pin analogici come digitali, ma un'altra prova potrebbe essere quella di scambiare 12 e 13 tra loro e vedere cosa succede a livello di LCD.

leo72:
Io ho la R1 ma con il bootloader della R3 e se attacco l'alimentazione il led non lampeggia. Lampeggia solo se successivamente premo il tasto di reset.

Sulla mia UNO R1 con optiboot aggiornato all'ultima versione il led non lampeggia mai quando si connette l'alimentazione indipendentemente se è da USB o esterna, lo fa solo resettandola.
In tutti i casi i lampeggi dipendono dal bootloader e non dalla parte USB, però gli Arduino dotati di FTDI resettano sempre e comunque, anche con l'ultimo optiboot, perché all'avvio l'FTDI commuta varie volte lo stato del DTR e questo causa il reset della scheda.
Probabilmente, tocca verificare nel sorgente del optiboot, il bootloader fa distinzione tra la condizione di power on e quella di reset, se è la prima non si avvia, quindi niente lampeggi del led, e cede subito il controllo al programma utente.

astrobeed:

leo72:
Io ho la R1 ma con il bootloader della R3 e se attacco l'alimentazione il led non lampeggia. Lampeggia solo se successivamente premo il tasto di reset.

Sulla mia UNO R1 con optiboot aggiornato all'ultima versione il led non lampeggia mai quando si connette l'alimentazione indipendentemente se è da USB o esterna, lo fa solo resettandola.
In tutti i casi i lampeggi dipendono dal bootloader e non dalla parte USB, però gli Arduino dotati di FTDI resettano sempre e comunque, anche con l'ultimo optiboot, perché all'avvio l'FTDI commuta varie volte lo stato del DTR e questo causa il reset della scheda.
Probabilmente, tocca verificare nel sorgente del optiboot, il bootloader fa distinzione tra la condizione di power on e quella di reset, se è la prima non si avvia, quindi niente lampeggi del led, e cede subito il controllo al programma utente.

Nella mia UNO R3 quando viene connessa l'alimentazione, lampeggia il led L per farti vedere che il bootloader è partito

cece99:
Nella mia UNO R3 quando viene connessa l'alimentazione, lampeggia il led L per farti vedere che il bootloader è partito

Probabilmente sulla tua c'è ancora la vecchia versione dell'optiboot, quella nuova la trovi allegata all'IDE 1.0.1

astrobeed:

cece99:
Nella mia UNO R3 quando viene connessa l'alimentazione, lampeggia il led L per farti vedere che il bootloader è partito

Probabilmente sulla tua c'è ancora la vecchia versione dell'optiboot, quella nuova la trovi allegata all'IDE 1.0.1

Ah, mi tocca pure aggiornare il bootloader?!?!? Ahahaha che pollo, sta sera faccio l'update!

cece99:
sta sera faccio l'update!

Lo puoi fare anche do mani, se è per questo. :wink:

leo72:

cece99:
sta sera faccio l'update!

Lo puoi fare anche do mani, se è per questo. :wink:

Certo! Anzi, non aggiorni un tubo, quando mi serve un atmega328 standalone metto quello e poi metto un altro 328 col bootloader nuovo (così non stresso il chip e ne ho uno sempre nuovo su arduino)

Non hai afferrato la battuta :stuck_out_tongue:
Tu hai scritto "sta sera", io ti ho risposto con "do mani".... "sta-sera", "do-mani" -> "stasera", "domani" :stuck_out_tongue_closed_eyes:

leo72:
Non hai afferrato la battuta :stuck_out_tongue:
Tu hai scritto "sta sera", io ti ho risposto con "do mani".... "sta-sera", "do-mani" -> "stasera", "domani" :stuck_out_tongue_closed_eyes:

l'avevo capito :stuck_out_tongue: ho solo cambiato discorso

:wink:

la soluzione è quindi quella di scambiare unpindel LCD con il 13 e vedere cosa fa? non c'è modo per evitare il lampeggio?