Pages: 1 [2] 3   Go Down
Author Topic: richiesta modifica codice  (Read 1455 times)
0 Members and 1 Guest are viewing this topic.
MC
Offline Offline
God Member
*****
Karma: 14
Posts: 917
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


un terzo relay e' utilizzato, inseme all'rtc, per fare in modo che si possa accendere la luce del garage quando si e' in un perido dell'anno e del giorno in cui ci sara' scuro. tipo da ottobre ad aprile quando si apre il garage dalle 17:00 alle 8:00 si dovra' accendere la luce.


Perchè un sensore di luce faceva tanto schifo??

Praticamente col tuo sistema se per caso un giorno di agosto alle 13.30 c'è un eclisse totale o un temporale pazzesco che non si vede una mazza la luce non si accende?

Logged

Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

eppoi chi lodice che non può progettare ed installare un impianto di apertura - chiusura con un microcontrollore??

boh...    anche io volevo automatizzare   l'apertura (gia motorizzata)  del box auto,

ma caso vuole  sono incappato in un sito che "spiegava tutto" 

ora uno potrebbe fare quello che vuole a casa sua   fino a che non succedono i guai

ci sono poche cose   pericolose   

cancelli automatici   gas  220volt   ed è meglio informarsi  bene  prima di far "modifiche innocenti "

su questo tipo di cose
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Offline Offline
Jr. Member
**
Karma: 0
Posts: 68
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

tu stai cercando guai seri  smiley-twist   non puoi motorizzare automaticamente una porta/cancello  se non ci sono tutte le cose omologate e certificate tipo fotocellule,  laMPEGGIANTI GIALLI,

non è che non si puo   e che non è legale ,

se l'impianto no ha "tutto" e anche di un certificato di istallazione rilasciato da un tecnico

Ciao, hai perfettamente ragione..è il mio lavoro smiley di fatti io vado soltanto ad agire sul contatto della centralina per il passo passo( apri-stop-chiudi)..niente di più smiley
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 68
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

metti questo condensatore in parallelo al contatto, non so come è fatto il tuo programma e che devono fare questi contatti, ma buona parte dei rimbalzi li tagli fuori, provare per credere. Fammi sapere

ciao

ps come fate a mettere "qui" con un link collegato?

Ciao, ho messo un condensatore da 100nF, va bene lo stesso no?
Logged

Genova
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3389
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

sei tu che lo devi dire  smiley-lol se va bene lo stesso
Logged

no comment

Offline Offline
Jr. Member
**
Karma: 0
Posts: 68
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


un terzo relay e' utilizzato, inseme all'rtc, per fare in modo che si possa accendere la luce del garage quando si e' in un perido dell'anno e del giorno in cui ci sara' scuro. tipo da ottobre ad aprile quando si apre il garage dalle 17:00 alle 8:00 si dovra' accendere la luce.


Perchè un sensore di luce faceva tanto schifo??

Praticamente col tuo sistema se per caso un giorno di agosto alle 13.30 c'è un eclisse totale o un temporale pazzesco che non si vede una mazza la luce non si accende?




eh lo so..hai ragione. Solo che un sensore crepuscolare potrei metterlo soltanto fuori dal garage in un punto troppo vicino alla luce esterna che già si accende con un sensore di movimento/crepuscolare la quale mi andrebbe a interferire sulla lettura.
Per portarlo sul palo dell'antenna dovrei fare troppa strada con i fili e non mi conviene sinceramente
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 68
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Eccovi il codice che ho:

Code:
#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>
#include <ByVacLCD.h>
int addr; ByVacLCD

lcd = ByVacLCD(0x21,4,20);
int rtc[7];

int countdown = 180;
int count_t = 0;

int luxPin = 7;
int lux_active = 0;

int ledPin5_2 = 5;
int ledPin6_3 = 6;
int sensore_magnetico_1 =2;
int sensore_magnetico_2 =3;

int val1 = 0;
int val2 = 0;
int val1_1 = 1;
int val2_2 = 0;

int val_chiusa = 0;
int val_in_apertura = 0;
int val_aperta = 0;
int val_in_chiusura = 0;

void setup()
{
  Serial.begin(9600);
  lcd.init();
  lcd.clear();
 
  pinMode(ledPin5_2, OUTPUT);
  pinMode(ledPin6_3, OUTPUT);
  pinMode(luxPin, OUTPUT);
  pinMode(sensore_magnetico_1, INPUT);
  pinMode(sensore_magnetico_2, INPUT);
 
}

void loop()
{

 
val1 = digitalRead(sensore_magnetico_1);
 
  if(val1 == LOW){                     
    val1_1 = 1;
    val2_2 = 0;
    digitalWrite(ledPin5_2, HIGH);
    Serial.println(val_chiusa);
      if( val_chiusa==0 ){
      lcd.setCursor(3,0);
      lcd.print("chiusa              ");
      val_chiusa=1;
      }
 
  }   
 
  if(val1 == HIGH){                     
    digitalWrite(ledPin5_2, LOW);

      lcd.setCursor(3,0);
      lcd.print("aperta");     
      val_chiusa=0;
   
    if( val1_1 == HIGH ){
   
      while(val1_1 == HIGH){
 
        lcd.setCursor(3,0);
        lcd.print("in apertura         ");
        lux();
         val_chiusa=0;
        digitalWrite(ledPin6_3, HIGH);
        delay(500);
        digitalWrite(ledPin6_3, LOW);
        delay(500);
        val1 = digitalRead(sensore_magnetico_1);
        val2 = digitalRead(sensore_magnetico_2);
 
        if((val1 == LOW || val2 == LOW)) { val1_1 = LOW; }
        ora();
      }       
    }
  } 
 
  val2 = digitalRead(sensore_magnetico_2);
 
  if(val2 == LOW) {
    val2_2 = 1;     
   
    digitalWrite(ledPin6_3, HIGH);
      lcd.setCursor(3,0);
      lcd.print("aperta              ");
      val_chiusa=0;
  }
   
  if(val2 == HIGH) {
    digitalWrite(ledPin6_3, LOW);
    if(val2_2 == HIGH){

     
      while(val2_2 == HIGH){
   
        //lcd.clear();
        lcd.setCursor(3,0);
        lcd.print("in chiusura         ");   
        val_chiusa=0;
        digitalWrite(ledPin5_2, HIGH);
        delay(500);
        digitalWrite(ledPin5_2, LOW);
        delay(500);
        val1 = digitalRead(sensore_magnetico_1);
        val2 = digitalRead(sensore_magnetico_2);     
       
        if((val1 == LOW || val2 == LOW)) { val2_2 = LOW; }
        ora();
      } 
    }
  } 
 
 
 
  ora();
  if(lux_active == 1){
      lux_close();
  }
 

}

void lux()
{
 
  RTC.get(rtc,true);
 
  if( lux_active == 0 ){
    if(rtc[5]>=3 && rtc[5]<=9){
      if(rtc[2]>=20  || rtc[2]<=8){
        lux_active = 1;
        digitalWrite(luxPin, HIGH);

      }
    }
  }

}


void lux_close(){

  /*if(val_chiusa==0){
    digitalWrite(luxPin, LOW);
    lux_active = 0;
  }*/
 
  if( count_t >= countdown){
    digitalWrite(luxPin, LOW);
    count_t = 0;
    lux_active = 0;
  }else{
    delay(1000);
    count_t = count_t + 1;
    }
}
 
void ora()
{
   // rtc -> lcd
    lcd.setCursor(0,0); 
    RTC.get(rtc,true);
    if(rtc[2]<10){ lcd.print("0"); }
    lcd.print(rtc[2]);
    lcd.print(":");
    if(rtc[1]<10){ lcd.print("0"); }   
    lcd.print(rtc[1]);//min
    lcd.print(":");
    if(rtc[0]<10){ lcd.print("0"); }   
    lcd.print(rtc[0]);//sec   
    lcd.print(" ");
    lcd.print(rtc[4]);//giorno
    lcd.print("/");
    lcd.print(rtc[5]);//mese
    lcd.print("/");
    lcd.print(rtc[6]);//anno
    delay(1);
 }
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 327
Posts: 22640
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma forse il problema potrebbe essere anche un altro.. mettiamo che nel codice verifica se lo stato del pin è alto esegue delle operazioni, se è di nuovo alto (si ripreme il pulsante) fa altre operazioni.
Code:
if(stato==1){
 fai questo;
  if (stato==1){
   fai quest'altro;
  }
}
I casi sono infiniti, non è che si può analizzare ogni singola possibilità. smiley-wink
In base alle esigenze l'utente struttura il suo codice.
Logged


Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I casi sono infiniti, non è che si può analizzare ogni singola possibilità. smiley-wink
In base alle esigenze l'utente struttura il suo codice.

Giusto, è che pensavo che per rimbalzo si intendesse il fatto che il rilascio effettivo del bottone ha un certo tempo  smiley-roll-sweat
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 327
Posts: 22640
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

No, il "rimbalzo" di cui si parla è puramente elettrico ed è dato dai falsi contatti scaturiti dalle scintille del contatto meccanico.
Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 68
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No, il "rimbalzo" di cui si parla è puramente elettrico ed è dato dai falsi contatti scaturiti dalle scintille del contatto meccanico.

A dir la verità io avevo capito che dovevo aggiungere quel pezzo di codice perchè i contatti sono a circa 6-8 metri dall'arduino e quindi si potrebbero generare delle interferenze..dico una stupidata?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 327
Posts: 22640
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Il "rimbalzo", o "bounce" in inglese, è un fatto puramente elettromeccanico.
Senza HW per filtrare le scintille date dal contatto "nudo e crudo" del pulsante, puoi avere letture errate.
Basta che tu colleghi un pulsantino ad un pin e fai un semplice codice per cambiare lo stato del led integrato nell'Arduino per vedere come con una semplice pressione alle volte il led cambi più di 1 volta.
Si ovvia via software con diversi trucchi, il più semplice è il delay tra 2 letture consecutive.

La lunghezza dei cavi casomai influisce sul segnale letto: con cavi molto lunghi, 5Vcc potrebbero arrivarti attenuati, con una tensione inferiore alla soglia che il pin fissa come minima per la lettura dello stato HIGH, ad esempio.
Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 68
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

quindi alla fine dovrei aggiungere un delay qui:

Code:
if(val1 == LOW){                     
    val1_1 = 1;
    val2_2 = 0;
    digitalWrite(ledPin5_2, HIGH);

e farlo diventare così:

Code:
if(val1 == LOW){                     
    delay (50);
    val1_1 = 1;
    val2_2 = 0;
    digitalWrite(ledPin5_2, HIGH);

Ho capito bene?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 327
Posts: 22640
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Dipende da cosa devi fare. Sinceramente non capisco quel delay messo così, a meno che tu non voglia ritardare la riposta del pulsante.

L'uso del delay nel debounce è giusto per intercalare 2 letture di un pin.
All'inizio si parlava di antirimbalzo per cercare di evitare false letture sui pulsanti. La soluzione te l'ho già data. Ripeto (con il codice che hai messo ora):
Code:
if (digitalRead(pin) == LOW)) {                     
    delay(50);
    if (digitalRead(pin) == LOW)) {
        val1_1 = 1;
        val2_2 = 0;
        digitalWrite(ledPin5_2, HIGH);
    }
}
Così ha un senso
Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 68
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie Leo, purtroppo non sono capace di programmare quindi cerco di capire e provo a far qualcosa smiley

Logged

Pages: 1 [2] 3   Go Up
Jump to: