Pages: [1] 2 3 ... 5   Go Down
Author Topic: [Risolto] Blink con millis() lettura PPM con pulseIn() Ritardi e Problemi  (Read 3691 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 2
Posts: 86
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Devo far lampeggiare 2 led come fossero i lampeggianti della polizia, quindi 2 impulsi 1° e poi 2 impulsi il secondo, ora col delay è semplicissimo da fare, ma tentando di farlo utilizzando millis() sono riuscito a far fare 2 lampeggi e poi si ferma, test fatto con un led singolo... AIUTO!!!!

Code:
int ledPin = 13;
int led = 0;
int value = LOW;
long previousMillis = 0;
long interval = 100;
long interval2 = 1000;
 
void setup()
{
  pinMode(ledPin, OUTPUT);
}
 
void loop()
{


 
  if(ledPin==HIGH)
  {
    led++;
    if(led<2)
      if (millis() - previousMillis > interval) {
        previousMillis = millis();
 
        if (value == LOW)
          value = HIGH;
        else
          value = LOW;
        digitalWrite(ledPin, value);
      }
      if (led == 2){
        if (millis() - previousMillis > interval2) {
          previousMillis = millis();    
          led = 0;  
        }
      }
    }  
}

Ricordando che sono un super ignorante in materia
« Last Edit: September 18, 2012, 03:44:54 am by DriftBoy » Logged

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

cos'è sta roba   if( ledPin=HIGH) ???e poi fa un assegnamento,NON un confronto smiley-mr-green
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 410
Posts: 11980
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hai visto negli esempi dell'IDE "Blink without delay"?
Logged

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

Offline Offline
Jr. Member
**
Karma: 2
Posts: 86
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

si ed è proprio da quell'esempio che nasce quel che ho scritto, il fatto è che in quell'esempio i tempi d'accensione e spegnimento sono di 1000, io invece devo fare 2 accensioni a 100 con pausa 100 fra loro e pausa lunga a 1000, e una volta fatto ciò devo fare la stessa condizione ad un secondo led che lampeggi nella pausa lunga del primo
Logged

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 102
Posts: 6558
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho buttato giù 2 righe.
Fanno un lampeggio singolo a intervalli diversi.
Come spunto di partenza potrebbe andare.
Code:
int Led1 = 7;
int Led2 = 8;

long previousMillis1 = 0;
long previousMillis2 = 0;
long interval1 = 100;
long interval2 = 1000;

void setup()
{
  pinMode(Led1, OUTPUT);
  pinMode(Led2, OUTPUT);
  digitalWrite(Led1, LOW);
  digitalWrite(Led2, LOW);
  previousMillis1 = millis();
  previousMillis2 = millis();
}

void loop()
{
  if (millis() - previousMillis1 > interval1) {
    flash(Led1, 50);
    previousMillis1 = millis();
  }
  if (millis() - previousMillis2 > interval2) {
    flash(Led2, 50);
    previousMillis2 = millis();
  }
}

void flash( int pinled, int duration)
{
  digitalWrite(pinled, HIGH);
  delay(duration);
  digitalWrite(pinled, LOW);
}
Logged

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

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 410
Posts: 11980
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ma così usi il delay, mi pare che lui non voglia usarlo...
Logged

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

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 102
Posts: 6558
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ma così usi il delay, mi pare che lui non voglia usarlo...
ok.
La mia voleva essere solo una base di partenza per l'uso di due intervalli di lampeggio diversi.
Dovrebbe, infatti, sostituire alla funzione flash la parte della logica con gli stati HIGH e LOW e, in seguito inserire il secondo lampeggio.
Logged

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

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2742
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

in teoria potresti farlo con un solo millis visto che il tempo on è uguale a quello off assegnando a delle variabili i passaggi 1-2-3, di conseguenza anche il n° del led cambia a seconda del passaggio in cui si trova il prog, al passaggio n°2 il tempo diventa 1000 per poi ricominciare.
Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

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

La strada è quella di Pablos, si tratta di una sequenza di accensioni/pause per cui è molto facile da gestire.
Ipotizzando che la luce di destra la chiamiamo L1 e la luce di sinistra L2, la sequenza è:
L1-ON-100
L1-OFF-100
L1-ON-100
L1-OFF-100
PAUSA-100
L2-ON-100
L2-OFF-100
L2-ON-10
L2-OFF-100
PAUSA-100

e ripartire da zero. Sono quindi 10 condizioni distanziate di 100 ms l'una dall'altra. Basta usare una variabile per indicare il punto della sequenza. Ogni 100 ms si incrementa questa variabile e poi si controlla quale azione si deve eseguire. Dopo la 10ma azione, si azzera la variabile così che la sequenza riparta.
Logged


Offline Offline
Jr. Member
**
Karma: 2
Posts: 86
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

il fatto per cui non posso utilizzare il delay è xkè devo in contemporanea leggere 8 ingressi ppm e restituire 10 uscite derivate, di conseguenza il delay mi blocca tutto il resto del programma... ora la cosa folle è che riesco a lavorare con i ppm e non riesco a far lampeggiare 2 led senza che rompano i così detti....
Logged

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

scrivi l'esatta sequenza dei lampeggi es led 1 acceso 100 millisecondi spento 200 millisecodi , acceso  ect
scrivi anche se millis ()   e usato anche da qualcos'altro nel programma
Logged


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

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2742
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

scrivi l'esatta sequenza dei lampeggi es led 1 acceso 100 millisecondi spento 200 millisecodi , acceso  ect
scrivi anche se millis ()   e usato anche da qualcos'altro nel programma
l'ha scritta LEO.

Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

Offline Offline
Jr. Member
**
Karma: 2
Posts: 86
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Led 1          Led 2          Tempo
off              off              0
on               off              100
off              off               200
on               off              300
off              off              400
off              on               500
off              off               600
off              on               700

nessun altro utilizzo per millis
il resto è tutto ricezione ppm ed esecuzione

sto facendo varie prove, ma ogni cosa faccio non riesco ad uscire dalla prima istruzione, nel senso che se gli dico di lampeggiare ogni 100 ms non riesco a fargli fare una pausa di 1000 ms e poi ricominciare il ciclo di 100
« Last Edit: September 13, 2012, 04:30:07 pm by DriftBoy » Logged

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2742
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

google ricerca "Arduino police led millis"
http://www.cmiyc.com/tutorials/arduino-example-police-lights-with-millis/
http://www.cmiyc.com/blog/2011/01/06/millis-tutorial/
http://pastebin.com/mX2HLVBN
« Last Edit: September 13, 2012, 04:43:26 pm by pablos » Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

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

Led 1          Led 2          Tempo
off              off              0
on               off              100
off              off               200
on               off              300
off              off              400
off              on               500
off              off               600
off              on               700

nessun altro utilizzo per millis
il resto è tutto ricezione ppm ed esecuzione

sto facendo varie prove, ma ogni cosa faccio non riesco ad uscire dalla prima istruzione, nel senso che se gli dico di lampeggiare ogni 100 ms non riesco a fargli fare una pausa di 1000 ms e poi ricominciare il ciclo di 100

hai scritto una sequenza di 700 millisecondi
e poi parli di riritardare un secondo,

scrivila completa con le pause complete che vuoi usa la stesso schemino che hai fatto  ma scrivila tutta

scrivi anche su che pin hai i due led
Logged


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

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