Rada začátečníkovi , co místo while
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Rada začátečníkovi , co místo while
Ahoj, začínám se učit v programovat a nemůžu přijít na to, jak to jinak napsat, u funkce switch nejde napsat do hodnoty proměné TCRT < 124 a s while to také není možné.
while(TCRT < 124){
MIDI.sendControlChange(4, TCRT, 1);
}
potřebuji aby , když je TCRT < 124 , tak dokola posílalo MIDI.sendControlChange a funkci while ukončilo až po neplatnosti podmínky TCRT < 124 .
(
Jak to jinak napsat , jakou jinou funkci použít
děkuji moc za odpověď, snad jsem to napsal trochu srozumitelně.
Olda
while(TCRT < 124){
MIDI.sendControlChange(4, TCRT, 1);
}
potřebuji aby , když je TCRT < 124 , tak dokola posílalo MIDI.sendControlChange a funkci while ukončilo až po neplatnosti podmínky TCRT < 124 .
(
Jak to jinak napsat , jakou jinou funkci použít
děkuji moc za odpověď, snad jsem to napsal trochu srozumitelně.
Olda
Re: Rada začátečníkovi , co místo while
No, šlo by třeba použít
Záleží na tom, jak vypadá zbytek programu...
A nebo před funkcí switch ošetřit, že pokud je TCRT < 124 tak pomocná proměnná bude třeba 0.
Kód: Vybrat vše
if (TCRT < 124){
MIDI.sendControlChange(4, TCRT, 1);
}
A nebo před funkcí switch ošetřit, že pokud je TCRT < 124 tak pomocná proměnná bude třeba 0.
Kód: Vybrat vše
byte var;
if (TCRT < 124){
var=0;
}
else{
var=1;
}
switch (var) {
case 0:
MIDI.sendControlChange(4, TCRT, 1);
break;
default:
break;
}
Re: Rada začátečníkovi , co místo while
prosím, jde kontrolér stlačení pedálu k Hi Hat k bicím. Signál úderů na HiHat činel je řešen jiným zařízením-modulem elektronických bicích.
1. Když je TCRT 0-123 tak má jen posílat MIDI.sendControlChange(4, TCRT, 1);
2. a jak je TCRT 124-127 tak má JEDNOU ! poslat MIDI.sendNoteOn(21, 100, 1); a zároveň pořád posílat MIDI.sendControlChange
když zůstává TCRT 124-127 tak jen posílat pořád MIDI.sendControlChange
jak se TCRT změní na 0-123 , tak vyslat MIDI.sendNoteOn(23, 100, 1) a vrátit se k bodu jedna.
jde o to pořád vysílat MIDI.sendControlChange, což je poloha pedálu Hi Hat, ta je snímána potenciometrem a když se pedál stlačí na hodnotu CTRT 124-124 , tak vyslat midi notu MIDI.sendNoteOn(21, 100, 1) -to je zvuk zavřené HIHat, když je pořád zavřená, tak se vysílá jen poloha pedálu a když se pedál uvolní, tak vyslat zvuk otevírané HiHat MIDI.sendNoteOn(23, 100, 1).
Kód čtení hodnot TCRT funguje dobře i posílání midi.
kod je ca takový (nechal jsem pouze co funguje a While nefunguje a ani tam není ten další postup co mně taky nefungoval:
1. Když je TCRT 0-123 tak má jen posílat MIDI.sendControlChange(4, TCRT, 1);
2. a jak je TCRT 124-127 tak má JEDNOU ! poslat MIDI.sendNoteOn(21, 100, 1); a zároveň pořád posílat MIDI.sendControlChange
když zůstává TCRT 124-127 tak jen posílat pořád MIDI.sendControlChange
jak se TCRT změní na 0-123 , tak vyslat MIDI.sendNoteOn(23, 100, 1) a vrátit se k bodu jedna.
jde o to pořád vysílat MIDI.sendControlChange, což je poloha pedálu Hi Hat, ta je snímána potenciometrem a když se pedál stlačí na hodnotu CTRT 124-124 , tak vyslat midi notu MIDI.sendNoteOn(21, 100, 1) -to je zvuk zavřené HIHat, když je pořád zavřená, tak se vysílá jen poloha pedálu a když se pedál uvolní, tak vyslat zvuk otevírané HiHat MIDI.sendNoteOn(23, 100, 1).
Kód čtení hodnot TCRT funguje dobře i posílání midi.
kod je ca takový (nechal jsem pouze co funguje a While nefunguje a ani tam není ten další postup co mně taky nefungoval:
Kód: Vybrat vše
,
#include <MIDI.h>
MIDI_CREATE_DEFAULT_INSTANCE();
void setup() {
MIDI.begin(10);
}
void loop() {
int TCRT = analogRead(A0); //hi-hat pedal , proměnná CTRT na vstupu A0
TCRT = map(TCRT, 1030, 0, 0, 127); // změna rozsahu stupnice hodnoty CTRT
if (TCRT > 127) {
TCRT = 127;
}
if (TCRT < 0) {
TCRT = 0;
}
MIDI.sendControlChange(4, TCRT, 1);
/////////////////////// HIHAT PEDAL /////////////////////////
while(TCRT < 124){
MIDI.sendNoteOn(21, 100, 1);
MIDI.sendControlChange(4, TCRT, 1);
delay(100);
}
Re: Rada začátečníkovi , co místo while
Děkuji, ,ještě zkusím s tím switch, na který jsem už myslel, ale nějak nedomyslel, protože tam mám tolik podmínek.
Olda
Olda
Re: Rada začátečníkovi , co místo while
Předně je analog škála jen 1024 a ne 1030. Možná to nevadí, ale nemusí pak dobře odpov¦dat převedená škála. Inverzně ji máš předpokládám záměrně. Cyklus while vykonává VŠECHNY obsažené příkazy v každém průběhu, takž to co se má poslat nejdřív jednou, je třeba poslat podmínkou if před započetím while. Totéž při poklesu pod 123 a opuštění while. A návrat na bod 1 by měl znova začít posílat podle bodu 1. Sám si s arduinem hraju teprv týden, tak si to zkusím nejdřív napsat. Ale v principu by to mělo tak fungovat.
Re: Rada začátečníkovi , co místo while
Tak jsem se nad tím zamyslel ještě jednou a vzhledem k tomu,že nelze u analogového pedálu nijak ohlídat dobu po kterou bude hraniční hodnota platit může proběhnout několik cyklů a tón se bude posílat opakovaně. Vyšlo mi řešení s dvěma cykly for() kdy si střídají platnou proměnnou.
Kód:
Cykly zajistí ,že se tón pošle právě jednou při průchodu hraniční hodnotou a dokud se při průchodu druhou hraniční hodnotou nezmění proměnná tak se cyklus nespustí a tón se nezopakuje. Aspoň doufám. Jsem taky úplný zelenáč. Zkus si to pustit a bude se ti střídat levá a pravá dokola,protože tam nejsou další podmínky. Ty si podle svý potřeby doplň tam kde je to okomentovaný.
Kód:
Kód: Vybrat vše
int n = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
if(n < 1) { // tuhle podmínku si doplň o hraniční hodnotu jednoho tonu
for(n; n < 1; n++) {
//n = 1;
Serial.println("leva");
delay(500);
}
//n = 1;
}
else if(n > 0){ //tuhle o hraniční hodnotu druhého tónu
for(n; n > 0 ; n--) {
//n = 0;
Serial.println("prava");
delay(500);
}
//n = 0;
}
}
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host