Diskuze: Arduino projekt -pomoc
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 18 zpráv z 18.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj,
zkusil bych na to jít nějak takhle:
static unsigned char NRPNBuffer [] = {
0xB0,0x63,0x7D,0xB0,0x62,0x58,0xB0,
0x06,0x00,0xB0,0x26,0x01}
...
void MIDI_poll()
{
byte outBuf[ 3 ];
uint8_t size;
do {
if( (size=Midi.RecvData(outBuf)) > 0 ){
if((outBuf[0] & 0xf0) == 0xb0){
//CC received?
Serial.write(NRPNBuffer, sizeof(NRPNBuffer));
}
}
} while(size>0);
return;
}
Nevím ale, zda CC bude mít hodnotu 0xb0 (tzn. zda se to na ten můj zápis na COM port vůbec dostane), protože mi přijde, že se ty neshoduješ s komentářem v tom kódu. Ale příslušný protokol/formát příchodu dat do tvého Arduina neznám.
Výborně.:)
Díky moc za reakci.Asi to bude ono.
Ty midi CC budou např tohle je CC 80. nebo to můžou být noty,to je
jedno.
if((outBuf[0] & 0xf0) ==0xb0,0x50,0x7f);{
Chci se ještě zeptat.
Když budu mít těch NRPN víc,stačí připsat jen
const byte nrpnStopandplayRecording[] = {0xB0,0x63,0x7D,0xB0,0x62,0x58,0xB0,0x06,0x00,0xB0,0x26,0x00}
const byte nrpnStartRecording[] = {0xB0,0x63,0x7D,0xB0,0x62,0x58,0xB0,0x06,0x00,0xB0,0x26,0x01}// a další NRPN;
a potom opsat a doplnit jinýma hodnotama CC midi, přepsat nazvy v Serial1.write ?
if((outBuf[0] & 0xf0) == 0xb0){ //CC received?
//Send sysex to serial code here
if(outBuf[1] == 0x01 && outBuf[2] == 0x00){
Serial1.write(nrpnStartRecording, sizeof(nrpnStartRecording));
Jo tady je původní kod který funguje ,ale přeposílá jen midi z usb midi controleru připojeného k Arduinu. do Serial 5 Din standart midi konektoru.
Já ,ale potřebuji ještě poslat z usbcotr. midi příkaz CC a poslat ho do Serial out ,ale v NRPN,protože můj Kemper amp přijímá NRPN pro Looper.Nedali tam blbci Midi commandy.
https://github.com/…wa/USBH_MIDI
/*
*******************************************************************************
* USB-MIDI to Legacy Serial MIDI converter
* Copyright 2012-2014 Yuuichi Akagawa
*
* Idea from LPK25 USB-MIDI to Serial MIDI converter
* by Collin Cunningham - makezine.com, narbotic.com
*
* for use with USB Host Shield 2.0 from Circuitsathome.com
* https://github.com/felis/USB_Host_Shield_2.0
*******************************************************************************
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*******************************************************************************
*/
#include <Usb.h>
#include <usbh_midi.h>
#ifdef USBCON
#define _MIDI_SERIAL_PORT Serial1
#else
#define _MIDI_SERIAL_PORT Serial
#endif
//////////////////////////
// MIDI Pin assign
// 2 : GND
// 4 : +5V(Vcc) with 220ohm
// 5 : TX
//////////////////////////
USB Usb;
USBH_MIDI Midi(&Usb);
void MIDI_poll();
void doDelay(unsigned long t1, unsigned long t2, unsigned long delayTime);
void setup()
{
Serial1.begin(31250);
//Workaround for non UHS2.0 Shield
pinMode(7,OUTPUT);
digitalWrite(7,HIGH);
if (Usb.Init() == -1) {
while(1); //halt
}//if (Usb.Init() == -1...
delay( 200 );
}
void loop()
{
unsigned long t1;
Usb.Task();
t1 = micros();
if( Usb.getUsbTaskState() == USB_STATE_RUNNING )
{
MIDI_poll();
}
//delay(1ms)
doDelay(t1, micros(), 1000);
}
// Poll USB MIDI Controler and send to serial MIDI
void MIDI_poll()
{
byte outBuf[ 3 ];
uint8_t size;
do {
if( (size=Midi.RecvData(outBuf)) > 0 ){
//MIDI Output
Serial1.write(outBuf, size);
}
}while(size>0);
}
// Delay time (max 16383 us)
void doDelay(unsigned long t1, unsigned long t2, unsigned long delayTime)
{
unsigned long t3;
if( t1 > t2 ){
t3 = (4294967295 - t1 + t2);
}else{
t3 = t2 - t1;
}
if( t3 < delayTime ){
delayMicroseconds(delayTime - t3);
}
}
\---
Jo, tak nějak to můžeš rozšiřovat. Fungovat by to mělo.
Jinak ano, já jsem se k "Arduinu" dostal teprve nedávno (Intel Galileo Gen2) a mám z toho dost rozporuplné pocity, třeba z těch knihoven.
Tak opět.
Nefunguje.:(
Jsou nějaké error hlášky
#include <usbh_midi.h>
#include <MIDI.h>
#include <midi_Defs.h>
#include <midi_Message.h>
#include <midi_Namespace.h>
#include <midi_Settings.h>
#include <Usb.h>
#include <usbh_midi.h>
#ifdef USBCON
#define _MIDI_SERIAL_PORT Serial1
#else
#define _MIDI_SERIAL_PORT Serial
#endif
//////////////////////////
// MIDI Pin assign
// 2 : GND
// 4 : +5V(Vcc) with 220ohm
// 5 : TX
//////////////////////////
USB Usb;
USBH_MIDI Midi(&Usb);
void MIDI_poll();
void doDelay(unsigned long t1, unsigned long t2, unsigned long delayTime);
void setup()
{
Serial1.begin(31250);
//Workaround for non UHS2.0 Shield
pinMode(7,OUTPUT);
digitalWrite(7,HIGH);
if (Usb.Init() == -1) {
while(1); //halt
}//if (Usb.Init() == -1...
delay( 200 );
}
void loop()
{
unsigned long t1;
Usb.Task();
t1 = micros();
if( Usb.getUsbTaskState() == USB_STATE_RUNNING )
{
MIDI_poll();
}
//delay(1ms)
doDelay(t1, micros(), 1000);
}
const byte nrpnStartRecording[] = {0xB0,0x63,0x7D,0xB0,0x62,0x58,0xB0,0x06,0x00,0xB0,0x26,0x01};
// Poll USB MIDI Controler and send to serial MIDI
void MIDI_poll()
{
byte outBuf[ 3 ];
uint8_t size;
do {
if( (size=Midi.RecvData(outBuf)) > 0 ){
if((outBuf[0] & 0xf0) ==(0xb0,0x50,0x7f));{ //CC received?
if(outBuf[1] == 0x01 && outBuf[2] == 0x00){
Serial1.write(nrpnStartRecording, sizeof(nrpnStartRecording));
}
}while(size>0);
return;
}
// Delay time (max 16383 us)
void doDelay(unsigned long t1, unsigned long t2, unsigned long delayTime)
{
unsigned long t3;
if( t1 > t2 ){
t3 = (4294967295 - t1 + t2);
}else{
t3 = t2 - t1;
}
if( t3 < delayTime ){
delayMicroseconds(delayTime - t3);
}
}
USB_MIDI_converter.ino: In function 'void MIDI_poll()':
USB_MIDI_converter:76: error: a function-definition is not allowed here before
'{' token
USB_MIDI_converter:88: error: expected `}' at end of input
USB_MIDI_converter:88: error: expected `while' at end of input
USB_MIDI_converter:88: error: expected `(' at end of input
USB_MIDI_converter:88: error: expected primary-expression at end of input
USB_MIDI_converter:88: error: expected `)' at end of input
USB_MIDI_converter:88: error: expected `;' at end of input
USB_MIDI_converter:88: error: expected `}' at end of input
Středník za ifem. Plus ti tam chybí konec složené závorky.
Neodpustím si okomentovat souvětí "Nefunguje.:( Jsou nějaké error hlášky". Tak si je snad přečti, ne? Máš tam detailně popsáno co se překladači nezdá.
Chápu Vaše rozhořčení ITci
1.Jsem uplný začátěčník!
2.Jsem truhlář
3.Klidě zaplatím nějaký honorář za konzultaci,protože ,sice se chci
naučit trochu programovat Arduino,ale primárně potřebuji rozchodit tuhle
sr... abych mohl posílat NRPN data do /Efektu/
Jsem totiž tak trochu muzikant a proto to potřebuji tohle rozchodit.
Už mě poslal do řiti jeden Japonec ,co napsal ten kód,takže to hodím z okna a raději budu hrát:)
U chyby máš napsané vždy číslo řádku a znak, který se mu nezdá O programování na Arduinu tu
máme výukový seriál, můžeš i kontaktovat jeho autora, třeba ti nějakou
tu konzultaci poskytne.
Ty chy se projevý už při napsání tohohle řádku.
if((outBuf[0] & 0xf0) ==(0xb0,0x50,0x7f)){//MIDI Output
Už nebudu otravovavat.
Chyby jsem opravil,ale ten kod nefunguje.
Díky moc za pomoc
Ale veď neotravuješ.
Píšeš, že si chyby opravil, to znamená, že ti už žiadne nevypisuje?
Pri programovaní musíš mať trpezlivosť a niekedy veeeeľa hľadať.
Nevypisuje už žádné chyby.
Pokud tam nechám starý kod tak funguje,ale po přidání Cc handle kodu
nic.
Jsem trpělivý,hrabu se v tom už tři dny, opravdu cely dny, třeba 7-8
hodin.
Pročetl jsem už snad 100 sketchů na netu.Opravdu jsrm se tomu věnoval.
Nechci aby to vypadalo,že si napišu na fórum a někdo de chytne a vyřeší
to.
Tu je tutoriál: http://www.itnetwork.cz/…e-pc/arduino
Obráť sa na autora, verím, že ti poradí.
No, tak si třeba nech vypsat (na COm port), jaká data ti přesně přijdou. Mi přijde, že taky zápasíš trochu s C/C++, což pak není zrovna dobrou volbou hrabat se v Arduinu či něčem, co se hůře ladí.
Souhlasím.
Přiznávám,že mě to porazilo:)
Díky za reakce
jestli to vy rostaci nebude tim, ze dys testujete prikaz CC, tak mate test na rovnost 0xb0 chacha, co takhle 0xC0 ?! u //CC received ?!
podekuj tomu joudovi ze zacatku, vsici to vopisujete, a me stacilo 5 vterin
spravne if ( ( outBuf[0] & 0xF0 ) == 0xC0 )
tak zas nekdy
Zobrazeno 18 zpráv z 18.