Pagina 1 di 1

Due programmi su arduino

MessaggioInviato: 24 nov 2013, 1:25
da edproduction
Ciao a tutti, sto usando arduino per acquisire dei valori analogici di 4 sonde temperatura per inviarli al mio Software domotica e fino qua tutto ok. Li ricevo tramite sieriale e poi li gestisco tramite il mio programma.
poi ho preso uno sketch che controlla un tastierinio numerico 4x3 e sempre attraverso la seriale, invio i comandi.
PROBLEMA
Non riesco a mettere tutti e due i codici insieme.
Nel primo caso, i valori vengono inviati ogni secondi
nel secondo caso, i valori vengono inviati ogni volta che viene immesso un carattere.
Vi prego, sto studiano questo linguaggio, ma per adesso ho fatto solo confusione.
Potete aiutarmi voi?
vi posto i due programmi, ma sono indipendenti, mi serve solo un' unico sketch che gestisce questi due valori.
Ogni secondo viene inviato il valore di tutte le sonde collegate dai pin 0,1,2,3
e se premo i tasti del tastierino numerico, devo inviare anche quelli, ma senza fare confusione.
Vi ringrazio comunque

CODICE PER TASTIERINO NUMERICO



Codice: Seleziona tutto
#include <Keypad.h>

const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'#','0','*'}
};
byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {8, 7, 6}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
  Serial.begin(9600);
}
 
void loop(){
  char key = keypad.getKey();
 
  if (key != NO_KEY){
  Serial.print("KP");
    Serial.println(key);
  }
}


CODICE PER SENSORI TEMPERATURA

Codice: Seleziona tutto
float temp1;
float temp2;
float temp3;
float temp4;

int tempPin1 = 0;
int tempPin2 = 1;
int tempPin3 = 2;
int tempPin4 = 3;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  temp1 = analogRead(tempPin1);
  temp2 = analogRead(tempPin2);
  temp3 = analogRead(tempPin3);
  temp4 = analogRead(tempPin4);

  temp1 = temp1 * 0.48828125;
  temp2 = temp2 * 0.48828125;
  temp3 = temp3 * 0.48828125;
  temp4 = temp4 * 0.48828125;

  Serial.print("T");
  Serial.print("_");
  Serial.print(temp1);
  Serial.print("_");
  Serial.print(temp2);
  Serial.print("_");
  Serial.print(temp3);
  Serial.print("_");
  Serial.print(temp4);
  Serial.println("_");



  delay(1000);

}

Re: Due programmi su arduino

MessaggioInviato: 26 nov 2013, 19:28
da grandegiove
Ciò che devi puntare ad eliminare per unire i due programmi è:

Codice: Seleziona tutto
delay(1000);


in quanto in questo modo lì si conferma l'esecuzione del programma.

Per fare questo è fondamentale capire come ottenere una base dei tempi indipendente dal ciclo: un bel timer?

Re: Due programmi su arduino

MessaggioInviato: 3 gen 2014, 12:48
da ZG84
in quanto in questo modo lì si conferma l'esecuzione del programma.

il delay non fa altro che bloccare il microcontrollore per 1 secondo non centra.

Per fare questo è fondamentale capire come ottenere una base dei tempi indipendente dal ciclo: un bel timer?


Devi imparare a gestire la funzione millis() o micros() dipende da quello che devi fare.
Con delay blocchi il microcontrollore con millis e micros no in quanto utilizzi il timer interno al controllore.

1-Non avresti più soddisfazione a farti tu il programma per il keypad? anziché usare una libreria?
2-Se segui il punto uno non hai il problema dell'integrazione dei due programmi e perdendo 10 minuti hai più soddisfazione e meno casini
3-Non ho la più pallida idea di come funziona quella libreria e di conseguenza mi riesce difficile aiutarti ma di sicuro sul forum ufficiale trovi gente che mastica librerie e Arduino dalla mattina alla sera e sicuramente molto più capace di me
O_/

Re: Due programmi su arduino

MessaggioInviato: 9 gen 2014, 19:34
da daniele1996
per fare quello che hai scritto li ti serve uno schedulatore, che versione di arduino hai? UNO? Duemilanove?