Ošetření tlačítka v přerušení
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, ...)
Re: Ošetření tlačítka v přerušení
dostatečně zmateně ...
... ideálně ... hoď sem kód (okomentovaný), schéma zapojení ... a i třeba video stím co to dělá/nedělá není marný ... takhle budem všichni jenom hádat a tipovat.
... ideálně ... hoď sem kód (okomentovaný), schéma zapojení ... a i třeba video stím co to dělá/nedělá není marný ... takhle budem všichni jenom hádat a tipovat.
-
- Příspěvky: 67
- Registrován: 29 led 2020, 20:15
- Reputation: 0
Re: Ošetření tlačítka v přerušení
// rel.: 4.3.2020
// vysílač/terč HasTim6
#include <SPI.h>
#include <RH_RF22.h>
#include <avr/interrupt.h>
byte TERC = 4;
volatile bool PreruseniBylo = false;
// Singleton instance of the radio
RH_RF22 rf22;
void setup() {
pinMode (TERC,INPUT);
//sei();
Serial.begin(9600);
if (!rf22.init())
Serial.println("RF22 init failed"); // Defaults after init are 434.0MHz, 0.05MHz AFC pull-in, modulation FSK_Rb2_4Fd36
attachInterrupt (digitalPinToInterrupt(3), TercNasazenShozen, CHANGE);
Serial.println("Start pgm");
}
void loop()
{
if (PreruseniBylo == true) {
if (digitalRead(TERC)==1)
{ //uint8_t data[] = "Terč shozen";
// rf22.send(data, sizeof(data));
Serial.println("Terč shozen");
}
if (digitalRead(TERC)==0)
{ //uint8_t data[] = "Terč nasazen";
// rf22.send(data, sizeof(data));
Serial.println("Terč nasazen");
}
}
PreruseniBylo = false;
attachInterrupt (digitalPinToInterrupt(3), TercNasazenShozen, CHANGE);
}
void TercNasazenShozen()
{
detachInterrupt(digitalPinToInterrupt(3));
PreruseniBylo = true;
}
// vysílač/terč HasTim6
#include <SPI.h>
#include <RH_RF22.h>
#include <avr/interrupt.h>
byte TERC = 4;
volatile bool PreruseniBylo = false;
// Singleton instance of the radio
RH_RF22 rf22;
void setup() {
pinMode (TERC,INPUT);
//sei();
Serial.begin(9600);
if (!rf22.init())
Serial.println("RF22 init failed"); // Defaults after init are 434.0MHz, 0.05MHz AFC pull-in, modulation FSK_Rb2_4Fd36
attachInterrupt (digitalPinToInterrupt(3), TercNasazenShozen, CHANGE);
Serial.println("Start pgm");
}
void loop()
{
if (PreruseniBylo == true) {
if (digitalRead(TERC)==1)
{ //uint8_t data[] = "Terč shozen";
// rf22.send(data, sizeof(data));
Serial.println("Terč shozen");
}
if (digitalRead(TERC)==0)
{ //uint8_t data[] = "Terč nasazen";
// rf22.send(data, sizeof(data));
Serial.println("Terč nasazen");
}
}
PreruseniBylo = false;
attachInterrupt (digitalPinToInterrupt(3), TercNasazenShozen, CHANGE);
}
void TercNasazenShozen()
{
detachInterrupt(digitalPinToInterrupt(3));
PreruseniBylo = true;
}
Re: Ošetření tlačítka v přerušení
Nějak nepobírám to zapojení tlačítka. Proč jsou piny 3 a 4 spojené? V tom případě bude transmit generovat přerušení tlačítka. Asi je ale chyba ve schématu.
-
- Příspěvky: 67
- Registrován: 29 led 2020, 20:15
- Reputation: 0
Re: Ošetření tlačítka v přerušení
Potřebuji rozlišit, zda je tlačítko sepnuté nebo rozepnuté, proto to dělám přes vstup 4
Re: Ošetření tlačítka v přerušení
Špatně chápeš definici pinů a v tom případě to máš také špatně zapojené. Ty to připojuješ na fyzické čísla pinů čipu, pro tebe mají platit ty popisy pinů v rámečku desky UNA. Na Rx a Tx piny, neboli pin 0 a pin 1 nic nezapojuj, propojkou ti Tx pin vytváří ten interupt a na definovaném pinu 4 vlastně nemáš to tlačítko vůbec zapojené
-
- Příspěvky: 67
- Registrován: 29 led 2020, 20:15
- Reputation: 0
Re: Ošetření tlačítka v přerušení
Omlouvám se, ve schematu je chyba, spoje mají být posunuté o dva piny.
V zapojení na desce je to ovšem správně, jinak by nefungovalo nic.
V zapojení na desce je to ovšem správně, jinak by nefungovalo nic.
-
- Příspěvky: 67
- Registrován: 29 led 2020, 20:15
- Reputation: 0
Re: Ošetření tlačítka v přerušení
Dovolil jsem si ten kod dát do správného zobrazení
Jaká je kapacita C2?
Kód: Vybrat vše
// rel.: 4.3.2020
// vysílač/terč HasTim6
#include <SPI.h>
#include <RH_RF22.h>
#include <avr/interrupt.h>
byte TERC = 4;
volatile bool PreruseniBylo = false;
// Singleton instance of the radio
RH_RF22 rf22;
void setup() {
pinMode (TERC,INPUT);
//sei();
Serial.begin(9600);
if (!rf22.init())
Serial.println("RF22 init failed"); // Defaults after init are 434.0MHz, 0.05MHz AFC pull-in, modulation FSK_Rb2_4Fd36
attachInterrupt (digitalPinToInterrupt(3), TercNasazenShozen, CHANGE);
Serial.println("Start pgm");
}
void loop()
{
if (PreruseniBylo == true) {
if (digitalRead(TERC)==1)
{ //uint8_t data[] = "Terč shozen";
// rf22.send(data, sizeof(data));
Serial.println("Terč shozen");
}
if (digitalRead(TERC)==0)
{ //uint8_t data[] = "Terč nasazen";
// rf22.send(data, sizeof(data));
Serial.println("Terč nasazen");
}
}
PreruseniBylo = false;
attachInterrupt (digitalPinToInterrupt(3), TercNasazenShozen, CHANGE);
}
void TercNasazenShozen()
{
detachInterrupt(digitalPinToInterrupt(3));
PreruseniBylo = true;
}
-
- Příspěvky: 67
- Registrován: 29 led 2020, 20:15
- Reputation: 0
Re: Ošetření tlačítka v přerušení
1 mikro, při delších testech chybovost asi 5%.
Vzhledem k tomu, že se jedná o měření času v hasičských soutěžích, je třeba 100% spolehlivost.
Nevím, co by mi hasiči udělali, kdybych jim nezměřil čas.
Zkusím ještě spouštět magnetickým kontaktem, popř. použít KO s 40106
Vzhledem k tomu, že se jedná o měření času v hasičských soutěžích, je třeba 100% spolehlivost.
Nevím, co by mi hasiči udělali, kdybych jim nezměřil čas.
Zkusím ještě spouštět magnetickým kontaktem, popř. použít KO s 40106
Re: Ošetření tlačítka v přerušení
Mě se moc nepozdává to zapojení obvodu tlačítka. Při stisku natvrdo zkratuje C2, a ikdyž je to jen 1M, může to být docela problém. Zapojil bych rezistor cca 1k (max 2k) do série s tlačítkem. Časová konstanta při zapnutí bude 1ms (2ms), při vypnutí 10ms.
Nebo udělat opravdu bezzákmitové tlačítko s RS klopným obvodem, ale to pak musí mít přepínací kontakt.
Nebo udělat opravdu bezzákmitové tlačítko s RS klopným obvodem, ale to pak musí mít přepínací kontakt.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 11 hostů