Vai al contenuto
PLC Forum


Arduino Wtimer


Messaggi consigliati

Inserito: (modificato)

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

Inserita: (modificato)

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
Inserita:

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

  • 2 weeks later...
Inserita:

in anteprima il WShield che fa parte del WSystem , Arduino Due

d142e2a21426c905169f1dc09f44a17e.png

73a5914029634ad21235eb3bfb32b0fd.png

5a5293ed9fde614d38ec16d57b0891e7.png

Inserita:

Quella spece di serpentina che cos'è? Un'antenna?

Inserita:

e' il sensore acqua, poi c'e' il sensore umidita' . terreno , sensore luce , micro sd , bluetooth , RTC, barometro ect

  • 3 weeks later...
Inserita: (modificato)

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
Inserita:

Io i timers li ho scaricati ....ottimo lavoro....La macchina a stati....sarebbe la panacea per chi usa arduino come un micro plc

Inserita:

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 ;)

Inserita: (modificato)

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
Inserita:

To chi si rivede: Claudio Ifach :smile:

Inserita:

:lol:

hola ifach !!!

ieri ho dato gli ultimi esami e se dio vuole e' finita , adesso sotto col C/C++ e java

Inserita:

Bravo Walter! :clap:

Ora ti resta solo la tesi, ma per te è qausi un divertimento. :smile:

Inserita:

il quasi e' dovuto al fatto che devo scrivere su word e pdf , per il resto è divertimento

:smile:

Inserita:
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:

Inserita:

qua si tratta della tesi , che rispetto agli esami e' una passeggiata

  • 1 month later...
Inserita:

video tutorial sull'uso della libreria WTimer

  • 2 weeks later...
  • 5 months later...
Inserita:

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

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...