walterword Inserito: 27 luglio 2014 Segnala Inserito: 27 luglio 2014 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
Livio Orsini Inserita: 27 luglio 2014 Segnala Inserita: 27 luglio 2014 Walter, ma con un pic lo facevi con 3 righe di "C".
walterword Inserita: 27 luglio 2014 Autore Segnala Inserita: 27 luglio 2014 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
cabestano Inserita: 27 luglio 2014 Segnala Inserita: 27 luglio 2014 (modificato) Versione mooolto meno sofisticata, ma funziona. Modificato: 27 luglio 2014 da cabestano
walterword Inserita: 27 luglio 2014 Autore Segnala Inserita: 27 luglio 2014 (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: 27 luglio 2014 da walterword
walterword Inserita: 29 luglio 2014 Autore Segnala Inserita: 29 luglio 2014 modifiche per comandare i rele' sia da pulsanti che da bluetooth
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora