aumentare variabile con pulsanti e mantenerne il valore per comandare un uscita

Ciao a tutti, ho un problema a capire sto usando due ingressi analog e rilevando quando la soglia è oltre i 1000 per far decrementare o incrementare una variabile che di partenza ha un valore di 700 minimo e massimo di 2000, e comanda un uscita a un ESC tramite libreria servo.h .Tra l’ altro è inclusa anche una condizione che se non rileva tot impulsi su una ruota che gira la scrittura venga fatta al valore minimo. Vi posto lo sketch, ho usato per rilevare gli impulsi parti di sketch trovate in rete e il resto l’ ho aggiunto io. Quello che vorrei capire è se la variabile quando aumenta di 300 poi resta a quel valore o se devo aggiungere un istruzione per tenere in memoria il valore precedente.grazie

sketch_correct_aumento_e_decremento_2_canali.ino (1.95 KB)

MID_SIGNAL + 300;
MID_SIGNAL - 300;

Se non assegni non può incrementare sarà sempre uguale a MIN_SIGNAL

forse devi aggiungere anche questo per il monitor

Serial.begin([i] baud[/i]);

ciao victor grazie per la risposta ma non capisco cosa intendi per assegnare?

ciao victor grazie per la risposta ma non capisco cosa intendi per assegnare?

questo

MID_SIGNAL + 300;

dovrebbe essere

MID_SIGNAL  = MID_SIGNAL + 300;

oppure

MID_SIGNAL += 300;

lo stesso vale per il decremento

Il seriale mi funzionava, adesso non arrivo a caricare lo sketch perchè non ho arduino con me

#include <Servo.h>
int diminuisci = A1;                       // pin input diminuisce
int aumenta = A0;                          // pin input aumenta
volatile word MID_SIGNAL = 700;
#define MAX_SIGNAL 2000                    // velocità max
#define MIN_SIGNAL 700                     // segnale minimo
#define MOTOR_PIN 9                        // pin controllo ESC
#define pinInput 2                         // pin input impulsi
#define Interrupt 0
volatile word impulsi = 0;                 // contatore impulsi
word impulsiOld = 0;
word freq = 0;
const unsigned long periodo = 1000;        // costante unità di tempo = 1" ritardo
unsigned long millisOld;                   // variabile supporto per calcolo periodo

Servo motor;

void setup() {


  motor.attach(MOTOR_PIN);
  pinMode(diminuisci, INPUT);
  pinMode(aumenta, INPUT);
  Serial.begin(57600);
  motor.writeMicroseconds(MIN_SIGNAL);
  pinMode (pinInput, INPUT_PULLUP);          // imposta porta ingresso (opzionale PULLUP)
  attachInterrupt(Interrupt, somma, RISING); // inizializza interrupt
  impulsiOld = impulsi;                      // allinea variabile
  millisOld = millis();                      // inizializza timer
}


void somma() {
  impulsi ++;                                            // incrementa contatore
}




void loop() {
  if ((millis() - millisOld) >= periodo) {                // trascorso 1"
    millisOld += periodo;                                 // aggiorna variabile
    freq = impulsi - impulsiOld;                          // calcola frequenza
    impulsiOld = impulsi;
    Serial.print(freq);
  }
    if (analogRead(diminuisci) > 1000){MID_SIGNAL + 300;}
      if (analogRead(aumenta) > 1000){MID_SIGNAL - 300;}
        if (MID_SIGNAL > MAX_SIGNAL) {MID_SIGNAL = MAX_SIGNAL;}
    if (MID_SIGNAL < MIN_SIGNAL) {MID_SIGNAL = MIN_SIGNAL;}
 
  if (freq > 15) {
    delay(100);
    motor.writeMicroseconds(MID_SIGNAL);
    delay(600);
  }
  else {

    motor.writeMicroseconds(MIN_SIGNAL);



  }
  }
#define pinInput 2       // pin input impulsi
#define Interrupt 0     // <---- qui devi mettere 2, arduino UNO ha due interrupt sul 2 e sul 3

Quindi la configutazione dell’interrupt va così :

attachInterrupt(digitalPinToInterrupt(Interrupt), somma,RISING); // inizializza interrupt

Qui c’e un errore secondo me come ti ho detto prima

if (analogRead(diminuisci) > 1000){MID_SIGNAL + 300;}
if (analogRead(aumenta) > 1000){MID_SIGNAL - 300;}
if (MID_SIGNAL > MAX_SIGNAL) {MID_SIGNAL = MAX_SIGNAL;}
if (MID_SIGNAL < MIN_SIGNAL) {MID_SIGNAL = MIN_SIGNAL;}

Così [MID_SIGNAL] non incrementa o decrementa , rimane fermo :
devi correggere così:

if (analogRead(diminuisci) > 1000){ MID_SIGNAL = MID_SIGNAL + 300; }     //<<<----
if (analogRead(aumenta) > 1000){ MID_SIGNAL = MID_SIGNAL - 300; } // <<<----
if (MID_SIGNAL > MAX_SIGNAL) {MID_SIGNAL = MAX_SIGNAL;}
if (MID_SIGNAL < MIN_SIGNAL) {MID_SIGNAL = MIN_SIGNAL;}

Praticamente quando A0 e A1 superano i 4,8V ( 1000 passi su fondoscala di 5V) :

A0 >4,8V (1000) MID_SIGNAL = MID_SIGNAL - 300;
A1 >4,8V (1000) MID_SIGNAL = MID_SIGNAL + 300;

La variabile MID_SIGNAL non dovrebbe perdere il valore , in quanto come l’hai dichiarata tu dovrebbe
essere ‘dichiarata globalmente’

Comunque attendi il parere di altri utenti , io mi sono appena iscritto
ciao

Penso che funziona grazie