Fórum témák
- • Erősítő mindig és mindig
- • Transzformátor készítés, méretezés
- • Szárítógép problémák
- • Arduino
- • Lézer érzékelő
- • Fejhallgató erősítő
- • Sárga Kazettás Piaci Nintendo (8bit)
- • Klíma beszerelése, fűtés-hűtés házilag
- • Napelem alkalmazása a lakás energia ellátásában
- • Hűtőgép probléma
- • Kutya macska (vad) riasztó
- • Rendelés külföldről (eBay - Paypal)
- • FET vezérlése
- • Muzeális készülékek-alkatrészek restaurálása
- • Oszcilloszkóp, avagy hogyan kell használni?
- • Toroid transzformátor
- • LCD TV probléma
- • Elektromos távirányítós kapunyitó
- • Videomagnó problémák
- • SMD forrasztás profin
- • Érdekességek
- • CNC építése házi alkatrészekből az alapoktól
- • Ki hol gyártatja a NYÁK-ot ?
- • Felajánlás, azaz ingyen elvihető
- • Kazettás magnó (deck) javítása
- • HESTORE.hu
- • Szobatermosztát bekötése
- • Hibrid erősítő
- • Borhűtő vezérlő panel
- • Karácsonyi fényfüzérek
- • Mosogatógép hiba
- • PC táp átalakítás
- • LED-es világítás
- • Kombikazán működési hiba
- • Áramlökés határoló lágyindító
- • Rádió adó építése
- • Akkus lámpa javítás
- • Villanyszerelés
- • Elektromos tolókapu
- • Villanypásztor
- • Li-Po - Li-ion akkumulátor és töltője
- • Gondolkodó ház avagy házautomatizálás
- • Mikrohullámú sütő javítás, magnetron csere, stb.
- • Kapcsolási rajzot keresek
- • Műhelyünk felszerelése, szerszámai
- • Rádióamatőrök topikja
- • Villanymotor mi a hiba?
- • Eredményjelző
- • Számítógép tápegység
- • Porszívó javítás
- • ARM CPU assembler programozás
- • Autórádió (fejegység) problémák, kérdések, válaszok
- • Számítógép hiba, de mi a probléma?
- • 433 MHz adóvevő modul tapasztalatok
- • Labortápegység készítése
» Több friss téma
|
A klónok CH340 Soros-USB illesztőjének drivere ( Letöltés)
Most automatán ismételgeti a dúr akkordot. Átmásoltam a tiédet. Ha lenyomom mindkét gombot, akkor elhallgat.
Szerintem a MIDI program ilyen, ismétel amig nem állitod le?
Variáld a feltétel vizsgálatokat.
Hát használd. A benne lévő kvarc sem műszer pontosságú, régen volt olyan javaslat, és működött is, hogy tápfeszültség változtatással elhangolták. Amúgy azokban is van biztos pontos. Csak az a kérdés milyen pontos műszert akarsz, ha nem órához / egyéb nagy pontosságú helyre kell kb elég lehet. Amit a kvarcokról gondolok, az szerint a minél nagyobb, nem pontosabb. Legjobbak a 32Khz környékiek. Ebből csinálsz egy időalapot, az arduinóval meg számoltatsz, az alaplap órajele meg lehet olyan amilyet akarsz, a pontossága nem számít, csak a kijelzést, meg a gombokat intézi. Viszont ha ebbe gondolkodsz, komolyan bele kell ásnod magad a számlálók hardveres kialakításába.
Eddig működött rendesen, egy nyomó gombbal. Adott gombhoz hozta a kívánt akkordot. Most u.ezt kellene tegye, csak két gombkombináció megnyomásával. Valami kizáró függvény kellene, ami csak akkor enged bármit, ha a kívánt két gomb van lenyomva.
Ez akár járható út is lehet. Úgyis van a Mega dobozában DS3231, az meg tudná biztosítani az órajelet. Valamiért ez eddig nem jött képbe. Köszi az ötletet!
Összehoztam neked, valami gomb beolvasást próbára!
Telepíted:
// Include the Bounce2 library found here :
Bővebben: Link
Ez lekezeli a gombok prrel mentesítését, és beolvasását.
Nem tudom, mit használsz? Én az UNO Pin számozását adtam meg!
#include <MIDI.h>
// Include the Bounce2 library found here :
#include <Bounce2.h>
MIDI_CREATE_DEFAULT_INSTANCE();
// a 12 hang és 4 húr nyomogombjai:
/*
uint8_t As = 28; //A5;
uint8_t Es = 1;
uint8_t B = 3;
uint8_t F = 4;
uint8_t C = 5;
uint8_t G = 6;
uint8_t D = 7;
uint8_t A = 8;
uint8_t E = 9;
uint8_t H = 10;
uint8_t Fis = 11;
uint8_t Cis = 12;
uint8_t dur = 23; //A0;
uint8_t moll = 24; //A1;
uint8_t sept = 25; //A2;
uint8_t szuk = 26; //A3;
*/
#define LED_PIN 13
enum billentyuk {
// nevek felsorolása egyezzen a BUTTON_PINS tömb pin számozás sorrendel!
As = 0,
Es,
B,
F,
C,
G,
D,
A,
E,
H,
Fis,
Cis,
Dur,
Moll,
Sept,
Szuk
};
#define NUM_BUTTONS 16
// UNO Board Butons Pins értékek
const uint8_t BUTTON_PINS[NUM_BUTTONS] = {28, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 23, 24, 25, 26};
int ledState = LOW;
Bounce * buttons = new Bounce[NUM_BUTTONS];
void setup()
{
MIDI.begin(1);
for (int i = 0; i < NUM_BUTTONS; i++) {
buttons[i].attach( BUTTON_PINS[i] , INPUT_PULLUP ); //setup the bounce instance for the current button
buttons[i].interval(25); // interval in ms
}
// Setup the LED :
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, ledState);
}
void loop()
{
// C dur
// lenyomtak a C-t és a dur-t
buttons[C].update();
buttons[Dur].update();
/**
@brief Returns true if pin signal transitions from low to high.
*/
if( buttons[C].rose() && buttons[Dur].rose()) // lenyomtak a C-t és a dur-t
{
MIDI.sendNoteOn( 48, 100, 1 ); // kikuldom a B-durnak megfelelo noteOn-okat
MIDI.sendNoteOn( 52, 100, 1 );
MIDI.sendNoteOn( 55, 100, 1 );
do{
buttons[C].update();
buttons[Dur].update();
/**
@brief Returns true if pin signal transitions from high to low.
Itt bármelyiket felengedik? Tovább megy.
*/
}while( buttons[C].fell()==LOW && buttons[Dur].fell()==LOW); // megvarom, mig elengedik a C vagy Dur gombot, addig nem lepek tovabb.
// itt mar elengedte a C-t vagy dur-t, kikuldom a noteOff-okat
MIDI.sendNoteOff( 48, 0, 1 );
MIDI.sendNoteOff( 52, 0, 1 );
MIDI.sendNoteOff( 55, 0, 1 );
}
// F dur
buttons[F].update();
buttons[Dur].update();
// Ha mindkettőt megnyomták?
if( buttons[F].rose() && buttons[Dur].rose())
{
MIDI.sendNoteOn( 41, 100, 1 );
MIDI.sendNoteOn( 45, 100, 1 );
MIDI.sendNoteOn( 48, 100, 1 );
do{
buttons[F].update();
buttons[Dur].update();
/**
@brief Returns true if pin signal transitions from high to low.
Itt bármelyiket felengedik? Tovább megy.
*/
}while( buttons[F].fell()==LOW && buttons[Dur].fell()==LOW); // megvarom, mig elengedik a F vagy Dur gombot, addig nem lepek tovabb.
MIDI.sendNoteOff( 41, 0, 1 );
MIDI.sendNoteOff( 45, 0, 1 );
MIDI.sendNoteOff( 48, 0, 1 );
}
} // loop
Remélem, boldogulsz vele?
Cserében kérem, hogy tájékoztass részletesen az eredményeidről! A hozzászólás módosítva: Jún 15, 2019
Szia
Köszönöm, hogy ennyit segítesz.
Elkezdem az elejétől.
Az első elektronika, ami alapján tovább akartam menni, egy lábbal vezérelhető, kíséretautomata vezérlő volt. Ott úgy nézett ki a dolog, hogy 13 akkord hangjai voltak beírva és az adott gomb alacsony szintre billentésével, megszólalt a szintetizátoron, az adott akkord.
Ott azt feltételezi, hogy alaphelyzetben, minden bemenet magas szinten van. Minden akkordnak külön van utasítás, ha mégsem magas szinten van, akkor küldje az akkord kódjait.
Lehet, hogy egyszerűen meg kellett volna fordítani a szinteket és hozzá igazítani a kívánt logikai műveletet?
Amit most szeretnék: egy gitár formájú kütyü, aminél a nyak részen lenne 12 gomb az alaphangoknak. Ha valamelyik alacsony szintre kerül, még nem történik semmi.
A húrok pengetős részének helyén, lenne négy gomb (érintő szenzor). Ezek lennének az akkord bemenetek. Ha lenyomom pl. a C gombot a nyakon és megérintem a dúr érzékelőt, akkor kiküldené a C dúr akkord kódjait. 12 hang x 4 akkord = 48 variáció.
Ehhez szerettem volna átalakítani az első kapcsolást, ami egy gombos módban, nagyon jól működik.
Prell mentesítésre igazán nincs szükség, mert az érintő szenzorban és a Hall szenzorokban is van.
Megpróbálom, amit küldtél.
Én azt feltételeztem, hogy mezei gombokkal vezérled, és a prrelezés miatt nem boldogulsz!
De így ennek a szűrése tényleg csak időpocsékolás!
Idézet: „Ott azt feltételezi, hogy alaphelyzetben, minden bemenet magas szinten van. Minden akkordnak külön van utasítás, ha mégsem magas szinten van, akkor küldje az akkord kódjait. ”
Ezt is csak most közlöd! A példaprogramodban pont fordítva volt alkalmazva a szintek figyelése! A hozzászólás módosítva: Jún 15, 2019
Akkor az egész feltétel kezelést meg kellene cserélni!
Az if(ekben levők mennek a while(be)), a while(az ifbe).
Megcsináltam a fent irt javításokat:
#include <MIDI.h>
// Include the Bounce2 library found here :
#include <Bounce2.h>
MIDI_CREATE_DEFAULT_INSTANCE();
// a 12 hang és 4 húr nyomogombjai:
/*
uint8_t As = 28; //A5;
uint8_t Es = 1;
uint8_t B = 3;
uint8_t F = 4;
uint8_t C = 5;
uint8_t G = 6;
uint8_t D = 7;
uint8_t A = 8;
uint8_t E = 9;
uint8_t H = 10;
uint8_t Fis = 11;
uint8_t Cis = 12;
uint8_t dur = 23; //A0;
uint8_t moll = 24; //A1;
uint8_t sept = 25; //A2;
uint8_t szuk = 26; //A3;
*/
#define LED_PIN 13
enum billentyuk {
// nevek felsorolása egyezzen a BUTTON_PINS tömb pin számozás sorrendel!
As = 0,
Es,
B,
F,
C,
G,
D,
A,
E,
H,
Fis,
Cis,
Dur,
Moll,
Sept,
Szuk
};
#define NUM_BUTTONS 16
// UNO Board Butons Pins értékek
const uint8_t BUTTON_PINS[NUM_BUTTONS] = {28, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 23, 24, 25, 26};
int ledState = LOW;
Bounce * buttons = new Bounce[NUM_BUTTONS];
void setup()
{
MIDI.begin(1);
for (int i = 0; i < NUM_BUTTONS; i++) {
buttons[i].attach( BUTTON_PINS[i] , INPUT_PULLUP ); //setup the bounce instance for the current button
buttons[i].interval(25); // interval in ms
}
// Setup the LED :
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, ledState);
}
void loop()
{
// C dur
// lenyomtak a C-t és a dur-t
buttons[C].update();
buttons[Dur].update();
/**
@brief Returns true if pin signal transitions from high to low.
*/
if( buttons[C].fell()==LOW && buttons[Dur].fell()==LOW) // lenyomtak a C-t és a dur-t
{
MIDI.sendNoteOn( 48, 100, 1 ); // kikuldom a B-durnak megfelelo noteOn-okat
MIDI.sendNoteOn( 52, 100, 1 );
MIDI.sendNoteOn( 55, 100, 1 );
do{
buttons[C].update();
buttons[Dur].update();
/**
* @brief Returns true if pin signal transitions from low to high.
Itt bármelyiket felengedik? Tovább megy.
*/
}while( buttons[C].rose() && buttons[Dur].rose()); // megvarom, mig elengedik a C vagy Dur gombot, addig nem lepek tovabb.
// itt mar elengedte a C-t vagy dur-t, kikuldom a noteOff-okat
MIDI.sendNoteOff( 48, 0, 1 );
MIDI.sendNoteOff( 52, 0, 1 );
MIDI.sendNoteOff( 55, 0, 1 );
}
// F dur
buttons[F].update();
buttons[Dur].update();
// Ha mindkettőt megnyomták?
// @brief Returns true if pin signal transitions from high to low.
if( buttons[F].fell()==LOW && buttons[Dur].fell()==LOW )
{
MIDI.sendNoteOn( 41, 100, 1 );
MIDI.sendNoteOn( 45, 100, 1 );
MIDI.sendNoteOn( 48, 100, 1 );
do{
buttons[F].update();
buttons[Dur].update();
/**
* @brief Returns true if pin signal transitions from low to high.
Itt bármelyiket felengedik? Tovább megy.
*/
}while(buttons[F].rose() && buttons[Dur].rose()); // megvarom, mig elengedik a F vagy Dur gombot, addig nem lepek tovabb.
MIDI.sendNoteOff( 41, 0, 1 );
MIDI.sendNoteOff( 45, 0, 1 );
MIDI.sendNoteOff( 48, 0, 1 );
}
} // loop
Ezt a bounce témát letöltöttem, de nincs benne telepíthető fájl. Mit csináljak vele?
Library fájlt sem látok benne, amit be tudnék tenni az Arduino könyvtárba.
Azért nem mondtam a működést, mert én sem értem igazán. Egy barátom segített példakódokkal, tömbvázlatokkal, úgy született meg. Úgy látom, nem lett a legoptimálisabb. Igaz, amire lett írva, ahhoz tökéletes.
A kíséret vezérlőben, minden akkordot külön megvizsgál. Azt feltételezi, hogy alaphelyzetben, magas szinten van a bemenet. "if"
Aztán jön az "else", ha mégsem magas szint, vagyis alacsony, akkor kiküldi az akkordokat. Aztán figyeli, hogy mikor lesz újra magas szint, akkor küldi a note off-okat.
Itt szerintem nem kellene figyelni, hanem alapértelmezetté tenni, hogy mind magas szinten van. Ha valamelyik változna, akkor küldeni a note on-t, ha újra változik, akkor note off.
Még nagyon kezdő vagyok az egészben, bocs, ha hülyeségeket írok.
Csak simán bekel másolni a ’Arduino\libraries\ -be.
Megkeresed. Az arduino a Beállításoknál felül kiírja.
Nálam itt van: c:\Users\Kapu48\Documents\Arduino189\libraries\Bounce2\
Értelemszerűen nálad más nevek lesznek.
Ezt rohadtul túl bonyolítottad!
Minek else ág? Ha a főágat nem is használod.
Az én változatom mintha egyszerűbb és átláthatóbb lenne.
Nálam a fő ágban van, ami nálad az else-ben lenne.
Megvizsgáljuk az esedékes gombokat, ha teljesülnek a feltételek?
Végrehajtjuk az if-ben levőket.
Ha nem, akkor megyünk tovább a következő if ágra … A hozzászólás módosítva: Jún 15, 2019
Így minden ágban csak az esedékes gombok neveit kel megváltoztatni.
Az if-ben és előtte a buttons[??].update();-ben
és a while-ben és előtte buttons[??].update();-ban.
Könnyen folytatni tudod a többi hang előállítását.
Ha akarod használni az egygombos vezérlést is, akkor értelemszerűen csak egy gomb feltételeit vizsgálod az if-ekben, és while-kben. (Bár szerintem ezen még agyalni kel! A hozzászólás módosítva: Jún 15, 2019
Ha olyan jók a gombjaid, mint ahogyan mondod?
Akkor leveheted a várakozások beállítását a 63. sorban: 5ms késést már a füled sem vesz észre.
buttons[i].interval(5); // interval in 5 ms
Szia!
Most volt időm foglalkozni vele újra, a belinkelt képen látható kóddal működik szépen. Végülis arról van szó, hogy felső állásban "0 = ON", középsőben "1 = ON", alsóban meg "2 = ON". A PC program pedig úgy veszi, mintha nyomva tartva lenne 1-1 gomb. De amikor váltok, előtte ki kell kapcsolni az előző állás gombját, a PC program logikája szerint ezt úgy lehet, hogy küldök még egy "ON" jelet az előző állásra.
A "first1" nem szép megoldás, csak amikor elindul a program, akkor még ugye nem kell kikapcsolni semmit. És a fenti logika miatt 2 "ON" jel futna be a programba, és borítja az egészet. Így meg felső állásban állnak a kapcsolók, amikor indítom a programot, tehát középre kapcsolva csak az "1 = ON"-t küldi ki elsőnek, onnantól meg megy minden, ahogy kell.
Szia
Na csak most jutottam ide. A könyvtár dolog OK. Feltöltöttem a programodat. Sajnos így sem jó, folyamatosan küldi a kódokat, gyorsan egymás után.
Szia!
Közben én átgondoltam az egészet. És rájöttem, hogy nem jók a feltétel vizsgálatok!
#include <MIDI.h>
// Include the Bounce2 library found here :
#include <Bounce2.h>
MIDI_CREATE_DEFAULT_INSTANCE();
// a 12 hang és 4 húr nyomogombjai:
/*
uint8_t As = 28; //A5;
uint8_t Es = 1;
uint8_t B = 3;
uint8_t F = 4;
uint8_t C = 5;
uint8_t G = 6;
uint8_t D = 7;
uint8_t A = 8;
uint8_t E = 9;
uint8_t H = 10;
uint8_t Fis = 11;
uint8_t Cis = 12;
uint8_t dur = 23; //A0;
uint8_t moll = 24; //A1;
uint8_t sept = 25; //A2;
uint8_t szuk = 26; //A3;
*/
#define LED_PIN 13
enum billentyuk {
// nevek felsorolása egyezzen a BUTTON_PINS tömb pin számozás sorrendel!
As = 0,
Es,
B,
F,
C,
G,
D,
A,
E,
H,
Fis,
Cis,
Dur,
Moll,
Sept,
Szuk
};
#define NUM_BUTTONS 16
// UNO Board Butons Pins értékek
const uint8_t BUTTON_PINS[NUM_BUTTONS] = {28, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 23, 24, 25, 26};
int ledState = LOW;
Bounce * buttons = new Bounce[NUM_BUTTONS];
void setup()
{
MIDI.begin(1);
for (int i = 0; i < NUM_BUTTONS; i++) {
buttons[i].attach( BUTTON_PINS[i] , INPUT_PULLUP ); //setup the bounce instance for the current button
//buttons[i].interval(25); // interval in 25ms
buttons[i].interval(5); // interval in 5ms
}
// Setup the LED :
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, ledState);
}
void loop()
{
// C dur
// lenyomtak a C-t és a dur-t
buttons[C].update();
buttons[Dur].update();
/**
@brief Returns true if pin signal transitions from high to low.
*/
if( buttons[C].fell()==HIGH && buttons[Dur].fell()==HIGH) // lenyomtak a C-t és a dur-t
{
MIDI.sendNoteOn( 48, 100, 1 ); // kikuldom a B-durnak megfelelo noteOn-okat
MIDI.sendNoteOn( 52, 100, 1 );
MIDI.sendNoteOn( 55, 100, 1 );
do{
buttons[C].update();
buttons[Dur].update();
/**
* @brief Returns true if pin signal transitions from low to high.
Itt bármelyiket felengedik? Tovább megy.
*/
}while( buttons[C].rose()==LOW && buttons[Dur].rose()==LOW); // megvarom, mig elengedik a C vagy Dur gombot, addig nem lepek tovabb.
// itt mar elengedte a C-t vagy dur-t, kikuldom a noteOff-okat
MIDI.sendNoteOff( 48, 0, 1 );
MIDI.sendNoteOff( 52, 0, 1 );
MIDI.sendNoteOff( 55, 0, 1 );
}
// F dur
buttons[F].update();
buttons[Dur].update();
// Ha mindkettőt megnyomták?
// @brief Returns true if pin signal transitions from high to low.
if( buttons[F].fell()==HIGH && buttons[Dur].fell()==HIGH )
{
MIDI.sendNoteOn( 41, 100, 1 );
MIDI.sendNoteOn( 45, 100, 1 );
MIDI.sendNoteOn( 48, 100, 1 );
do{
buttons[F].update();
buttons[Dur].update();
/**
* @brief Returns true if pin signal transitions from low to high.
Itt bármelyiket felengedik? Tovább megy.
*/
}while(buttons[F].rose()==LOW && buttons[Dur].rose()==LOW); // megvarom, mig elengedik a F vagy Dur gombot, addig nem lepek tovabb.
MIDI.sendNoteOff( 41, 0, 1 );
MIDI.sendNoteOff( 45, 0, 1 );
MIDI.sendNoteOff( 48, 0, 1 );
}
} // loop
Itt az újabb javítás.
Még én sem használtam ezt a Bounce2 libet.
Most teljesen más adatokat, de most is küldi folyamatosan. Először nem csinált semmit. Megfordítottam a HIGH és LOW értékeket, így küldi a kódokat, folyamatosan.
Azt gondoltam, egyszerűbb lesz megcsinálni. Gondolkodtam félvezetőkkel kivitelezni, de eléggé megdrágítaná és rengeteg dióda, meg tranzisztor kellene hozzá.
Akkor azt javaslom dobjuk ki a bounce könyvtárat!
És oldjuk meg hagyományos digitalRead-al.
Talán most jó lesz!
Ki szedtem a Bouncet.
#include <MIDI.h>
MIDI_CREATE_DEFAULT_INSTANCE();
// a 12 hang és 4 húr nyomogombjai:
/*
uint8_t As = 28; //A5;
uint8_t Es = 1;
uint8_t B = 3;
uint8_t F = 4;
uint8_t C = 5;
uint8_t G = 6;
uint8_t D = 7;
uint8_t A = 8;
uint8_t E = 9;
uint8_t H = 10;
uint8_t Fis = 11;
uint8_t Cis = 12;
uint8_t dur = 23; //A0;
uint8_t moll = 24; //A1;
uint8_t sept = 25; //A2;
uint8_t szuk = 26; //A3;
*/
#define LED_PIN 13
enum billentyuk {
// nevek felsorolása egyezzen a BUTTON_PINS tömb pin számozás sorrendel!
As = 0,
Es,
B,
F,
C,
G,
D,
A,
E,
H,
Fis,
Cis,
Dur,
Moll,
Sept,
Szuk
};
#define NUM_BUTTONS 16
// UNO Board Butons Pins értékek
const uint8_t BUTTON_PINS[NUM_BUTTONS] = {28, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 23, 24, 25, 26};
int ledState = LOW;
void setup()
{
MIDI.begin(1);
for (int i = 0; i < NUM_BUTTONS; i++) {
pinMode( BUTTON_PINS[i] , INPUT_PULLUP ); //setup the bounce instance for the current button
}
// Setup the LED :
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, ledState);
}
void loop()
{
// C dur
// lenyomtak a C-t és a dur-t
if( digitalRead(BUTTON_PINS[C])==HIGH && digitalRead(BUTTON_PINS[Dur])==HIGH) // lenyomtak a C-t és a dur-t
{
MIDI.sendNoteOn( 48, 100, 1 ); // kikuldom a B-durnak megfelelo noteOn-okat
MIDI.sendNoteOn( 52, 100, 1 );
MIDI.sendNoteOn( 55, 100, 1 );
do{
}while( digitalRead(BUTTON_PINS[C])==LOW && digitalRead(BUTTON_PINS[Dur])==LOW); // megvarom, mig elengedik a C vagy Dur gombot, addig nem lepek tovabb.
// itt mar elengedte a C-t vagy dur-t, kikuldom a noteOff-okat
MIDI.sendNoteOff( 48, 0, 1 );
MIDI.sendNoteOff( 52, 0, 1 );
MIDI.sendNoteOff( 55, 0, 1 );
}
// F dur
// Ha mindkettőt megnyomták?
if( digitalRead(BUTTON_PINS[F])==HIGH && digitalRead(BUTTON_PINS[Dur])==HIGH )
{
MIDI.sendNoteOn( 41, 100, 1 );
MIDI.sendNoteOn( 45, 100, 1 );
MIDI.sendNoteOn( 48, 100, 1 );
do{
// Itt bármelyiket felengedik? Tovább megy.
}while(digitalRead(BUTTON_PINS[F])==LOW && digitalRead(BUTTON_PINS[Dur])==LOW); // megvarom, mig elengedik a F vagy Dur gombot, addig nem lepek tovabb.
MIDI.sendNoteOff( 41, 0, 1 );
MIDI.sendNoteOff( 45, 0, 1 );
MIDI.sendNoteOff( 48, 0, 1 );
}
} // loop
Talán most jó lesz!
Ki szedtem a Bouncet.
#include <MIDI.h>
MIDI_CREATE_DEFAULT_INSTANCE();
// a 12 hang és 4 húr nyomogombjai:
/*
uint8_t As = 28; //A5;
uint8_t Es = 1;
uint8_t B = 3;
uint8_t F = 4;
uint8_t C = 5;
uint8_t G = 6;
uint8_t D = 7;
uint8_t A = 8;
uint8_t E = 9;
uint8_t H = 10;
uint8_t Fis = 11;
uint8_t Cis = 12;
uint8_t dur = 23; //A0;
uint8_t moll = 24; //A1;
uint8_t sept = 25; //A2;
uint8_t szuk = 26; //A3;
*/
#define LED_PIN 13
enum billentyuk {
// nevek felsorolása egyezzen a BUTTON_PINS tömb pin számozás sorrendel!
As = 0,
Es,
B,
F,
C,
G,
D,
A,
E,
H,
Fis,
Cis,
Dur,
Moll,
Sept,
Szuk
};
#define NUM_BUTTONS 16
// UNO Board Butons Pins értékek
const uint8_t BUTTON_PINS[NUM_BUTTONS] = {28, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 23, 24, 25, 26};
int ledState = LOW;
void setup()
{
MIDI.begin(1);
for (int i = 0; i < NUM_BUTTONS; i++) {
pinMode( BUTTON_PINS[i] , INPUT_PULLUP ); //setup the bounce instance for the current button
}
// Setup the LED :
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, ledState);
}
void loop()
{
// C dur
// lenyomtak a C-t és a dur-t
if( digitalRead(BUTTON_PINS[C])==HIGH && digitalRead(BUTTON_PINS[Dur])==HIGH) // lenyomtak a C-t és a dur-t
{
MIDI.sendNoteOn( 48, 100, 1 ); // kikuldom a B-durnak megfelelo noteOn-okat
MIDI.sendNoteOn( 52, 100, 1 );
MIDI.sendNoteOn( 55, 100, 1 );
do{
}while( digitalRead(BUTTON_PINS[C])==LOW && digitalRead(BUTTON_PINS[Dur])==LOW); // megvarom, mig elengedik a C vagy Dur gombot, addig nem lepek tovabb.
// itt mar elengedte a C-t vagy dur-t, kikuldom a noteOff-okat
MIDI.sendNoteOff( 48, 0, 1 );
MIDI.sendNoteOff( 52, 0, 1 );
MIDI.sendNoteOff( 55, 0, 1 );
}
// F dur
// Ha mindkettőt megnyomták?
if( digitalRead(BUTTON_PINS[F])==HIGH && digitalRead(BUTTON_PINS[Dur])==HIGH )
{
MIDI.sendNoteOn( 41, 100, 1 );
MIDI.sendNoteOn( 45, 100, 1 );
MIDI.sendNoteOn( 48, 100, 1 );
do{
// Itt bármelyiket felengedik? Tovább megy.
}while(digitalRead(BUTTON_PINS[F])==LOW && digitalRead(BUTTON_PINS[Dur])==LOW); // megvarom, mig elengedik a F vagy Dur gombot, addig nem lepek tovabb.
MIDI.sendNoteOff( 41, 0, 1 );
MIDI.sendNoteOff( 45, 0, 1 );
MIDI.sendNoteOff( 48, 0, 1 );
}
} // loop
Nálunk zivatar van, kiléptem. (Féltem a gépet a villámcsapástól!)
Szia
Sajnos így sem, folyamatosan küldi az akkordok kódjait.
Ezt nem értem!
Mit értesz folyamatos alatt?
Előbb talán azt kellene tisztázni, hogy a gombnyomásokra, hogyan reagál.
Van logikai analizátorod? Nagyon kellene látni milyen jelalakok, jönnek azoktól a Hal gomboktól. A hozzászólás módosítva: Jún 17, 2019
Ha megnyomod a gombokat, akkor lesznek LOW szinten, akkor kezdünk 1 akkordot.
Aztán amíg LOW-on maradnak addig várunk a while-ben.
Akkor minden feltétel vizsgálatnál a LOW-ot kel figyelni.
Még az elképzelhető, hogy nem folyamatos jelet kapsz a gomboktól.
Hanem csak impulzusokat. A hozzászólás módosítva: Jún 17, 2019
A folyamatos azt jelenti, hogy nem kell semmit nyomni, önállóan küldi a kódokat. Itt nem a prellezésről van szó, hanem az alap működésről.
Egyem a szívedet, én nem látom, hogy mi van nálad!
Olyan nehéz lenne leírnod, hogy amikor nyomod a gombot akkor szalad, vagy nem is kel őket nyomnod?
Szerintem már minden létező variációt kipróbáltunk.
Szóval jelalakot kellene nézni. Mert így csak vaktában lövöldözünk.
Ha ezek mátrixba kötött gombok, és multiplexelt a vezérlésük. Akkor mi itt rághatjuk a kefét csutkára.
Sziasztok !
Az én feladatom talán könnyebben orvosolható. Teljesen kezdő vagyok Arduino programozásban. A feladat - másoknak - biztosan egyszerű: 3 állású kapcsoló, (nem nyomógomb) egyenáramú motor H híddal meghajtva - 1. jobbra forog; 2. balra forog; 3. felváltva jobbra majd balra forog;
A HW egy Attiny85, USB-s. Arra gondoltam hogy 1 pin analóg beolvasás H, szint, L szint és 2.5 V szint.
Kettő digi kimenet a jobbra és balra forgáshoz. A kérdésem, hogy milyen programszerkezetet célszerű használni a beolvasáshoz ? (if.... , swith....case; stb.) A beolvasás ráér akár 10...20 másodpercenként is, mert lényegtelen, hogy mikor reagál az átkapcsolásra.
Előre is köszi !
Hát az a baj, hogy azok a portok számítógépeknek (jövőben) , illetve internetre vannak a helyeken, szal meg van a szerepük, erre a célra nem használhatom fel őket, de amúgy mindegy is, mert utóbb megtudtam, hogy ahol a mérleg van ott nincs is semmilyen csatlakozó, illetve oda úgyis be kell húzni kábelt.
Lehet , hogy ez lesz a végén, mármint egy app, ami induláskor indul és menti a megadott helyre, csak még kevés vagyok ehhez, pontosabban nem foglalkoztam ilyesmivel még eddig, de utána járok ennek a VB.NETnek, sokat hallottam már erről.  Köszi.
|
|