Změna - z tlačítka na nepřetržité vysílání

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
qdj
Příspěvky: 6
Registrován: 09 pro 2018, 06:52
Reputation: 0

Změna - z tlačítka na nepřetržité vysílání

Příspěvek od qdj » 20 bře 2020, 08:23

Zdravím,

níže přikládám program a mám k němu dotaz. Program funguje tak, že po stisknutí příslušného tlačítka vyvolá akci. Chtěl bych to změnit tak, aby tuto akci (např. na pinu 5 - "reanimation") prováděl automaticky ve smyčce každé 2 sekundy. Tlačítka zůstanou, ale mají sloužit pro změnu vysílaného signálu - zmáčknu tlačítko "5" a každé dvě sekundy se vysílá signál "reanimation" do nekonečna, zmáčknu "11" a každé dvě sekundy se vysílá signál "explode" do nekonečna.

Navíc to bylo zamýšleno pro fungování na akumulátor, takže je tam funkce "sleep" - ta tam již samozřejmě není zapotřebí (odstranit, nebo netřeba řešit?).

Děkuji za pomoc

#include <avr/sleep.h>
#include <SPI.h>

unsigned int i;
volatile boolean zakazInterupt;

void Probud()
{
if (!zakazInterupt)
{
zakazInterupt = true;
//Serial.println("Vstavam!");
delayMicroseconds(5000);
//nastavím je na 1 a budu je tlačítkem přerušovat, pokud by někdo stisknul více najednou provede se to s nejnižším číslem
if (digitalRead(5) == 0){ REANIMATION(); }
else if (digitalRead(11) == 0){ EXPLODE(); }
else {}
//Prikaz();
//Paticka();
//pro případ neustále drženého tlačítka je zde delay
}
}

void Uspi()
{
Serial.println("Jdu haji!");
delay(100);
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
zakazInterupt = false;
sleep_mode(); // here the device is actually put to sleep!!
// THE PROGRAM CONTINUES FROM HERE AFTER WAKING UP
sleep_disable(); // first thing after waking from sleep:
}

void Hlavicka()
{
i = 0;
while (i != 135)
{
asm("sbi 0x05,4"); //portb bit 0
//asm("sbi 0x0B,2");
delayMicroseconds(10);
asm("cbi 0x05,4");
//asm("cbi 0x0B,2");
delayMicroseconds(10);
i++;
}

delayMicroseconds(600);
}

void N()
{
i = 0;
while (i != 34)
{
asm("sbi 0x05,4"); //portb bit 0
//asm("sbi 0x0B,2");
delayMicroseconds(10);
asm("cbi 0x05,4");
//asm("cbi 0x0B,2");
delayMicroseconds(10);
i++;
}

delayMicroseconds(600);
}

void J()
{
i = 0;
while (i != 67)
{
asm("sbi 0x05,4"); //portb bit 0
//asm("sbi 0x0B,2");
delayMicroseconds(10);
asm("cbi 0x05,4");
//asm("cbi 0x0B,2");
delayMicroseconds(10);
i++;
}

delayMicroseconds(600);
}

/*void Paticka()
{ N();N();N();J();N();J();J();J(); }
//{ J();J();J();N();J();N();N();N(); }

void Prikaz()
{ J();J();N();N();N();N();N();J(); }
//{ J();N();N();N();N();N();J();J(); }*/

void REANIMATION(){ Hlavicka();J();N();N();N();N();N();J();J();N();N();N();N();N();J();N();N();J();J();J();N();J();N();N();N(); }
void EXPLODE(){ Hlavicka();J();N();N();N();N();N();J();J();N();N();N();N();J();N();J();J();J();J();J();N();J();N();N();N(); }


void setup()
{
//Initialize serial and wait for port to open:
Serial.begin(9600);
SPI.end();

attachInterrupt(digitalPinToInterrupt(2), Probud, FALLING);

pinMode(12, OUTPUT);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
pinMode(13, INPUT_PULLUP);

i = 0;
zakazInterupt = true;
Serial.println("START loop");
}

void loop()
{
delay(200);
Uspi();
}

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: luger a 17 hostů