Stránka 11 z 27
Re: Mini CNC osa Z
Napsal: 23 srp 2019, 19:44
od Hanz
s velkou radostí Vás všechny zdravím a hned na začátek Super zpráva - sketch, který vrtí servem nastavený čas 30 sekund je plně funkční ! Pánové gilhad a kiRRow měli pravdu, že mám zkusit definovat buttonTime. No zkusil jsem tohle :
Kód: Vybrat vše
/* TADY PRAVE PRETEKL CAS ?! */
long buttonTime = -15001; // čas začátku stisknutí tlačítka tj. začátek vrtění serva
Po nahrátí do Arduina se servo nastaví do polohy 0, zároveň se rožne Ledka co signalizuje, že se servo nevrtí a čeká se na stisk tlačítka. Tlačítko dá povel k vrtění serva nastavený čas 30s. Pak se zastaví v poloze zrovna tam, kde je. Po opětovném stisknutí tlačítka se vrtí 30s a cyklus se opakuje. Tady je celý sketch :
Kód: Vybrat vše
#include <Servo.h> // zahrnutí knihovny pro ovládání servo motoru
Servo myservo; // každý motor má svou instanci třídy Servo
int buttonPin = 3; // číslo pinu tlačítka
int pos = 0; // proměnná obsahující pozici motoru (úhel natočení)
int buttonState; // nejnovější hodnota načtená ze vstupního pinu tlačítka
int lastButtonState = LOW; // předchozí hodnota načtení ze vstupního pinu tlačítka
int reading; // stav tlacitka
int step = 1; // ukládá se do ní hodnotu jednoho kroku serva
int Led1 = 10; // číslo pinu Led1
int Led2 = 11; // číslo pinu Led2
int Led = 12; // číslo pinu Led
// Následné proměnné jsou typu long, jelikož čas měřený v milisekundách se
//rychle změní na větší číslo, jež nemůže být uloženo v int
long lastDebounceTime = 0; // čas posledního změny výstupního pinu
long debounceDelay = 50; // čas debounce prodlevy
/* TADY PRAVE PRETEKL CAS ?! */
long buttonTime = -15001; // čas začátku stisknutí tlačítka tj. začátek vrtění serva
void setup() {
myservo.attach(9); // servo je připojeno na pin 9
pinMode(buttonPin, INPUT); // nastavení tlačítka jako vstup
myservo.write(pos); // nastavení počátečního stavu serva
pinMode(Led1, OUTPUT); // nastavení Led1 jako výstup
pinMode(Led2, OUTPUT); // nastavení Led2 jako výstup
pinMode(Led, OUTPUT); // nastavení Led jako výstup
}
void loop() {
/*TOHLE JE ZAČÁTEK BLOKU KDE OŠETŘUJI TLAČÍTKO*/
reading = digitalRead(buttonPin);
if (reading != lastButtonState) { // kmita to, od minule se to zmenilo, zacnu debounce cas pocitat znovu (tedy od posledni zmeny, ktera je ted)
lastDebounceTime = millis();
}
lastButtonState = reading; // tady si to ulozim, v dalsim pruchodu loop() to zase porovnam s novym reading, zda se to mezi tim nezmenilo
if ((millis() - lastDebounceTime) > debounceDelay) { // jo, uz se to dlouho nezmenilo, tak je to stabilni a spravna hodnota
if (reading != buttonState) { // Pokud se stav tlačítka změnil
/*TADY SE ZAČÍNAJÍ DÍT VĚCI PŘI STISKNUTÍ/PUŠTĚNÍ TLAČÍTKA, NÁSLEDNĚ SE VYUŽIJÍ POZDĚJI V PROGRAMU*/
buttonState = reading; // zapamatuju si novy stav
}
}
/*TOHLE JE KONEC BLOKU KDE OŠETŘUJI TLAČÍTKO*/
/*TOHLE JE ZAČÁTEK BLOKU KDE NA ZÁKLADĚ DŘÍVE ZJIŠTĚNÝCH INFORMACÍ OBSLUHUJI SERVO*/
// a tady (treba) budu neco delat
if (buttonState == HIGH) { // je stisknuto tlačítko??
buttonTime = millis(); // příkazy, které si zapamatují čas, kdy bylo tlačítko stisknuto
}
/* podmínka = od toho času, kdy bylo tlačítko stisknuto, uběhlo méně než 30000ms ??
(Pokud ano, udělej jeden cykl, pokud ne, ukonči cyklování a pokračuj dále v programu) */
while (millis() - buttonTime <= 15000) { // podmínka
digitalWrite(Led,LOW); // Led nesvítí Servo se vrtí
/*TADY SE KONTROLUJE KRAJNÍ POZICE MOTORU*/
if (pos <= 0) { // zkontroluji si jestli je pozice 0 nebo méně
step = 2; // nastavím step na 1 (TOHLE JE ZMĚNA SMĚRU
}
if (pos >= 180) { // zkontroluji si jestli je pozice 180 nebo více
step = -2; // nastavím step na -1 (TOHLE JE ZMĚNA SMĚRU)
}
/*TADY KONČÍ KONTROLA POZICE*/
/*TADY SE OBSLUHUJE SERVO*/
pos += step; // k pozici motoru přičtu step (TA JE BUĎ 1 A POS SE ZVYŠUJE, NEBO -1 A POS SE SNIŽUJE)
digitalWrite(Led1,pos>=175);
digitalWrite(Led2,pos<=5);
myservo.write(pos); // nastavení serva na pozici
delay(10); // nějaký ten delay, aby se to stihlo natočit
/*KONEC OBSLUHY SERVA*/
}
digitalWrite(Led,HIGH); // Led svítí Servo stojí
}
obrovské díky pro gilhad a kiRRow
a s číslem u step jsem si samozřejmě hrál taky, servo se vrtí rychleji
Re: Mini CNC osa Z
Napsal: 26 srp 2019, 15:25
od Hanz
zdravím všechny, k poslednímu sketchi jsem natočil video. Je zde názorně vidět, že při nahrátí do Arduina, resetování a zapnutí napětí se servo natočí do pozice 0 a setrvává v něm do stisknutí tlačítka, pak se vrtí nastavených čas v mojem případě 30sekund. Pak zase čeká na stisnutí tlačítka.
Tady je odkaz :
https://www.youtube.com/watch?v=j6Ks987 ... e=youtu.be
Re: Mini CNC osa Z
Napsal: 26 srp 2019, 19:36
od Hanz
zdravím, prosím můžete mi vysvětlit proč sketch, který jsem uvedl viz.výše a vrtí servem 30 sekund, po přidání Led3 se změní a vrtí servem jen nastavených 15000 ms ? vyzkoušel jsem i další časy. Když jsem dal buttonTime -30000, a do podmínky 20000, tak servo se vrtělo 20s. pokud buttonTime -15000, a do podmínky 15000, tak servo se vrtělo 15s. Co jsem provedl, že se čas změnil ?
změna :
Kód: Vybrat vše
if (buttonState == HIGH) {
digitalWrite(8,reading); // pokud je zaznamenán stisk tlačítka, rozsviť Led3
}
if (buttonState == LOW) {
digitalWrite(8,reading); // pokud není, zhasni Led3
}
celý sketch
Kód: Vybrat vše
// TED SE SERVO VRTI JEN NASTAVENY CAS TJ 15000 MILISEKUND ! PROC ???
// přidat Led3 pro signalizaci stisknutí tlačítka vrtění serva
#include <Servo.h> // zahrnutí knihovny pro ovládání servo motoru
Servo myservo; // každý motor má svou instanci třídy Servo
int buttonPin = 3; // číslo pinu tlačítka
int pos = 0; // proměnná obsahující pozici motoru (úhel natočení)
int buttonState; // nejnovější hodnota načtená ze vstupního pinu tlačítka
int lastButtonState = LOW; // předchozí hodnota načtení ze vstupního pinu tlačítka
int reading; // stav tlacitka
int step = 1; // ukládá se do ní hodnotu jednoho kroku serva
int Led1 = 10; // číslo pinu Led1
int Led2 = 11; // číslo pinu Led2
int Led = 12; // číslo pinu Led
int Led3 = 8; // číslo pinu Led3
// Následné proměnné jsou typu long, jelikož čas měřený v milisekundách se
//rychle změní na větší číslo, jež nemůže být uloženo v int
long lastDebounceTime = 0; // čas posledního změny výstupního pinu
long debounceDelay = 50; // čas debounce prodlevy
/* TADY PRAVE PRETEKL CAS ?! */
long buttonTime = -15001; // čas začátku stisknutí tlačítka tj. začátek vrtění serva
void setup() {
myservo.attach(9); // servo je připojeno na pin 9
pinMode(buttonPin, INPUT); // nastavení tlačítka jako vstup
myservo.write(pos); // nastavení počátečního stavu serva
pinMode(Led1, OUTPUT); // nastavení Led1 jako výstup
pinMode(Led2, OUTPUT); // nastavení Led2 jako výstup
pinMode(Led, OUTPUT); // nastavení Led jako výstup
pinMode(Led3, OUTPUT); // nastavení Led1 jako výstup
}
void loop() {
/*TOHLE JE ZAČÁTEK BLOKU KDE OŠETŘUJI TLAČÍTKO*/
reading = digitalRead(buttonPin);
if (reading != lastButtonState) { // kmita to, od minule se to zmenilo, zacnu debounce cas pocitat znovu (tedy od posledni zmeny, ktera je ted)
lastDebounceTime = millis();
}
lastButtonState = reading; // tady si to ulozim, v dalsim pruchodu loop() to zase porovnam s novym reading, zda se to mezi tim nezmenilo
if ((millis() - lastDebounceTime) > debounceDelay) { // jo, uz se to dlouho nezmenilo, tak je to stabilni a spravna hodnota
if (reading != buttonState) { // Pokud se stav tlačítka změnil
/*TADY SE ZAČÍNAJÍ DÍT VĚCI PŘI STISKNUTÍ/PUŠTĚNÍ TLAČÍTKA, NÁSLEDNĚ SE VYUŽIJÍ POZDĚJI V PROGRAMU*/
buttonState = reading; // zapamatuju si novy stav tlačítka
if (buttonState == HIGH) {
digitalWrite(8,reading); // pokud je zaznamenán stisk tlačítka, rozsviť Led3
}
if (buttonState == LOW) {
digitalWrite(8,reading); // pokud není, zhasni Led3
}
}
/*TOHLE JE KONEC BLOKU KDE OŠETŘUJI TLAČÍTKO*/
/*TOHLE JE ZAČÁTEK BLOKU KDE NA ZÁKLADĚ DŘÍVE ZJIŠTĚNÝCH INFORMACÍ OBSLUHUJI SERVO*/
// a tady (treba) budu neco delat
if (buttonState == HIGH) { // je stisknuto tlačítko??
buttonTime = millis(); // příkazy, které si zapamatují čas, kdy bylo tlačítko stisknuto
}
/* podmínka = od toho času, kdy bylo tlačítko stisknuto, uběhlo méně než 30000ms ??
(Pokud ano, udělej jeden cykl, pokud ne, ukonči cyklování a pokračuj dále v programu) */
while (millis() - buttonTime <= 15000) { // podmínka
digitalWrite(Led,LOW); // Led nesvítí Servo se vrtí
/*TADY SE KONTROLUJE KRAJNÍ POZICE MOTORU*/
if (pos <= 0) { // zkontroluji si jestli je pozice 0 nebo méně
step = 2; // nastavím step na 1 (TOHLE JE ZMĚNA SMĚRU
}
if (pos >= 180) { // zkontroluji si jestli je pozice 180 nebo více
step = -2; // nastavím step na -1 (TOHLE JE ZMĚNA SMĚRU)
}
/*TADY KONČÍ KONTROLA POZICE*/
/*TADY SE OBSLUHUJE SERVO*/
pos += step; // k pozici motoru přičtu step (TA JE BUĎ 1 A POS SE ZVYŠUJE, NEBO -1 A POS SE SNIŽUJE)
digitalWrite(Led1,pos>=175);
digitalWrite(Led2,pos<=5);
myservo.write(pos); // nastavení serva na pozici
delay(10); // nějaký ten delay, aby se to stihlo natočit
/*KONEC OBSLUHY SERVA*/
}
digitalWrite(Led,HIGH); // Led svítí Servo stojí
}
}
Re: Mini CNC osa Z
Napsal: 27 srp 2019, 16:15
od kiRRow
Máš binec ve složených závorkách. Ta předposlední je na špatném místě.
... to je tak, když si neděláš pořádek v kódu.
Re: Mini CNC osa Z
Napsal: 27 srp 2019, 17:49
od Hanz
teď si vzpomínám, že při kompilaci jsem jednu složenou závorku přidával, tak už tady jsem chyboval
A to si psaní kodů snažím hlídat, když kliknu na závorku v IDE, tak mi ukáže, kde je druhá polovička, nebo ji při psaní hned napíše - docela dobrá vychytávka. Měřil jsem čas a takhle to je správně :
Kód: Vybrat vše
#include <Servo.h> // zahrnutí knihovny pro ovládání servo motoru
Servo myservo; // každý motor má svou instanci třídy Servo
int buttonPin = 3; // číslo pinu tlačítka
int pos = 0; // proměnná obsahující pozici motoru (úhel natočení)
int buttonState; // nejnovější hodnota načtená ze vstupního pinu tlačítka
int lastButtonState = LOW; // předchozí hodnota načtení ze vstupního pinu tlačítka
int reading; // stav tlacitka
int step = 1; // ukládá se do ní hodnotu jednoho kroku serva
int Led1 = 10; // číslo pinu Led1
int Led2 = 11; // číslo pinu Led2
int Led = 12; // číslo pinu Led
int Led3 = 8; // číslo pinu Led3
// Následné proměnné jsou typu long, jelikož čas měřený v milisekundách se
//rychle změní na větší číslo, jež nemůže být uloženo v int
long lastDebounceTime = 0; // čas posledního změny výstupního pinu
long debounceDelay = 50; // čas debounce prodlevy
/* TADY PRAVE PRETEKL CAS ?! */
long buttonTime = -15001; // čas začátku stisknutí tlačítka tj. začátek vrtění serva
void setup() {
myservo.attach(9); // servo je připojeno na pin 9
pinMode(buttonPin, INPUT); // nastavení tlačítka jako vstup
myservo.write(pos); // nastavení počátečního stavu serva
pinMode(Led1, OUTPUT); // nastavení Led1 jako výstup
pinMode(Led2, OUTPUT); // nastavení Led2 jako výstup
pinMode(Led, OUTPUT); // nastavení Led jako výstup
pinMode(Led3, OUTPUT); // nastavení Led1 jako výstup
}
void loop() {
/*TOHLE JE ZAČÁTEK BLOKU KDE OŠETŘUJI TLAČÍTKO*/
reading = digitalRead(buttonPin);
if (reading != lastButtonState) { // kmita to, od minule se to zmenilo, zacnu debounce cas pocitat znovu (tedy od posledni zmeny, ktera je ted)
lastDebounceTime = millis();
}
lastButtonState = reading; // tady si to ulozim, v dalsim pruchodu loop() to zase porovnam s novym reading, zda se to mezi tim nezmenilo
if ((millis() - lastDebounceTime) > debounceDelay) { // jo, uz se to dlouho nezmenilo, tak je to stabilni a spravna hodnota
if (reading != buttonState) { // Pokud se stav tlačítka změnil
/*TADY SE ZAČÍNAJÍ DÍT VĚCI PŘI STISKNUTÍ/PUŠTĚNÍ TLAČÍTKA, NÁSLEDNĚ SE VYUŽIJÍ POZDĚJI V PROGRAMU*/
buttonState = reading; // zapamatuju si novy stav tlačítka
if (buttonState == HIGH) {
digitalWrite(8,reading); // pokud je zaznamenán stisk tlačítka, rozsviť Led3
}
if (buttonState == LOW) {
digitalWrite(8,reading); // pokud není, zhasni Led3
}
}
}
/*TOHLE JE KONEC BLOKU KDE OŠETŘUJI TLAČÍTKO*/
/*TOHLE JE ZAČÁTEK BLOKU KDE NA ZÁKLADĚ DŘÍVE ZJIŠTĚNÝCH INFORMACÍ OBSLUHUJI SERVO*/
// a tady (treba) budu neco delat
if (buttonState == HIGH) { // je stisknuto tlačítko??
buttonTime = millis(); // příkazy, které si zapamatují čas, kdy bylo tlačítko stisknuto
}
/* podmínka = od toho času, kdy bylo tlačítko stisknuto, uběhlo méně než 30000ms ??
(Pokud ano, udělej jeden cykl, pokud ne, ukonči cyklování a pokračuj dále v programu) */
while (millis() - buttonTime <= 15000) { // podmínka
digitalWrite(Led,LOW); // Led nesvítí Servo se vrtí
/*TADY SE KONTROLUJE KRAJNÍ POZICE MOTORU*/
if (pos <= 0) { // zkontroluji si jestli je pozice 0 nebo méně
step = 2; // nastavím step na 1 (TOHLE JE ZMĚNA SMĚRU
}
if (pos >= 180) { // zkontroluji si jestli je pozice 180 nebo více
step = -2; // nastavím step na -1 (TOHLE JE ZMĚNA SMĚRU)
}
/*TADY KONČÍ KONTROLA POZICE*/
/*TADY SE OBSLUHUJE SERVO*/
pos += step; // k pozici motoru přičtu step (TA JE BUĎ 1 A POS SE ZVYŠUJE, NEBO -1 A POS SE SNIŽUJE)
digitalWrite(Led1,pos>=175);
digitalWrite(Led2,pos<=5);
myservo.write(pos); // nastavení serva na pozici
delay(10); // nějaký ten delay, aby se to stihlo natočit
/*KONEC OBSLUHY SERVA*/
}
digitalWrite(Led,HIGH); // Led svítí Servo stojí
}
Re: Mini CNC osa Z
Napsal: 27 srp 2019, 18:20
od kiRRow
jsou i vychytanější editory než arduinoIDE ... koukni jak vypadá tvůj kód ve visual studio code
https://ctrlv.cz/QjwM mírně upraveno v malování
Re: Mini CNC osa Z
Napsal: 04 zář 2019, 16:32
od Hanz
zdravím, pánové prosím mám nějaký problém se servama a to hned se dvěma /ozačení Tower Pro Micro Servo 9g SG90/, po načtení do Arduina se nechcou vrtět. Arduino jsem přehodil za jiné a výsledek je stejný, nahrál jsem i jiný sketch / blink /, jinou šňůru, restartoval IDE a taky PC. Jak můžu vyzkoušet servo bez servotesteru ? A jak se mohla porouchat hned 2 serva najednou ? Je to možné nastavením vrtění ? od pozice 0 do pozice 180 ? pak Arduino bylo připojeno stále na usb k pc.
díky za odpovědi
Re: Mini CNC osa Z
Napsal: 23 zář 2019, 08:56
od Hanz
dobrý den pánové, se servy jsem to vyřešil tak, že jsem koupil nové, protože se zničily - no co už jsou z číny.
Ale mám jiný problém a nechci zakládat nové vlákno.
V rámci učení se, jsem v tomto sketchi, který tlačítkem přepíná varianty blikání Led, jsem přidal pomalé blikání Led
a potom střídavé blikání Led.
Problém je , že když stisknu tlačítko po střídavém blikání, tak má následovat zhasnutí Led tj. mod == 0. Ale musím stisknout tlačítko někdy i několikrát.
Mám přidání blikání napsáno dobře ? Když jsem zkoušel napsat jinak, vždycky mi sketch po nahrání začal střídavě blikat. ?! Nepatří tam ještě další podmínka ? Nebo by stačilo ošetřit tlačítko proti debouce ? Tady jsem zvýšil čas z 200ms na 300ms
Originál tady:
https://arduino8.webnode.cz/news/lekce- ... 661472/10/
Můj upravený sketch :
Kód: Vybrat vše
int Tlacitko = 7; // tlacitko na pinu 7
int Led1 = 10; // Led 1 na pinu 10
int Led2 = 11; // Led 2 na pinu 11
boolean Svetla = false;
boolean Blik = true;
boolean Blik2 = true;
boolean Svetla1 = true;
int mode = 0; //(0 - Vypnuto, 1 - Zapnuto, 2 - Blikání rychlé, 3 - Blikání pomalé, 4 - Blikání střídavé
long posledniBlik = 0; // promenná pro počet milisekund pri poslednim bliku (pomale blikání)
long posledniBlik2 = 0;
void setup() {
pinMode(Led1, OUTPUT); // nastaví vystup u Led 1 na výstup
pinMode(Led2, OUTPUT); // nastaví vystup u Led 2 na výstup
pinMode(Tlacitko, INPUT); // nastaví pin kde je připojeno tlačítko jako výstup
digitalWrite(Tlacitko,HIGH); // zapnutí pullup rezistoru, aby jsme k tlačítku
// nemuseli přidávat rezistor. Tlačítko je tedy připojeno ke GND a pinu 7 !!!!!!
// Při vypnutém tlačítku vnitřní pullup rezistor připojujuje k +5V.
}
void loop() {
// zapne nebo vypne LED v závislosti na stavu proměné Svetla
digitalWrite(Led1, Svetla);
digitalWrite(Led2, Svetla);
// když je na vstupu Tlačítka logická 0 (LOW)
// !!! není spínálo log. 1, protože využíváme tzv. pulldown rezistoru v čipu
if ((digitalRead(Tlacitko)) == LOW)
{
mode++; // přičte k MODE hodnotu 1
if (mode > 4) mode = 0; // když je mode větší jak 4 tak ho vynuluj
delay(400); // prodleva proti záchvěvům tlačítka
}
if (mode == 0) Svetla = 0; //Vypni světla
if (mode == 1) Svetla = 1; //Zapni světla
if (mode == 2) Svetla = Blik; // rychlé blikání Led
if (mode == 3) Svetla = Blik2; // pomalé blikání Led
if (mode == 4) Svetla = Svetla1; // střídavé blikání
// časovač pro blikání *********************************************
if ((millis() - posledniBlik) > 200) // když celkový počet milisekund
// minus počet milisekund při poslednim "bliku" je vetši jak 400
// tady můžete nastavit rychlost blikání v počtu milisekund
{
Blik = !Blik; // Blik se rovná negaci Blik (neguje proměnou)
posledniBlik = millis(); // zapiš poslední blik
}
// časovač 2 pro blikání ********************************
if ((millis() - posledniBlik2) > 1000)
{
Blik2 = !Blik2;
posledniBlik2 = millis();
}
// tady to není 100% přepnutí zpátky od začátku !!!
// časovač 3 pro blikání ********************************
if (mode == 4)
{
digitalWrite(Led1,HIGH);
digitalWrite(Led2,LOW);
delay (500);
digitalWrite(Led1,LOW);
digitalWrite(Led2,HIGH);
delay (500);
}
if (mode > 4)Svetla = 0;
}
Děkuji za rady
Re: Mini CNC osa Z
Napsal: 23 zář 2019, 15:59
od kiRRow
Problém je v tom, že při střídavém blikání používáš delay. V momentě kdy procesor vykonává delay, nemůže dělat nic jiného. Proto ignoruje stisky tlačítka.
Re: Mini CNC osa Z
Napsal: 26 zář 2019, 17:34
od Hanz
díky kiRRow, zkusil jsem tohle, ale nemůžu se pohnout, nemůžu přijít na podmínku, která spustí střídavé blikání ?
Kód: Vybrat vše
int Tlacitko = 7; // tlacitko na pinu 7
int Led1 = 10; // Led 1 na pinu 10
int Led2 = 11; // Led 2 na pinu 11
boolean Svetla = false;
boolean Blik = true;
boolean Blik2 = true;
boolean Blik3 = true;
int mode = 0; //(0 - Vypnuto, 1 - Zapnuto, 2 - Blikání rychlé, 3 - Blikání pomalé, 4 - Blikání střídavé
long posledniBlik = 0; // promenná pro počet milisekund pri poslednim bliku (pomale blikání)
long posledniBlik2 = 0;
unsigned long lastMillis1;
unsigned long lastMillis2;
int intervalLed = 500;
void setup() {
pinMode(Led1, OUTPUT); // nastaví vystup u Led 1 na výstup
pinMode(Led2, OUTPUT); // nastaví vystup u Led 2 na výstup
lastMillis1 = millis();
lastMillis2 = millis();
pinMode(Tlacitko, INPUT); // nastaví pin kde je připojeno tlačítko jako výstup
digitalWrite(Tlacitko,HIGH); // zapnutí pullup rezistoru, aby jsme k tlačítku
// nemuseli přidávat rezistor. Tlačítko je tedy připojeno ke GND a pinu 7 !!!!!!
// Při vypnutém tlačítku vnitřní pullup rezistor připojujuje k +5V.
}
void loop() {
// zapne nebo vypne LED v závislosti na stavu proměné Svetla
digitalWrite(Led1, Svetla);
digitalWrite(Led2, Svetla);
// když je na vstupu Tlačítka logická 0 (LOW)
// !!! není spínálo log. 1, protože využíváme tzv. pulldown rezistoru v čipu
if ((digitalRead(Tlacitko)) == LOW)
{
mode++; // přičte k MODE hodnotu 1
if (mode > 4) mode = 0; // když je mode větší jak 4 tak ho vynuluj
delay(600); // prodleva proti záchvěvům tlačítka
}
if (mode == 0) Svetla = 0; //Vypni světla
if (mode == 1) Svetla = 1; //Zapni světla
if (mode == 2) Svetla = Blik; // rychlé blikání Led
if (mode == 3) Svetla = Blik2; // pomalé blikání Led
if (mode == 4) Blik3; // střídavé blikání
// časovač pro blikání *********************************************
if ((millis() - posledniBlik) > 200) // když celkový počet milisekund
// minus počet milisekund při poslednim "bliku" je vetši jak 400
// tady můžete nastavit rychlost blikání v počtu milisekund
{
Blik = !Blik; // Blik se rovná negaci Blik (neguje proměnou)
posledniBlik = millis(); // zapiš poslední blik
}
// časovač 2 pro blikání ********************************
if ((millis() - posledniBlik2) > 500)
{
Blik2 = !Blik2;
posledniBlik2 = millis();
}
// TADY TO NEFUNGUJE
// tj. když stiskneš 4x tlačítko - střídavě blikej led
// časovač 3 pro blikání ********************************
if (mode == 4)
{
if ((millis() - lastMillis1) >= 500) {
digitalWrite(Led1, !digitalRead(Led1));
lastMillis1 = millis();
}
if ((millis() - lastMillis2) >= 500) {
digitalWrite(Led2, !digitalRead(Led2));
lastMillis2 = millis();
}
}
}
Všechno chodí jak má, ale jak dojde na střídavé blikání , tak podle toho co napíšu, se obě ledky rožnou nebo jsou obě zhasnuté