Vai al contenuto
PLC Forum


Arduino Rele' Passo Passo


Messaggi consigliati

Inserito:

COn il seguente post voglio regalare agli appassionati di embedded una funzione ,che sto utilizzando con Arduino Mega , che permette di usare un pulsante per accendere e/o spegnere unì'uscita

Nel mio caso una scheda a 8 rele' .

int p1=28;       // porta ingresso p1
bool stop=false;
bool start1=false;
bool mem1_a=false;
bool mem1_b=false;
bool mem1=false;
int led = 13;
int out1=52;     // porta uscita out1

int p2=29;
bool start2=false;
bool mem2_a=false;
bool mem2_b=false;
bool mem2=false;
int out2=53;

int key=2;    // usata per parametrizzare il modulo bluetooth

void setup()
{
    pinMode(p1,INPUT);
    pinMode(out1, OUTPUT);
    pinMode(p2,INPUT);
    pinMode(out3, OUTPUT);

     pinMode(key, OUTPUT);
	Serial.begin(9600);        // porta seriale standard , e' quella utilizzata per programmare Arduino , qua usata con la console seriale 
	delay(500);
	Serial.flush();
	Serial1.begin(9600);       // usa i pin RTX1 - TXX1 del Mega 
	Serial1.flush();
	delay(500);
	
	Serial.println("Enter AT commands:");
	Serial1.print("AT\r\n");
	digitalWrite(key,LOW);
void loop()
{ 
	// questa parte serve per parametrizzare il bluetooth in seriale 
	 if (Serial1.available())
	 {
		 Serial.write(Serial1.read());
		
	 }
	 
	 if (Serial.available())
	 {
		 Serial1.write(Serial.read());
		
	 }
	
	
	RelaysStepStep(p1,false,&mem1,&mem1_a,&mem1_b,&out1);
	RelaysStepStep(p2,false,&mem2,&mem2_a,&mem2_b,&out2);

}

void RelaysStepStep(int pushbutton,bool stop,bool* mem,bool* mem_a,bool* mem_b,int* out)
{
	bool start;
	if(digitalRead(pushbutton))
	{
		start=false;
	}
	else
	{
		start=true;
	}
	
	*mem_a=start==true && *mem_b==false;
	*mem_b=start==true;
	*mem=(*mem_a==true || *mem==true) && (*mem_a==false || *mem==false) && stop==false;
	if(*mem)
	{
		digitalWrite(*out,HIGH);
	}
	else
	{
		digitalWrite(*out,LOW);
	}
}

La funzione Rele' passo passo utilziza puntatori booleani e funziona egregiamente .

Piu avanti portero al termine la libreria WAutomation che implementarà timer , clock e molte altre funzionalità da usare nei sistemi Arduino

;)


Inserita:

Walter, ma con un pic lo facevi con 3 righe di "C". :smile:

Inserita:

be io l'ho fatto come mi 4e' venuto stamattina .ahe questo e' C++

comunque posta le tue 3 righe che le confrontiamo

Io lascio alcune impostazioni dell'ide come sono , le porte sono considerate come interi , questo per permettere ai neofiti di apprendere facilmente , almeno questo e' lo scopo di arduino.

Se entro nei particolari e compilo direttamente su AVR saltando le librerie arduino lo faccio anche io in 3 righe ;)


Sta di fatto che comunque le righe di C per il pic non le vedo da nessuna parte , invece il sottoscritto ha fatto qualcosina per la comunità senza contestare e senza polemizzare :)

Inserita: (modificato)

molto meno sofisticata .....dipende dai punti di vista .

comunque io non uso dealy bloccanti .Non a caso nella libreria ci saranno dei timer TON e TOF com equelli dei plc

Qualcosa dle tipo gia visto nel tuo link ma piu compatti , ma senza delay.

Per il resto il mio rele passo passo e' una funzione che bastsa richiamare e passare dei parametri come argomenti

Volendo si puo' creare un array di strutture dati e passare come riferimento un parametro solo , che e' una struttura indicizzata

Modificato: da walterword
Inserita:

modifiche per comandare i rele' sia da pulsanti che da bluetooth

11b742b57b67b0d475b98a0ad06131c5.jpg

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