Vai al contenuto
PLC Forum


Arduino Wtimer


walterword

Messaggi consigliati

Ho messo a punto la mia libreria per l'uso di soft timer per arduino .

WTimer fa parte di un progetto piu ambizioso che si chiama WSystem , la W significa Walter

Ci sono due tipi di timer , TON e TOF , che funzionano con lo stesso principio degli stessi in ambito plc .

In piu' ho aggiunto un set di impulsi quadrati , asincroni , a diverse frequenze per lampeggi o temporizzazioni

Chi fosse interessato mi scriva in pvt e la libreria gli sarà spedita previa mail

in anteprima

https://www.youtube.com/playlist?list=PLJmvUGejM2TOA72JRQe5f5mBr67yPRhgk

Ciao

Modificato: da walterword
Link al commento
Condividi su altri siti


a seguito del grande feedback , inserisco qualche riga di codice per invogliare :lol:

#include <WTimer.h>

#define ledpin 13    // led on Arduino UNO
#define pb 5
WTimer mytimers;     // My library declaration

boolean state=false;

void setup()
{
	pinMode(ledpin,OUTPUT);
	digitalWrite(ledpin, LOW);
        pinMode(pb,INPUT);
		
	mytimers.initTimers(millis());
	mytimers.enableClocks();
	
}

void loop()
{
        mytimers.runTimers(millis());                                       // this method is called every cycle of  program
        state=digitalRead(pb);
        if(!state)
        {
            digitalWrite(ledpin,mytimers.SquareWave.C.freq7);               // the led blink at clock8 frequency
	}
        else
        {
            digitalWrite(ledpin,mytimers.SquareWave.C.freq9);               // the led blink at clock8 frequency
        }
	
	  //  you can also create mixed frequency in this way 
	  //  digitalWrite(ledpin,mytimers.SquareWave.C.freq8 && mytimers.SquareWave.C.freq4);     

}

................

// WSystem -- Walter P.
// Milan - Italy
// note*: to use this library with Arduino Uno it's better to set the timers available into the header file at 5 or 10
// this library works well with Arduino Mega , DUE
// in this example I use a push button to start the soft timer but you can use everything is boolean such as bit or output or direct input

#include <WTimer.h>

#define ledpin 13    // led on Arduino UNO
#define pb 5         // push button connected on Arduino in pull down configuration
WTimer mytimers;     // My library declaration


void setup()
{
	pinMode(ledpin,OUTPUT);
	digitalWrite(ledpin, LOW);
	pinMode(pb,INPUT);
	
	mytimers.presetTimer(10,5000,TOF);                             // Preset the timer #10 for 5 seconds (5000 ms), type TOF
	mytimers.initTimers(millis());
	
	
}

void loop()
{
	mytimers.runTimers(millis());                                    // this method is called every cycle of  program
	
	mytimers.timer[10].Start=digitalRead(pb);                        //push the button and the led will light on
	
	
	digitalWrite(ledpin,mytimers.timer[10].Done);                    // when you release the button the led remains again on for 5 sec.
                                                                         // and then it will light off automatically
}

..............

#include <WTimer.h>

#define ledpin 13    // led on Arduino UNO
#define pb 5         // push button connected on Arduino in pull down configuration
WTimer mytimers;    // My library declaration


void setup()
{
	pinMode(ledpin,OUTPUT);
	digitalWrite(ledpin, LOW);
	pinMode(pb,INPUT);
		
	mytimers.presetTimer(1,3000,TON);                             // Preset the timer #1 for 3 seconds (3000 ms), type TON
	mytimers.initTimers(millis());
	
	
}

void loop()
{
	mytimers.runTimers(millis());                                    // this method is called every cycle of  program
		
	mytimers.timer[1].Start=digitalRead(pb);                         //push the button
	
	
	digitalWrite(ledpin,mytimers.timer[1].Done);                     // and after 3 sec. the led will light on
	                                                                 // when the button is released the led will light off
	
}
Modificato: da walterword
Link al commento
Condividi su altri siti

volevo caricare la libreria ella sezione upload/elettornica , ma non accetta file .zip

bisogna essere scienziati .... Livio lo mando a te e ci pensi tu che hai la mano in queste ?

Mandami la tua mail in pvt che ti invio la libreria

Link al commento
Condividi su altri siti

  • 2 weeks later...
  • 3 weeks later...

a breve sarà pronta un'altra libreria per Arduino , WFSM

Si tratta di una libreria che implementa una macchina a stati finiti per produrre sequenziatori programmati .

E' ispirata alle reti di Petri .La transizione tra un passo o stato al successivo si può ottenere in due modi

- Tramite un tempo preprogammato

- Una condizione booelana

Le due condizioni di transizione sono relazionate tra loro da un AND logico per cui se si vuole usifruire solo della condizione booleana e' sufficiente presettare il tempo di quella transizione a 0

Se invece si vuole solo passare allo stato successivo dopo un tempo allora e' sufficiente programmare il tempo ed impostare la transizione booleana a TRUE

L'intersezione di piu oggetti di questo tipo permette di gestire svariati cicli automatici per diversi attuatori , che vengono gestiti separatamente ma che sono sincronizzati dall'unione delle rispettive macchine a stati finiti

Queste attività sono spesso utilizzate in automazione industriale tramite la programmazione dei plc

Modificato: da walterword
Link al commento
Condividi su altri siti

bene mi fa piacere per i timer , ci ho messo un po per fare un lavoro abbastanza professionale , almeno credo di averlo fatto

Entro settimana prox sistemo delle cose e poi pubblico anche la macchina a stati , lunedi ho l'ultimo esame e devo passarlo dopodiche inizio a divertirmi con la tesi , android + BT + Arduino Due ;)

Link al commento
Condividi su altri siti

in anteprima il codice della WFSM

// Walter P.
// 21/07/2015
// Milan - Italy

#ifndef _FSM_h
#define _FSM_h

#if defined(ARDUINO) && ARDUINO >= 100
	#include "arduino.h"
#else
	#include "WProgram.h"
#endif
#define MAX_STEPS 16



class WFsm
{
 protected:

 private:
     boolean wait(float _time);
	 void resetSteps();
     float Accu;
	 int maxsteps;
	 float preset[MAX_STEPS];
	 boolean transition[MAX_STEPS];
	 boolean mem;
	 int stepindex;
 

 public:
	void init();
	void run();
	void setMaxSteps(int m_steps);
	void setPreset(int n_step,float _preset);
	void setTransition(int n_step,boolean condition);
	void restartFrom(int n_step);
	boolean step[MAX_STEPS];
	float cycleTime;
	
};

#endif

// Walter P.
// 21/07/2015 
// Milan - Italy 

#include "WFsm.h"

void WFsm::init()
{
  this->cycleTime=0.0F;
  this->Accu=0.0F;
  resetSteps();
  this->mem=false;
  this->maxsteps=0;
  this->stepindex=0;
}

void WFsm::setMaxSteps(int m_steps)
{
	this->maxsteps=m_steps;
	if(this->maxsteps > MAX_STEPS)
	{
		this->maxsteps=MAX_STEPS;
	}
}

void WFsm::resetSteps()
{
	for(int i=0;i<maxsteps;i++)
	{
		this->preset[i]=0.0F;
		this->step[i]=false;
	}
}

void WFsm::setTransition(int n_step,boolean condition)
{
	this->transition[n_step]=condition;
}

void WFsm::setPreset(int n_step,float _preset)
{
	this->preset[n_step]=_preset;
	
}

boolean WFsm::wait(float _time)
{
	this->Accu+=this->cycleTime;
	return this->Accu>=_time; 
}

void WFsm::run()
{
	if(mem==false)
	{
		this->stepindex=0;
		this->step[stepindex]=true;
		mem=true;
		
	}
	
		if(this->transition[stepindex]  && wait(this->preset[stepindex]))
			{
					step[stepindex]=false;
					if(stepindex<maxsteps-1)
					{
						stepindex++;
						
					}
					else
					{
						stepindex=0;
						
					}
					if(stepindex>maxsteps){stepindex=0;}
					step[stepindex]=true;
					this->Accu=0.0;
			}
		
}

void WFsm::restartFrom(int n_step)
{
	resetSteps();
	this->stepindex=n_step;
	if(stepindex>maxsteps){stepindex=maxsteps;}
	this->step[stepindex]=true;
	this->Accu=0.0;
}

un esempio di uso dal mani loop

void setSequencer1()
{
        sequencer1.setPreset(0,3000.0); sequencer1.setPreset(1,1000.0); sequencer1.setPreset(2,5000.0);
	 sequencer1.setPreset(3,4000.0);sequencer1.setPreset(4,10000.0);sequencer1.setPreset(5,3000.0);sequencer1.setPreset(6,1000.0);
	 sequencer1.setTransition(0,true); sequencer1.setTransition(1,true); sequencer1.setTransition(2,true); 
	 sequencer1.setTransition(3,true);sequencer1.setTransition(4,true);sequencer1.setTransition(5,true);sequencer1.setTransition(6,true);
}
 
         setSequencer1() ;	
	 sequencer1.run();
	
	 digitalWrite(ledpin,sequencer1.step[0] || sequencer1.step[2] || sequencer1.step[4]);
Modificato: da walterword
Link al commento
Condividi su altri siti

il quasi e' dovuto al fatto che devo scrivere su word e pdf

E' un bel sentimento andare tranquilli agli esami ; poche volte sono riuscito a farlo , ma è ....una meraviglia !

COMPLIMENTI ! :thumb_yello::thumb_yello::thumb_yello:

Link al commento
Condividi su altri siti

  • 1 month later...
  • 2 weeks later...
  • 5 months later...

perchi mi scrive in pvt .... scaricare la libreria dal plcforum , dal link indicato

Decomprimere il file e copiare la cartella nel vostro pc ,  ...nel mio caso 

C:\Users\miopc\Documents\Arduino\libraries

si puo' anche importare da arduino ide come libreria , chiduere e riaprire arduino ide

Aprire arduino -> file -> esempi -> WTimer  e scegliere lo sketch dai tre proposti 

ciao 

Walter

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...