Go Down

Topic: beginners vraag midi was not declared in this scope (Read 3021 times) previous topic - next topic

analoguemule

Goedenavond,

Ik ben nieuw met arduino en dit is het eerste project wat ik wil doen.
Namelijk het maken van een midi naar 16 x triggers voor mijn synthesizer.
Nu heb ik op het internet een project gevonden wat ik met een kleine aanpassing kan toepassen voor mijn idee.
Helaas krijg ik een fout code waarvan ik niet begrijp wat de oorzaak is heb al onderzoek gedaan op google maar ben hier niet wijzer van geworden.
Ik hoop dat dit een simpele oplossing is en dat ik een beter beeld krijg van hoe een sketch opgebouwd is.
De foutcode die ik krijg is: 'MIDI' was not declared in this scope.



#include <MIDI.h>
#include <Wire.h>
#include <Adafruit_MCP23017.h>

byte note;
byte velocity;
byte channel;

int statusLed = 3;   // use if you want a status LED on PIN 3

Adafruit_MCP23017 mcp;

void setup() {

  mcp.begin();      // use default address 0
 
  mcp.pinMode(0, OUTPUT);
   mcp.pinMode(1, OUTPUT);
    mcp.pinMode(2, OUTPUT);
     mcp.pinMode(3, OUTPUT);
      mcp.pinMode(4, OUTPUT);
       mcp.pinMode(5, OUTPUT);
        mcp.pinMode(6, OUTPUT);
         mcp.pinMode(7, OUTPUT);
          mcp.pinMode(8, OUTPUT);
           mcp.pinMode(9, OUTPUT);
            mcp.pinMode(10, OUTPUT);
             mcp.pinMode(11, OUTPUT);
              mcp.pinMode(12, OUTPUT);
               mcp.pinMode(13, OUTPUT);
                mcp.pinMode(14, OUTPUT);
                 mcp.pinMode(15, OUTPUT);
                 
  mcp.digitalWrite(0,LOW);
   mcp.digitalWrite(1,LOW);
    mcp.digitalWrite(2,LOW);
     mcp.digitalWrite(3,LOW);
      mcp.digitalWrite(4,LOW);
       mcp.digitalWrite(5,LOW);
        mcp.digitalWrite(6,LOW);
         mcp.digitalWrite(7,LOW);
          mcp.digitalWrite(8,LOW);
           mcp.digitalWrite(9,LOW);
            mcp.digitalWrite(10,LOW);
             mcp.digitalWrite(11,LOW);
              mcp.digitalWrite(12,LOW);
               mcp.digitalWrite(13,LOW);
                mcp.digitalWrite(14,LOW);
                 mcp.digitalWrite(15,LOW);
                 
  MIDI.begin(MIDI_CHANNEL_16);   // Initiate MIDI communications, listen to all channels   
 

  MIDI.setHandleNoteOn(HandleNoteOn);  // set note on

 
  MIDI.setHandleNoteOff(HandleNoteOff);  // set note off
 
}


void loop()
 
}

void HandleNoteOn(byte channel, byte note, byte velocity){    //turn note on if note signal is recieved.

        if (note == 53){
          mcp.digitalWrite(0, HIGH);
        }
             else if (note == 55){
          mcp.digitalWrite(1, HIGH);//turn on led
        }
             else if (note == 57 ){
          mcp.digitalWrite(2, HIGH);//turn on led
        }
             else if (note == 59 ){
          mcp.digitalWrite(3, HIGH);//turn on led

        }
             else if (note == 60 ){
          mcp.digitalWrite(4, HIGH);//turn on led
        }
             else if (note == 62 ){
          mcp.digitalWrite(5, HIGH);//turn on led
        }
             else if (note == 64 ){
          mcp.digitalWrite(6, HIGH);//turn on led
         }
             else if (note == 65 ){
          mcp.digitalWrite(7, HIGH);//turn on led
         }
             else if (note == 67 ){
          mcp.digitalWrite(8, HIGH);//turn on led
           }
             else if (note == 69 ){
          mcp.digitalWrite(9, HIGH);//turn on led
            }
             else if (note == 71 ){
          mcp.digitalWrite(10, HIGH);//turn on led
             }
             else if (note == 72 ){
          mcp.digitalWrite(11, HIGH);//turn on led
             }
             else if (note == 74 ){
          mcp.digitalWrite(12, HIGH);//turn on led
             }
             else if (note == 76 ){
          mcp.digitalWrite(13, HIGH);//turn on led
             }
             else if (note == 77 ){
          mcp.digitalWrite(14, HIGH);//turn on led
             }
             else if (note == 79 ){
          mcp.digitalWrite(15, HIGH);//turn on led
                  }
}
void HandleNoteOff(byte channel, byte note, byte velocity){   // Double check that note is off when note data stops.


             if (note == 53){
          mcp.digitalWrite(0,LOW);//turn on led
        }
             else if (note == 55 ){
          mcp.digitalWrite(1,LOW);//turn on led
        }
             else if (note == 57 ){
          mcp.digitalWrite(2,LOW);//turn on led
        }
             else if (note == 59 ){
          mcp.digitalWrite(3,LOW);//turn on led
        }
             else if (note == 60 ){
          mcp.digitalWrite(4,LOW);//turn on led
        }
             else if (note == 62 ){
          mcp.digitalWrite(5,LOW);//turn on led
        }
             else if (note == 64 ){
          mcp.digitalWrite(6,LOW);//turn on led
        }
             else if (note == 65 ){
          mcp.digitalWrite(7,LOW);//turn on led
        }
             else if (note == 67 ){
          mcp.digitalWrite(8,LOW);//turn on led
        }
             else if (note == 69 ){
          mcp.digitalWrite(9,LOW);//turn on led
        }
             else if (note == 71 ){
          mcp.digitalWrite(10,LOW);//turn on led
        }
             else if (note == 72 ){
          mcp.digitalWrite(11,LOW);//turn on led
        }
             else if (note == 74 ){
          mcp.digitalWrite(12,LOW);//turn on led
        }
             else if (note == 76 ){
          mcp.digitalWrite(13,LOW);//turn on led
        }
             else if (note == 77 ){
          mcp.digitalWrite(14,LOW);//turn on led
        }
             else if (note == 79 ){
          mcp.digitalWrite(15,LOW);//turn on led
             }
}


foutcode:

Arduino: 1.8.4 (Windows 10), Board:"Arduino Nano, ATmega328P"

C:\User\AppData\Local\Temp\FCUDLG0IUSM6KHE-1\FCUDLG0IUSM6KHE-1.ino: In function 'void setup()':

FCUDLG0IUSM6KHE-1:53: error: 'MIDI' was not declared in this scope

   MIDI.begin(MIDI_CHANNEL_16);   // Initiate MIDI communications, listen to all channels   

   ^

FCUDLG0IUSM6KHE-1:53: error: 'MIDI_CHANNEL_16' was not declared in this scope

   MIDI.begin(MIDI_CHANNEL_16);   // Initiate MIDI communications, listen to all channels   

              ^

FCUDLG0IUSM6KHE-1:56: error: 'HandleNoteOn' was not declared in this scope

   MIDI.setHandleNoteOn(HandleNoteOn);  // set note on

                        ^

FCUDLG0IUSM6KHE-1:59: error: 'HandleNoteOff' was not declared in this scope

   MIDI.setHandleNoteOff(HandleNoteOff);  // set note off

                         ^

C:\Users\AppData\Local\Temp\FCUDLG0IUSM6KHE-1\FCUDLG0IUSM6KHE-1.ino: At global scope:

FCUDLG0IUSM6KHE-1:66: error: expected initializer before '}' token

 }

 ^

FCUDLG0IUSM6KHE-1:66: error: expected declaration before '}' token

Meerdere bibliotheken gevonden voor "MIDI.h"
Gebruikt: C:\Users\Documents\Arduino\libraries\MIDI
Niet gebruikt: C:\Users\Documents\Arduino\libraries\arduino_midi_library-master
exit status 1
'MIDI' was not declared in this scope

Ik hoop dat iemand mij hiermee kan helpen.
mule

MAS3

Hoi en welkom.

Als dit je eerste experimenten met programmeren zijn (ik weet het niet want daar heb je niets over gezegd, alleen dat Arduino nieuw voor je is), dan is het nogal ambitieus om hier mee aan de slag te gaan.

Alle foutmeldingen behalve de laatste hebben te maken met de library MIDI.
Aangezien je deze code ergens gevonden schijnt te hebben, is die vindplaats ook de juiste plaats om te gaan kijken voor de oplossing hiervan.
Dus ik hoop dat je nog weet waar je het vandaan getrokken hebt.
Ik zou er niet van opkijken als het een kwestie van de juiste (en op de juiste wijze geïnstalleerde) library is.

De laatste foutmelding heeft te maken met de huishouding van de gekrulde haakjes {}.
Die beginnen altijd met een {, en eindigen met }.
Je foutmelding geeft aan dat het probleem op regel 66 van je code staat, en op positie 1.
Dat is het afsluitende haakje van je loop().
En de foutmelding komt dus omdat loop() wel word afgesloten, maar niet wordt geopend.
Er zijn overigens wel stukken code waar inderdaad loop() leeg is, maar ik betwijfel of dat hier ook het geval hoort te zijn.
Maar daarvoor moet je code verder geanalyseerd worden dan ik tot nog toe heb gedaan, en daar is het nu te laat (of eigenlijk te vroeg) voor.
Nou ja, ik weet eigenlijk wel zeker dat het hier niet klopt.

Overigens, wanneer je code plaatst, doe dat dan tussen [code] [/code] tags.
Daarmee voorkom je allerlei fouten die de forumsoftware zou kunnen gaan maken door jouw code, en je maakt het helpers gemakkelijker om de code te kopiëren naar een IDE zodat die code goed bekeken kan worden.
Doe dat ook met je foutmeldingen, maar dan wel weer in eigen code tags.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

analoguemule

Goedemiddag,
 
Bedankt voor de reactie dit is mijn eerste ervaring met programmeren.
Voornamelijk ben ik bezig met hardware ben namelijk bezig met het maken van replica's van oude drummodules.
Nu ben ik van mening dat het digitaal aansturen van analoge schakelingen wel heel erg handig is.
Meestal neem ik een idee van iemand en pas ik dat aan zodat het aansluit op mijn idee.

Dat is nu ook het geval ik heb deze code namelijk van:
http://www.instructables.com/id/Automated-MIDI-Xylophone/
Niemand geeft aan dezelfde foutmelding als ik te hebben en ik wil graag meer ervaring krijgen met het oplossen van foutcodes.
Hij geeft aan welke librarys ik moet gebruiken maar niet welke versie nu is het bericht geplaats op 31 oktober 2016.
Dus ik heb de midi library versie v4.2 gebruikt maar ik krijg dezelfde foutcode als met nieuwe versies.

Sorry ik zal in de toekomst gebruikt maken van
Code: [Select]
tags.
En als ik thuis ben zal ik verder onderzoek doen ernaar.




shooter

Inderdaad een beetje speuren naar een goede versie van de midi lib en die op de goede plaats neerzetten, verder alle libs plaatsen in 1 directory, dan kun je snel zien of het ergens dubbel staat.

Zoals jan al aangaf is het erg moeilijk met instructables, en heb je nog wel wat nodig om het goed te krijgen.
voor al die if dingen kijk eens naar case.
druk ook eens op CTRL T dan staat alles netjes onder elkaar en kun je zien dat je een } mist.

paul deelen
shooter@home.nl
making controls with codesys PLC and arduino

MAS3

Jan ?

Die site waar je dit vandaan hebt, noem ik Destrucatbles.
Want het is echt een ongelooflijk slechte site met hele vreemde regels.
1 van de problemen is waar je nu dus tegen aan loopt, namelijk dat iemand roept: "Ik heb dit en dat gedaan en toen werkte het prima, dus jij moet dat precies zo na doen dan gaat het voor jou ook werken."
Daar word maar hoogst zelden verteld waarom (die persoon denkt dat) het werkt, want dat heb je niet nodig als het eenmaal werkt.
Das dus hele grote onzin want als je iets wil aanpassen heb dus een groot probleem wanneer je geen idee hebt hoe het eigenlijk werkt.
Verder is op die site alle vormen van niet positieve feedback verboden, en zal dat zonder pardon en zonder toelichting worden verwijderd.
Dat is bewezen, omdat dat via de internationale afdeling van dit Arduino forum is getest aan de hand van een schaduw thread.
Dat wil zeggen dat alles wat daar gepost werd, hier ook werd gepost.


Ik word er kriebelig van, dus ik ga er verder niets meer over zeggen, dan dat je jezelf (en mij) een levensgroot plezier doet als je die site niet meer raadpleegt want je helpt jezelf er echt niet mee.
En dat je nu dus de reden weet waarom er daar niemand te zien is die klaagt over het niet werken of vraagt om meer uitleg.

Sorry is niet nodig als je mijn tip verder ter harte neemt, je mag best nog ff wennen aan dit forum hoor.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

analoguemule

Goedemiddag iedereen,

Ik heb de sketch werkende met midi library V4.0 en heb de schakeling getest en het werkt.
Bedankt voor de hulp ik raadplaag instructables eigenlijk nooit zit zelf vaak op muffwiggler of electronic-music.
En ik zal in de toekomst instructables zo veel mogelijk proberen te vermijden.
Nu ga ik proberen om het midi chanel te wijzigen naar kanaal 16 maar dit is mij nog niet gelukt.
Ik ga zeker op dit forum blijven omdat ik wil leren hoe arduino precies werkt aangezien er veel mogelijk mee is.
Vanavond ga ik zeker weer verder met dit project kan ik deze thread openhouden of moet ik deze nu sluiten?

Go Up