Ciao a tutti sono Davide e ormai sono completamente perso per Arduino e sto cercando di utilizzarla in un livello più "profondo", ossia scrivendo di mia mano le librerie. Avendo programmato in quasi tutto fuori che C++ sto trovando qualche difficoltà.
Sto scrivendo una semplice libreria per l'invio di segnali MIDI attraverso una SoftwareSerial, che però non invia! Modificando la libreria per l'invio sulla seriale classica non ci sono problemi, quindi i dati vengono inviati in modo corretto. L'unico problema è nella inizializzazione della libreria, spero possiate aiutarmi!
#ifndef SOFTMIDI_H
#define SOFTMIDI_H
#define SERIAL_NAME SoftSer
#define MIDI_BAUDRATE 31520
#include <WProgram.h>
#include "SoftwareSerial.h"
class SoftMIDI
{
public:
SoftMIDI(uint8_t rx, uint8_t tx);
~SoftMIDI();
void begin();
void SendNote(uint8_t pitch, uint8_t velocity, uint8_t channel);
private:
SoftwareSerial SERIAL_NAME;
};
#endif
#include "Arduino.h"
#include "SoftMIDI.h"
SoftMIDI::SoftMIDI(uint8_t rx, uint8_t tx):SERIAL_NAME(rx, tx)
{
}
SoftMIDI::~SoftMIDI() {}
void SoftMIDI::begin()
{
SERIAL_NAME.begin(MIDI_BAUDRATE);
}
void SoftMIDI::SendNote(uint8_t cmd, uint8_t pitch, uint8_t velocity)
{
SERIAL_NAME.write(cmd);
SERIAL_NAME.write(pitch);
SERIAL_NAME.write(velocity);
}
#include <SoftMIDI.h>
SoftMIDI soft(2, 3);
void setup()
{
soft.begin();
}
void loop()
{
soft.SendNote(0x90, 0x45, map(analogRead(A0), 0, 1023, 0, 127));
delay(10);
}
Premetto che compila e carica correttamente, nella stessa cartella della libreria ci sono i file SoftwareSerial.h e SoftwareSerial.cpp assolutamente non modificati.