Go Down

Topic: Unire due sketch (Read 1 time) previous topic - next topic

jack096

Ciao, è la prima volta che scrivo, lo faccio perchè mi trovo in difficolta, ho fatto un circuito con una scheda relè che comanda una striscia led, fin qui tutto bene.
il primo sketch fa in modo che alla pressione di un pulsante inverta lo stato del relè, mentre il secondo mi permette di controllare il relè tramite il monitor seriale, premendo h(HIGH) si attiva, mentre con l(LOW) si disattiva. come posso fare ad unire i due sketch e avere le funzioni di entrambi nello stesso programma? Grazie per le risposte.

primo sketch
Code: [Select]
#define relay 12 
#define pulsante 7   
int val = 0; 
int vecchio_val = 0;
int stato = 0;   
void setup() {               
  pinMode(relay, OUTPUT);       
  pinMode(pulsante, INPUT);
  }

void loop() {
  val = digitalRead(pulsante);  // legge il valore dell'input e lo conserva

  // controlla se è accaduto qualcosa
  if ((val == HIGH) && (vecchio_val == LOW)){
    stato = 1 - stato;
    delay(15);                // attesa di 15 millisecondi
  }

  vecchio_val = val;            // ricordiamo il valore precedente di val

    if (stato == 1) {
    digitalWrite(relay, HIGH);   // accende il led
  }
  else {
    digitalWrite(relay, LOW);    //spegne il led
  }
}


secondo sketch
Code: [Select]

int relay=12;
int incomingByte; 

void setup()
{
  pinMode(relay, OUTPUT);
  Serial.begin(9600);
 
}

void loop()
{
  if (Serial.available() > 0)
  {
    incomingByte = Serial.read();
  if (incomingByte == 'h') {
  digitalWrite(relay, HIGH);
  }
    if (incomingByte == 'l') {
     digitalWrite(relay, LOW);
    }
  }
  }
 

leo72

Dì la verità, c'è il trabocchetto, vero?   ;)

BTW, devi inserire le 2 porzioni di codice nel loop di un unico sketch. Per comodità potresti racchiudere il codice del loop del primo sketch in una funzione e quello del loop del secondo in un'altra e poi richiamare entrambe dal loop() del nuovo sketch.
Esempio:

void loop() {
  funzione1();
  funzione2();
}

void funzione1() {
...
}

void funzione2() {
...
}

Le variabili globali le metti tutte in cima, controllando che non ci siano doppioni.
Le configurazioni da fare nei vari setup le riunisci in uno.

jack096

dovrebbe venire così giusto? perchè con il pulsante funziona, con il monitor seriale solo quando vuole lui..
Code: [Select]
#define pulsante 7   
int val = 0; 
int vecchio_val = 0;
int stato = 0;   
int relay=12;
int incomingByte; 

void setup() {               
pinMode(relay, OUTPUT);       
pinMode(pulsante, INPUT);
Serial.begin(9600);
  }
 
void loop() {
  funzione1();
  funzione2();
}

void funzione1()  {
val = digitalRead(pulsante);  // legge il valore dell'input e lo conserva

  // controlla se è accaduto qualcosa
  if ((val == HIGH) && (vecchio_val == LOW)){
    stato = 1 - stato;
    delay(15);                // attesa di 15 millisecondi
  }

  vecchio_val = val;            // ricordiamo il valore precedente di val

    if (stato == 1) {
    digitalWrite(relay, HIGH);   // accende il led
  }
  else {
    digitalWrite(relay, LOW);    //spegne il led
  }
}


void funzione2() {
{
  if (Serial.available() > 0)
  {
    incomingByte = Serial.read();
  if (incomingByte == 'h') {
  digitalWrite(relay, HIGH);
  }
    if (incomingByte == 'l') {
     digitalWrite(relay, LOW);
    }
  }
}
}

leo72

Che vuol dire "solo quando vuole lui"?

jack096

eh.. ogni tanto si ogni tanto no, non ne capisco il motivo..

Go Up