Pages: 1 [2] 3   Go Down
Author Topic: Arduino-Tiny Attiny85 Funzione mills  (Read 2730 times)
0 Members and 1 Guest are viewing this topic.
Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 336
Posts: 23145
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

leo72   smiley-wink  Non voglio la pappa pronta !  smiley-grin
Tranne che in rari casi, da me non la ottieni.  smiley-wink Non hai idea di quanto MALE faccia farsi fare il codice da altri:
1) non lo capisci
2) dato che non lo capisci, ti porta apprendimento pari a 0,1
3) dato che non ti ha insegnato nulla, domani sarai nuovamente a chiedere aiuto.

Sulle cose bisogna sbatterci il proprio capo, non quello degli altri, solo così le si imparano pian piano.
Logged


Offline Offline
Full Member
***
Karma: 1
Posts: 107
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sisi pienamente d'accordo  smiley-cool
Logged

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

Ahhhhhh, che brutte tutte quelle righe vuote!!! E a che serve indentare ?     smiley-grin
Logged

my name is IGOR, not AIGOR

Offline Offline
Full Member
***
Karma: 1
Posts: 107
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quella è la versione comprensibile da tutti  smiley-wink , poi ho la versione min senza commenti e quant'altro  smiley-grin
Logged

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

No, no i commenti mai toglierli !!! Quelli vanno bene, anzi sono fondamentali. Tra 1 anno voglio vederti a leggere il tuo codice senza commenti e rammentarti che cavolo fa.  smiley-mr-green
Logged

my name is IGOR, not AIGOR

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 115
Posts: 7270
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Leva solo i commenti inutili tipo
Code:
Serial.print(F("Fase 2")); // Stampo inizio fase 2
Insomma.. cose che si comprendono al volo anche senza commento.

E prima di pubblicare usa la formattazione automatica. Menù strumenti dell'IDE.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Full Member
***
Karma: 1
Posts: 107
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Della formattazione non lo sapevo !! Ottimo! Sono un webmaster(di professione) quindi macino parecchi commenti al giorno sulle milioni di righe di codice php query js e quant altro , di quel programma ho cmq gli sketch salvati in locale , quello che carico su attiny è ripulito per ridurre lo spazio occupato !
« Last Edit: July 04, 2013, 06:00:07 am by waterseven » Logged

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

di quel programma ho cmq gli sketch salvati in locale , quello che carico su attiny è ripulito per ridurre lo spazio occupato !
Un commento non occupa spazio.
Il compilatore toglie tutta la roba inutile prima di creare l'eseguibile.

Quindi 1 riga di codice con 100 righe di commento ed 1 riga di codice senza commenti occupano esattamente lo stesso spazio.

Segui il consiglio, commenta tutto quello che è poco oltre il "banale" come nell'esempio di Paolo, perché anche prima di 1 anno, fra 3 mesi, apri il programma e non sai più che fa  smiley-wink
Logged


Cagliari, Italy
Online Online
Tesla Member
***
Karma: 115
Posts: 7270
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il compilatore toglie tutta la roba inutile prima di creare l'eseguibile.

A volte anche la roba utile.  smiley-mr-green
Leggasi bug dell'IDE o variabili non dichiarate volatile
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Full Member
***
Karma: 1
Posts: 107
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho un problema legato all' attiny che non riesco a risolvere , in foto allegata il circuito.

Praticamente se io collego l'alimentazione( collegamenti controllati ed è tutto ok),sul pin 4 va in lettura per vedere se il bottone è premuto , per fare una prova faccio io il contatto direttamente con 5v sul pin4 seguendo la combinazione ma è come se non lo rilevasse .... Ho provato cosi ha mettere la gnd in comune con la millefori(quella bianca) su cui avevo il bottone di prova , ho provato con il bottone sul pin 4 è il relè si accende.E questo è il primo problema che non mi spiego , il secondo è che se controllo la tensione appena la scheda è alimentata, sul pin 3 (che controlla il transistor, che per altro ora nello scrivere mi son accorto di un errore ... mettere la resistenza prima della base ....) la tensione è 0 , quando effettuo la combinazione e si avvia success() tempo 1 secondo l'uscita deve andare in low ma il relè rimane acceso comunque, cosi controllando il pin 3 ho una tensione di 0.32 invece che 0 e non me lo spiego (Quindi il transistor fa passare la gnd sull' in1 del modulo relè, che sia la resistenza prima della base mancante?)


* IMAG0044.jpg (1573.12 KB, 3264x1840 - viewed 29 times.)
« Last Edit: July 04, 2013, 11:42:17 am by waterseven » Logged

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

Ho provato cosi ha mettere la gnd in comune con la millefori(quella bianca) su cui avevo il bottone di prova , ho provato con il bottone sul pin 4 è il relè si accende.E questo è il primo problema che non mi spiego ,
Se il pulsante è su un circuito e l'Attiny ed i relé su un altro, le masse vanno messe in comune altrimenti mancano i riferimenti dei livelli di tensione e non funziona nulla.

Quote
il secondo è che se controllo la tensione appena la scheda è alimentata, sul pin 3 (che controlla il transistor, che per altro ora nello scrivere mi son accorto di un errore ... mettere la resistenza prima della base ....) la tensione è 0 , quando effettuo la combinazione e si avvia success() tempo 1 secondo l'uscita deve andare in low ma il relè rimane acceso comunque, cosi controllando il pin 3 ho una tensione di 0.32 invece che 0 e non me lo spiego (Quindi il transistor fa passare la gnd sull' in1 del modulo relè, che sia la resistenza prima della base mancante?)
Serve codice e circuito.
Logged


Offline Offline
Full Member
***
Karma: 1
Posts: 107
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sisi lo so di tutto il circuito le gnd sono in comune, allora mi son messo a giocare di nuovo manualmente e ho capito che sbagliavo i tempi , funziona ora rimane il problema della tensione di attiny ossia dopo aver messo in high l'uscita e attivato il transistor quando riva in low rimane una tensione di 0,32 v e quindi il transistor bc457 rimane attivo e il relè anche.
A breve incollo codice e schema , il tempo di farlo comprensibile per i comuni mortali  smiley-red ...
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 107
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Allora questo è il codice che uso:
Code:
const int pinButton = 4; // Pin bottone
const int pinGate = 3; // Pin 3 Cancello
int lastState=0;
double combo[3]; // Combinazione di 3 push
double lastPush; // Ultimo push
long duration;

void setup()
{
  pinMode(pinGate, OUTPUT); // Dichiaro pinGate come OUTPUT
  pinMode(pinButton, INPUT); // Dichiaro pinGate come INPUT
}

void loop()
{

  // Leggo stato bottone citofono
  int buttonCit = digitalRead(pinButton);   

  // Se il bottone è in stato diverso dal precedente
  if (buttonCit != lastState)
  {
    //Controllo se è in stato alto
    if (buttonCit == HIGH ){
      Reg(); // Registro in combo il momento in cui viene avvertito il push
      Check(); // Controllo se la sequenza e' completa*/
      delay(400);  // Aspetto per non sovraccaricare il buffer
    }
  }

  // Sequenza cominciata ma oltre 4 secondi di silenzio: resetto
  if ( combo[0] && millis()-lastPush > 4000 ) {
    reset();
  }

}

// Registro il momento in cui viene premuto il bottone
void Reg()
{
  double time = millis();
  lastPush = millis();

  if ( combo[0]==0 ) {
    combo[0] = time;
    return;
  }

  if ( combo[1]==0 ) {  //QUI DEVO AGGIUNGERE IL CODICE DEL PUSH PER 2 SECONDI SE VERO FAI IL RETURN ALTRIMENTI RESET
    combo[1] = time;
    while(digitalRead(pinButton) == HIGH){ // wait while the switch is still pressed
      duration = millis() - combo[1] ;
    }
    if(duration > 1000){
      return;
    }
    else{
      reset();
    }
  }

  if ( combo[2]==0 ) {
    combo[2] = time;
    return;
  }

}

void Check()
{
  // Se c'e' il numero corretto di push registrati
  if ( combo[2] > 0 )
  {   
    // Verifica il "ritmo" della sequenza di battiTO
    if ( combo[1]-combo[0] >= 500 && combo[1]-combo[0] <= 2000 ) // 250{
      if ( combo[2]-combo[1] >= 500 && combo[2]-combo[1] <= 5000 ) // 250
          success();

    // Resetto la combo ogni volta che ha completato la sequenza
    reset();
  }
}

//Resetto tutto
void reset()
{
  for ( int n=0; n<=2; n++ ) {
    combo[n] = 0;
  }
  digitalWrite(pinGate,HIGH);

}

void success()
{
  digitalWrite(pinGate,LOW);
  delay(1000);
  reset();
}


In allegato il pcb , se occorre vi faccio lo schema


* pcb.jpg (207.16 KB, 609x845 - viewed 27 times.)
Logged

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

Serve lo schema.

Non ho guardato attentamente tutto il codice ma noto un grosso errore. Millis si salva in una variabile di tipo unsigned long, non in una double che serve a gestire i numeri in virgola mobile e che oltretutto non esiste neanche sull'Arduino perché double ha la stessa dimensione (e precisione) di un float, 4 byte.
Logged


Offline Offline
Full Member
***
Karma: 1
Posts: 107
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Provvedo a cambiare in dobule grazie per la dritta , qui cè lo schema del mio progetto


* cancello.jpg (145.17 KB, 1100x1950 - viewed 28 times.)
Logged

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