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();
}
Změna - z tlačítka na nepřetržité vysílání
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.
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.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 11 hostů