Close Menu
magazin Mehatronikamagazin Mehatronika
  • English
  • Početna
  • Industrija
  • Recenzije
    • Industrijska oprema
    • SBC računari
    • Razvojni sistemi
    • STEM
    • Home automation
    • Mrežna oprema
    • Displeji
    • Dodaci
    • Alati
    • Muzička oprema
    • Pametni uređaji
    • Re:recenzija
  • Edukacija
    • Tutorijali
  • Novosti
  • Lifestyle
    • Ekologija
    • Događaji
    • Intervjui
  • Stručni tekstovi
  • Forum
Facebook X (Twitter) Instagram LinkedIn
Trending
  • FAULHABER inkrementalni enkoder IERF3 L
  • Megger OTS serija
  • Orange Pi RV recenzija
  • Mehatronika intervju: Neven Katanić
  • Multifazni merni sistemi (MMS) u naftno-gasnoj industriji
  • Cool Pi 4B i Ubuntu 25.10 Questing Quokka
  • Inženjerska modernizacija upravljačkih sistema primenom akYtec 2TCR1 mernih kontrolera
  • Energetska efikasnost ABB elektromotornih pogona
  • Srpski
    • Srpski
    • English
LinkedIn Facebook X (Twitter) Instagram
magazin Mehatronikamagazin Mehatronika
  • Početna
  • Industrija
  • Recenzije
    • Industrijska oprema
    • SBC računari
    • Razvojni sistemi
    • STEM
    • Home automation
    • Mrežna oprema
    • Displeji
    • Dodaci
    • Alati
    • Muzička oprema
    • Pametni uređaji
    • Re:recenzija
  • Edukacija
    • Tutorijali
  • Novosti
  • Lifestyle
    • Ekologija
    • Događaji
    • Intervjui
  • Stručni tekstovi
  • Forum
magazin Mehatronikamagazin Mehatronika
Home»Edukacija»Tutorijali»OP-Z neočekivani MIDI demo projekat
Tutorijali

OP-Z neočekivani MIDI demo projekat

Dušan DakićBy Dušan Dakić05/05/2022Updated:27/09/20253 Mins Read
OP-Z MIDI one

A sada neočekivani OP-Z MIDI demo…
… mi smo inženjerski časopis, pa smo želeli da napravimo mali crossover projekat da završimo ovu recenziju. Uzeli smo jedan od naših omiljenih mikrokontrolera – ATMEL ATSAME51J19 baziran na SAME51 i počeli smo da radimo!

OP-Z MIDI two

Želeli smo da OP-Z-u dodamo mali OLED ekran i da ga koristimo za prikaz trenutnog otkucaja unutar track-a. Odlučili smo da koristimo MIDI protokol za ovo, jer nam je dao potrebne podatke iz sekvencera.

OP-Z MIDI tree

Koristeći USB-MIDI biblioteku na početku hvatamo signale start, stop i clock. Po standardnoj implementaciji MIDI, OP-Z šalje 24 clock impulsa po četvrtini. To znači da da bismo dobili tačnu sinhronizaciju otkucaja, samo treba da izbrojimo te impulse.

OP-Z MIDI four

Nažalost, postoji mali problem što su impulsi „udaljeni“ 20 ms. Jezgro MCU-a apsolutno mora biti spremno da primi impuls, a ako to ne učini – sve postaje nesinhronizovano. Uz određenu optimizaciju, M4 jezgro nije imalo problema sa održavanjem takta – i ostao nam je prilično sladak mali projekat za koji smatramo da pokazuje koliko je moguće interesantnog postići samo korišćenjem MIDI podataka.

GitHub Project Code

https://github.com/magazinMehatronika/MIDI-Beat-Tracker
 

#include <MIDI.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>

  #define BUTTON_A  9
  #define BUTTON_B  6
  #define BUTTON_C  5


using namespace midi;
MIDI_CREATE_DEFAULT_INSTANCE();

Adafruit_SH1107 display = Adafruit_SH1107(64, 128, &Wire);


int sync = 0;
int counter = 0;

int modeSel = 0;

bool enabler = false;

void setup()
{
    MIDI.begin(MIDI_CHANNEL_OMNI);  // Listen to all incoming messages

    delay(250); // wait for the OLED to power up
    display.begin(0x3C, true); // Address 0x3C default
    display.setRotation(1);

    
    display.clearDisplay();


    pinMode(BUTTON_A, INPUT_PULLUP);
    pinMode(BUTTON_B, INPUT_PULLUP);
    pinMode(BUTTON_C, INPUT_PULLUP);

}

void loop()
{

   digitalWrite(LED_BUILTIN, LOW);

  if(!digitalRead(BUTTON_A)) modeSel = 0;
  if(!digitalRead(BUTTON_B)) modeSel = 1;
  if(!digitalRead(BUTTON_C)) modeSel = 2;
   

   if(MIDI.read()){
            switch(MIDI.getType()){      // Get the type of the message we caught

            case Start:

            enabler = true;

            sync = 0;
            counter = 0;
            break;

            case Stop:

            enabler = false;

            display.clearDisplay();
            display.display();

            sync = 0;
            counter = 0;

            break;
            
            case Clock:
            if (enabler == true){
            
            if (sync == 0){

            switch (counter){

             case 0:
              display.clearDisplay();
              
              display.setTextSize(4,8);
              display.setTextColor(SH110X_WHITE);
              display.setCursor(0,0);

              switch(modeSel){
                case 0:
                display.print("One");
                break;
                case 1:
                display.print("Je'n");
                break;
                case 2:
                display.print("Ja--");
                break;
              }
              

              display.display();
              counter++;
              break;

              case 1:
              display.clearDisplay();


              display.setTextSize(4,8);
              display.setTextColor(SH110X_WHITE);
              display.setCursor(0,0);

              switch(modeSel){
                case 0:
                display.print("Two");
                break;
                case 1:
                display.print("Dva");
                break;
                case 2:
                display.print("--pa");
                break;
              }
              display.display();
              counter++;
              break;

              case 2:
              display.clearDisplay();

              display.setTextSize(4,8);
              display.setTextColor(SH110X_WHITE);
              display.setCursor(0,0);

              switch(modeSel){
                case 0:
                display.print("Three");
                break;
                case 1:
                display.print("Tri");
                break;
                case 2:
                display.print("pa--");
                break;
              }
              display.display();
              counter++;
              break;

              case 3:
              display.clearDisplay();

              display.setTextSize(4,8);
              display.setTextColor(SH110X_WHITE);
              display.setCursor(0,0);

              switch(modeSel){
                case 0:
                display.print("Four");
                break;
                case 1:
                display.print("Cet");
                break;
                case 2:
                display.print("--pa");
                break;
              }
              display.display();
              counter = 0;
              break;
              
            }
            
            digitalWrite(LED_BUILTIN, HIGH);
            delay(10);                // Wait for a second
            digitalWrite(LED_BUILTIN, LOW);
            sync = 24;
            }
            sync--;
            break;
           }

   }
   }
}

Više informacija o OP-Z: https://teenage.engineering

Distributer OP-Z u Srbiji: https://www.player.rs

teenage engineering
Previous Articleteenage engineering OP-Z prikaz
Next Article Samsung dostigao brojku od milion prodatih pametnih monitora
Dušan Dakić
  • Instagram

Dušan je deo tima magazina Mehatronika od 2019. godine. On piše stručne recenzije i how-to artikle, i vodi komunikaciju sa brojem firmi. Takođe je ključna osoba koja stoji iza projekta prevoda tekstova na engleski, a pogotovo onih koji se tiču edukacije i “maker” tema.

Related posts

Kako instalirati Arduino IDE 2 na Ubuntu i Debian OS-u

28/09/2025

Kako instalirati Raspberry Pi OS i odabrati SD karticu za Raspberry Pi 5

27/09/2025

Node-RED: Upravljanje GPIO signalima na Orange Pi 4A

11/04/2025

Zephyr RTOS devicetree overlay za mikroE RELAY click

26/03/2025

MQTT server uz Node-RED na Radxa Cubie A5E

20/03/2025

Open Source rešenje za praćenje stanja senzora u pametnom domu uz Home Assistant i Elecrow W5

14/03/2025
Kompanije
ABB akYtec Armsom Automatika Banana Pi Beogradski Sajam Bosch Rexroth CADCAM Data CHIRON Croatia CircuitMess Danfoss DFRobot Digilent Dossis Eaton Edatec Elcom Media Elecfreaks Elecrow Electronic Design Elektromont ELESA+GANTER EMP EMT elektro ENEL Valjevo EP-Solutions ePlan Eurocom EXOR ETI Fanuc Faulhaber Festo Fox Electronics Gamax Gomo Design Hennlich Hidraulika HMS ICM Electronics ICOP INEA SR INNOMOTICS IvDam Process Control LattePanda Libre Computer Lilygo magazinMehatronika malina314 Mean Well / ASIKO Melco-Buda Metronik Microsoft Mikro Kontrol Mitsubishi Electric Momentum National Instruments Neminik Neofyton NVIDIA OM SISTEM Orange Pi PCBWay Pickering Radxa Raspberry Pi Recom Renishaw Rittal Sajam voda Samsung Schneider Electric Schunk Seeed Studio Siemens SM Automation Sobel Soldered staubli STMicroelectronics SunFounder Tectra / Megger teenage engineering Tehnogama TeLa elektrik TI LaunchPad Tipteh TRC pro Trim Triton Engineering UMBRAmatik Unicom Uno-Lux Processing URAM System Vesimpex VETS Wago Weidmuller Wurth Elektronik Yaskawa Yokogawa
Distribuciju štampanih izdanja srednjim školama omogućile kompanije
Facebook X (Twitter) Instagram LinkedIn
  • Uređivačka politika
  • Kontakt
  • Media kit
  • Slanje jedinica za recenziju
  • Pretplata
  • Elektronska izdanja

magazin Mehatronika - Agencija “Gomo Design”
Stanoja Glavaša 37, 26300 Vršac, Serbia
+381 60 0171 273

© 2025 magazin Mehatronika by Gomo Design.

Type above and press Enter to search. Press Esc to cancel.

Logo magazin Mehatronika
Manage Consent
Da bismo omogućili najbolje korisničko iskustvo, koristimo tehnologije kao što su kolačići da bismo obradili informacije o uređaju sa kojeg pristupate sajtu, kao i informacije o posećivanju naših stranica. Prihvatanje naše upotrebe ovih tehnologija znači da nam dozvoljavate da obradimo ove podatke. Odbijanje ili kasnije opozivanje pristanka može dovesti do prestanka rada određenih funkcija sajta.
Funkcionalni kolačići Stalno aktivni
Skladištenje ili pristup ovim podacima je neophodan za omogućavanje osnovnog korisničkog iskustva u pružanju usluge ili priustupu sadržaju kojeg je korisnik izričito tražio, odnosno za svrhu komunikacije preko elektronske mreže.
Podešavanja
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistički kolačići
The technical storage or access that is used exclusively for statistical purposes. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing kolačići
Ovi podaci se koriste u kreaciji korisničkih profila na koje se šalje marketinški materijal, ili koji se koriste za praćenje interakcija korisnika sa sajtom, ili sa nekoliko sajtova za marketinške svrhe.
Upravljajte opcijama Upravljajte uslugama Upravljajte {vendor_count} dobavljačima Pročitajte više o ovim svrhama
Pogledaj podešavanja
{title} {title} {title}