Ovládání zvuku v divadle

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Odpovědět
batcom
Příspěvky: 2
Registrován: 01 kvě 2021, 11:11
Reputation: 0

Ovládání zvuku v divadle

Příspěvek od batcom » 01 kvě 2021, 11:51

Zdravím,
potřeboval bych pomoc vytvořit kód.
Situace: v divadle dělám zvukaře. Potřebuji aby mi zmáčknuté tlačitko na jevišti spustilo zadanou klávesu v PC ( zvukové studio ).
Příklad - herec u dveří zmáčkne tlačítko dá přes relé signál do Leonarda - ten zmáčkne v PC klávesu T nebo P a pustí se zvuk zvonku z PC . Protože je to na jeviště cca 30 metrů, tak mám připojený zdroj 24VDC ( kvůli odporu kabelu - 5V by asi signál nezvládl ),
který pošle přes tlačítko signál do polovodičového relé. Z relé přes výstup NO pošlu signál do desky Leonardo . Mám dvě tlačítka - takže dva vstupy.
Potebuji spustit jedním tlačítkem klávesu T , druhým klávesu P . Klávesa T - pin 2 , klávesa P - pin 3 .
Potřebuji ale aby mi šli zvuky pustit i společně. Zkoušel jsem nějaké hotové programy, ale ty mají zásadní chybu. Je tam delay, zmáčknutí klávesy se při malém delay opakuje , při velkém delay se zas klávesa zaznamená se zpožděním.
Já potřebuji vstup delay IN - max 10 ms - klávesa se musí zmáčknout hned a jen jednou - aby zvuk nejel opakovaně. To znamená Impulz na hranu - i kdyby herec držel tlačítko 3 sekundy - zvuk to pořád pustí jen jeden.
Můžete mi prosím někdo pomoct???
Děkuji
ImageXXX.jpeg
Toto jsem zkoušel, ale není to dobré:

Kód: Vybrat vše

#include <Keyboard.h>


void setup()
{
  Serial.begin(9600);
  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  Keyboard.begin();
}

void loop()
{
  if (digitalRead(2) == LOW)
  {
    Keyboard.write('T'); // send a 'T' to the computer via Keyboard HID 
    delay(1000);  // delay so there aren't a kajillion z's
    }
    if (digitalRead(3) == LOW)
  
    Keyboard.write('P'); // send a 'P' to the computer via Keyboard HID 
    delay(1000);  // delay so there aren't a kajillion z's
Keyboard.end();
    }

Uživatelský avatar
gilhad
Příspěvky: 595
Registrován: 07 bře 2018, 11:22
Reputation: 5

Re: Ovládání zvuku v divadle

Příspěvek od gilhad » 01 kvě 2021, 15:47

https://www.arduino.cc/en/Tutorial/Buil ... thoutDelay

takhle muzes v loop v pohode mit tech vstupu a vystupu bambilion a navzajem se neblokujou

obecne postup
- jakmile je tlacitko stisknuto (LOW) tak vis, ze i kdyz treba jeste zakmitava, tak stisknute bylo - tedy akci muzes spustit okamzite, az pak cekat na debounce tlacitka
- az uplyne debounce tlacitka, tak budes cekat na jeho pusteni (tedy HIGH) pak tam das zase debounce a pak povolist spusteni akce
- kdyz to budes delat prez millis, nikoli delay, tak to muzes naflakat za sebe do loop a bude to reagovat ihned

Pseudo kod (nechce se mi myslet a ladit to bez arduina, tak si to dolad sam)

Kód: Vybrat vše

#define Pin_T 2
#define Pin_P 3

unsigned long T_millis, P_millis; // rovno nule
bool T_state, T_enabled, P_state, P_enabled;

unsigned long debounce=1000; // 1 sec = 1000 millis


void setup()
{
// ...
// stavajici kod plus niva inicializace
T_state=UP;
T_enabled=TRUE;
P_state=UP;
P_enabled=TRUE;
}


void loop() {
	unsigned long now=millis(); // staci mi jeden rozhodny okamzik
	bool state; // sem dam stav tlacitka, at ho ctu jen jednou a nemuze mi v pulce rozhodovani zakmitnout
	
	// T
	state=digitalRead(Pin_T);
	if ( !T_enabled && (now - T_millis > debounce)) { // pokud debounce dobehl,tak nastavim Enabled
		T_enabled=TRUE;
		};
	if (T_enabled && (T_state != state) ) { // zmena (jiny stav) po debouncu = hrana vzestupna/sestupna
		T_state = state;
		T_enabled=FALSE; // debouncujeme ...
		T_milis=now; // ... od ted
		if (T_state==LOW) { // sem se dostameme jen jednou pri stisknuti, pak uz plati T_state==state a cely blok se preskoci (dokud nedojde ke zmene a ta pak musi byt na HIGH, vic moznosti neni)
			Keyboard.write('T');
		};
	};

	// P
	state=digitalRead(Pin_P);
	if ( !P_enabled && (now - P_millis > debounce)) {
		P_enabled=TRUE;
		};
	if (P_enabled && (P_state != state) ) { // hrana
		P_state = state;
		P_enabled=FALSE;
		P_milis=now;
		if (P_state==LOW) {
			Keyboard.write('P');
		};
	};

}


batcom
Příspěvky: 2
Registrován: 01 kvě 2021, 11:11
Reputation: 0

Re: Ovládání zvuku v divadle

Příspěvek od batcom » 01 kvě 2021, 16:50

Ahoj, díky... ale ten kód si sám neopravím. Nemám s tím žádné zkušenosti. Vše dělám přes klasické PLC ( většinou Omron nebo malé aplikace SE - zelio ) , ale PLC nespojím jako keyboard. A je to moc velké. Arduino se mi zdálo na toto super.
Proto jsem si Arduino koupil , abych to nějak dokázal, ale v práci fakt v automatizaci pracuji s něčím jiným.
Tento projekt mám do divadla, tak si to chci nějak "rozjet" , ale bez pomoci to nedám.
Můžeš mi s tím prosím pomoct.
Dostaneš lístek do divadla :)
Díky

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 6 hostů