For che incrementa i pin da 22 a 53 di arduino mega

Salve, visto che mi servono dei pulsanti che devo poi programmarli via midi.
C'è la possibilità con un for di settare i pin dei pulsanti senza dover scrivere tutte le volte i loro controlli.
Questo è il pezzo di codice che utilizzo :


  ButtonPlayPause.loop();
  int ButtonPlayPauseState = ButtonPlayPause.getState();
  if (ButtonPlayPauseState == HIGH) {
    if (ButtonPlayPauseStateNote == 0) {
      MIDI.sendNoteOn(22, 127, 1);
      led.high();
      ButtonPlayPauseStateNote = 1;
    }
  } else {
    if (ButtonPlayPauseStateNote == 1) {
      MIDI.sendNoteOff(22, 0, 1);
      led.low();
    }
    ButtonPlayPauseStateNote = 0;
  }

in più utilizzo queste librerie:
ezButton - Arduino Libraries
ezOutput - Arduino Libraries

E la midi :

C'è possibilità di fare questa cosa?

Grazie mille e buon fine settimana e buone ferie.

#include <MIDI.h>
#include <ezButton.h>
#include <ezOutput.h>

MIDI_CREATE_DEFAULT_INSTANCE();

ezButton ButtonPlayPause(2);
ezButton ButtonRestart(3);
ezOutput led(9);

int ButtonPlayPauseStateNote = 0;
int ButtonRestartStateNote = 0;

void setup() {

  MIDI.begin(4);
  Serial.begin(115200);
}

void loop() {
  ButtonPlayPause.loop();
  int ButtonPlayPauseState = ButtonPlayPause.getState();
  if (ButtonPlayPauseState == HIGH) {
    if (ButtonPlayPauseStateNote == 0) {
      MIDI.sendNoteOn(22, 127, 1);
      led.high();
      ButtonPlayPauseStateNote = 1;
    }
  } else {
    if (ButtonPlayPauseStateNote == 1) {
      MIDI.sendNoteOff(22, 0, 1);
      led.low();
    }
    ButtonPlayPauseStateNote = 0;
  }

  ButtonRestart.loop();
  int ButtonRestartState = ButtonRestart.getState();
  if (ButtonRestartState == HIGH) {
    if (ButtonRestartStateNote == 0) {
      MIDI.sendNoteOn(23, 127, 1);
      led.high();
      ButtonRestartStateNote = 1;
    }
  } else {
    if (ButtonRestartStateNote == 1) {
      MIDI.sendNoteOff(23, 0, 1);
      led.low();
    }
    ButtonRestartStateNote = 0;
  }
}

Metto tutto codice fin dove ho scritto.
grazie di nuovo.

EDIT : il codice funziona già con mixxx.org e loopmidi + hairless-midiserial

Crea un array di ezButton al posto di ezButton ButtonPlayPause(2); e ezButton ButtonRestart(3);
ezButton Bottoni[2]={ ezButton(2), ezButton(3) };
(provalo, in questo momento non posso provarlo)

devi anche avere un array in parallelo (con stessa dimensione) per le note e lo stato
byte note[2]={22,23};
byte stati[2]={0,0}

for(byte i=0;i<2;i++)
{ bottoni[i].loop();
  byte xStato = bottoni[i].getState();
  if( xStato == HIGH) {
    if (stati[i] == 0) {
      MIDI.sendNoteOn(note[i], 127, 1);
      led.high();
      stati[i] = 1;
    }
  } else {
    if (stati[i] == 1) {
      MIDI.sendNoteOff(note[i], 0, 1);
      led.low();
    }
    stati[i] = 0;
  }
}

funziona!. Grazie mille e buona serata.

Ciao ultima modifica se mi protesti fare.. vorrei anche i analogici.
da a0 a a5

Il codice scritto vedendo google è questo:



int rawValue;
int oldValue;
byte potPercentage;
byte oldPercentage;

  // read input twice
  rawValue = analogRead(A0);  // double read
  // ignore bad hop-on region of a pot by removing 8 values at both extremes
  rawValue = constrain(rawValue, 8, 1015);
  // add some deadband
  if (rawValue < (oldValue - 4) || rawValue > (oldValue + 4)) {
    oldValue = rawValue;
    // convert to percentage
    potPercentage = map(oldValue, 0, 1023, 0, 100);
    // Only print if %value changes
    if (oldPercentage != potPercentage) {
      MIDI.sendControlChange(99, potPercentage, 1);
      oldPercentage = potPercentage;
    }
  }

Scusate se faccio copia/incolla ma poi dopo mi studio tutto.

Hai idea se si può fare anche qui?

Grazie mille e buona serata.

Array di byte che contiene i numeri pin da A0 ad A5

byte aPin[6]={A0,A1,A2,A3,A4,A5};
...
for(i=0...{
rawValue = analogRead( aPin[i] );

Fortuna che non hai usato e, come nome dell'indice...

A proposito, ma [i] non fa piu l'italico?

Edit

No, non lo fa più
Buono a sapersi
[/edit]

1 Like

Certo che lo fa italico ... fatto così: [i]italico[/i] ... [b] [/b] il grassetto, [u] [/u] il sottolineato

Guglielmo

Al mio post 7 non sembra...

... prova a correggerlo come ti ho indicato :smiling_imp:

Guglielmo

Io intendevo che "non basta più il solo [i]"

NON è mai bastato ... la sintassi dei BBcode ha sempre previsto un tag di apertura ed un tag di chiusura ...

Guglielmo

Peccato che quando (con il vecchio forum) pubblicavi un listato con un for e un [i] bastava questo a far scattare l'italico
Ci sono decine di post al riguardo...

... evidentemente era una cattiva gestione dei BBcode (che prevede un'inizio ed una fine) ... ti ho anche dato il link alla loro sintassi e ... la discussione (per altro off-topic) termina qui !

Guglielmo

ok, ho fatto ma per il 99 note ?? che deve essere diverso come faccio.
per ora ho scritto cosi:

  for (byte i = 0; i < 2; i++) {
    // read input twice
    rawValue = analogRead(aPin[i]);  // double read
    // ignore bad hop-on region of a pot by removing 8 values at both extremes
    rawValue = constrain(rawValue, 0, 1023);
    // add some deadband
    if (rawValue < (oldValue - 4) || rawValue > (oldValue + 4)) {
      oldValue = rawValue;
      // convert to percentage
      potPercentage = map(oldValue, 0, 1023, 0, 100);
      // Only print if %value changes
      if (oldPercentage != potPercentage) {
        MIDI.sendControlChange(99, potPercentage, 1);
        oldPercentage = potPercentage;
      }
    }
  }

Spiega ti meglio. Diverso in cosa?
Se per ogni analogico devi avere note diverse, anche qui crea un array noteanal[] con i valori

si si .. fatto cosi ho messo l'array aPinNote[i]. Ti ringrazio molto alla prossima e buona giornata.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.