Mini CNC osa Z
Re: Mini CNC osa Z
Ty odpory se na ty tlačítka dávají z toho důvodu, aby při rozpojeném tlačítku ten pin "nevisel ve vzduchu" ... pokud ten odpor dám nožičkou k plusu, říká se mu PULLUP ... tahá v neaktivním stavu ten pin na napájení. Když ten odpor dám nožičkou k zemi, tak je to PULLDOWN ... v neaktivním stavu stahuje pin k zemi.
Jestli chápu správně jak to máš zapojené, tak používáš PULLDOWN rezistor. Ten v neaktivním stavu přivádí zem na vstupní pin arduina, při zmáčknutí na něm bude napájecí napětí, takže bude HIGH.
pinMode(TLACITKO, INPUT_PULLUP); // nenastavuj ten pin jako pullup ... jen pouze input ...
digitalWrite(TLACITKO,HIGH); // ten komentář tu chybí záměrně? Protože tohle je zcela nepotřebný příkaz ?
Jestli chápu správně jak to máš zapojené, tak používáš PULLDOWN rezistor. Ten v neaktivním stavu přivádí zem na vstupní pin arduina, při zmáčknutí na něm bude napájecí napětí, takže bude HIGH.
pinMode(TLACITKO, INPUT_PULLUP); // nenastavuj ten pin jako pullup ... jen pouze input ...
digitalWrite(TLACITKO,HIGH); // ten komentář tu chybí záměrně? Protože tohle je zcela nepotřebný příkaz ?
Re: Mini CNC osa Z
dobrý den, provedl jsem nastavení tlačítka na INPUT, opravil špatnou závorku, ale po nahrátí kodu do Arduina tlačítko nespustí žádný mode, jen seriový monitor vypisuje hlášku LED1,LED2 vypnuto
Kód: Vybrat vše
#define TLACITKO 2 // číslo pinu TLACITKA
#define LED1 10 // číslo pinu LED1 zelená
#define LED2 11 // číslo pinu LED2 červená
int buttonState; //nejnovější hodnota načtená ze vstupního pinu
int lastButtonState = LOW; // předchozí hodnota načtení ze vstupního pinu
// 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
unsigned long lastDebounceTime = 0; // čas posledního změny výstupního pinu
unsigned long debounceDelay = 50; // čas debounce prodlevy
byte mode = 0; // 0 - Vypnuto, 1 - Zapnuto, 2 - Blikání rychlé, 3 - Blikání pomalé, 4 - Blikání střídavé
unsigned long aktualniMillis; //aktualní čas
unsigned long predchoziMillis1; // předchozí čas pro rychle blikání
unsigned long predchoziMillis2; // předchozí čas pro pomalé blikání
unsigned long predchoziMillis3; // předchozí čas pro střídavé blikání
boolean led1svetlo; // pomocná proměnná led1svetlo
boolean led2svetlo; // pomocná proměnná led2svetlo
void setup() {
pinMode(LED1, OUTPUT); // pin pro LED1 nastaven jako výstup
pinMode(LED2, OUTPUT); // pin pro LED2 nastaven jako výstup
pinMode(TLACITKO, INPUT); // pin pro TLACITKO nastaveno jako vstup
digitalWrite(TLACITKO,HIGH); // stav vstupního pinu Tlačítka log.1
Serial.begin(9600); // konfigurace rychlosti seriového portu
while (!Serial) { ; // čekaní na připojení seriového portu, pry nezbytné pouze u desky Leonardo
}
Serial.println("Seriovy port aktivni"); // První výpis na seriový port
}
void loop(){
/*TOHLE JE ZAČÁTEK BLOKU KDE OŠETŘUJI TLAČÍTKO*/
buttonState = digitalRead(TLACITKO); // přečtení stavu tlačítka
if (buttonState != lastButtonState) { // kmita to, od minule se to zmenilo, zacnu debounce cas pocitat znovu (tedy od posledni zmeny, ktera je ted)
lastDebounceTime = millis();
} // uložení do lastButtonState poslední načtená hodnota pro další smyčku v loop()
lastButtonState = buttonState; // tady si to ulozim, v dalsim pruchodu loop() to zase porovnam s novym stavem, zda se to mezi tim nezmenilo
if ((millis() - lastDebounceTime) > debounceDelay) { // jo, uz se to dlouho nezmenilo, tak je to stabilni a spravna hodnota
if (buttonState != lastButtonState) { // Pokud se stav tlačítka změnil tj. porovná se buttonState (stav tlačítka) s předchozím stavem
lastButtonState = buttonState; // tady si zapamatuje poslední ošetřený stav (novou hodnotu stavu ) stisknutého tlačítka
if(buttonState == HIGH) {
mode++; // přičte k MODE hodnotu 1
if (mode > 4) mode = 0; // když je mode větší jak 4 tak ho vynuluje
}
}
/*TOHLE JE KONEC BLOKU KDE OŠETŘUJI TLAČÍTKO*/
}
if(mode == 0) {
// ******* LED1, LED2 vypnuto ********
led1svetlo = false; // zhasni LED1
led2svetlo = false; // zhasni LED2
Serial.println("LED1,LED2 vypnuto"); // výpis na seriový monitor
}
if(mode == 1) {
// ******* LED1, LED2 zapnuto ********
led1svetlo = true; // rožni LED1
led2svetlo = true; // rožni LED2
Serial.println("LED1,LED2 zapnuto"); // výpis na seriový monitor
}
if(mode == 2) {
// ******* LED1,LED2 blikání rychlé *******
aktualniMillis = millis(); //podívám se na hodinky - aktuální čas
if(aktualniMillis - predchoziMillis1 > 200) { // nejprve si zjistím jestli je čas něco provést, uběhlo už 200ms od poslední akce?
if (led1svetlo) {
led1svetlo = false; // zhasnu LED1
led2svetlo = false; // zhasnu LED2
} else {
led1svetlo = true; // rožnu LED1
led2svetlo = true; // rožnu LED2
}
predchoziMillis1 = aktualniMillis; // v tento čas jsem provedl poslední akci
}
Serial.println("LED1,LED2 blikání rychlé"); // výpis na seriový monitor
}
if(mode == 3) {
// ******* LED1,LED2 blikání pomalé *******
aktualniMillis = millis(); //podívám se na hodinky - aktuální čas
if(aktualniMillis - predchoziMillis2 > 500) { // nejprve si zjistím jestli je čas něco provést, uběhlo už 500ms od poslední akce?
if (led2svetlo) {
led1svetlo = false; // zhasnu LED1
led2svetlo = false; // zhasnu LED2
} else {
led1svetlo = true; // rožnu LED1
led2svetlo = true; // rožnu LED2
}
predchoziMillis2 = aktualniMillis; // v tento čas jsem provedl poslední akci
}
Serial.println("LED1,LED2 blikání pomalé"); // výpis na seriový monitor
}
if(mode == 4) {
// ******* LED1,LED2 blikání střídavé *******
aktualniMillis = millis(); //podívám se na hodinky - aktuální čas
if(aktualniMillis - predchoziMillis3 > 300) { // nejprve si zjistím jestli je čas něco provést, uběhlo už 300ms ?
led1svetlo = !led1svetlo; // do proměnné led1svetlo zapíšu její negovanou hodnotu, tj. svítila-li LED1 tak zhasne, byla-li zhaslá rožne se
led2svetlo = !led1svetlo; // do proměnné led2svetlo zapíšu negovanou hodnotu led1svetlo, tj. pokud LED1 svítí chci LED2 zhaslou a naopak
predchoziMillis3 = aktualniMillis; // v tento čas jsem provedl poslední akci
Serial.println("LED1,LED2 blikání střídavé"); // výpis na seriový monitor
}
}
digitalWrite(LED1,led1svetlo); // aktualizace stavu LED1, zápis proměnné led1svetlo na výstupní pin 10
digitalWrite(LED2,led2svetlo); // aktualizace stavu LED2, zápis proměnné led2svetlo na výstupní pin 11
}
Re: Mini CNC osa Z
digitalWrite(TLACITKO,HIGH); // stav vstupního pinu Tlačítka log.1 <-- tohle do pryč
Pokud zapisuješ 0 nebo 1 do pinu, který je nastaven jako input, tak zapínáš a vypínáš interní pullup rezistor. Máš ho pak připojený jednak tvým odporem k zemi a zároveň jsi aktivoval odpor uvnitř toho čipu, který to celý připojí z druhé strany k napájení.
Další věc je to, jestli to máš opravdu zapojené správně a to tlačítko je při stisku HIGH ... pokud to máš zapojené opačně, je třeba to změnit i tady if(buttonState == HIGH) {
Pokud zapisuješ 0 nebo 1 do pinu, který je nastaven jako input, tak zapínáš a vypínáš interní pullup rezistor. Máš ho pak připojený jednak tvým odporem k zemi a zároveň jsi aktivoval odpor uvnitř toho čipu, který to celý připojí z druhé strany k napájení.
Další věc je to, jestli to máš opravdu zapojené správně a to tlačítko je při stisku HIGH ... pokud to máš zapojené opačně, je třeba to změnit i tady if(buttonState == HIGH) {
Re: Mini CNC osa Z
dobrý den, vymazal jsem tohle : digitalWrite(TLACITKO,HIGH); // stav vstupního pinu Tlačítka log.1
zkontroloval jsem zapojení tlačítka a nahrál kod do Arduina - výsledek se bohužel nezměnil a tlačítko nepřepne mode
Tlačítko je proměřeno a funkční zapojení : odpor mezi GND a první stranou tlačítka + připojen pin2 arduina, druhá strana tlačítka na 5V / to jenom pro kontrolu /, a taky zkoušel změnit v kodu HIGH za LOW , ledky ani nemrkly
zkontroloval jsem zapojení tlačítka a nahrál kod do Arduina - výsledek se bohužel nezměnil a tlačítko nepřepne mode
Tlačítko je proměřeno a funkční zapojení : odpor mezi GND a první stranou tlačítka + připojen pin2 arduina, druhá strana tlačítka na 5V / to jenom pro kontrolu /, a taky zkoušel změnit v kodu HIGH za LOW , ledky ani nemrkly
Kód: Vybrat vše
#define TLACITKO 2 // číslo pinu TLACITKA
#define LED1 10 // číslo pinu LED1 zelená
#define LED2 11 // číslo pinu LED2 červená
int buttonState; //nejnovější hodnota načtená ze vstupního pinu
int lastButtonState = LOW; // předchozí hodnota načtení ze vstupního pinu
// 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
unsigned long lastDebounceTime = 0; // čas posledního změny výstupního pinu
unsigned long debounceDelay = 50; // čas debounce prodlevy
byte mode = 0; // 0 - Vypnuto, 1 - Zapnuto, 2 - Blikání rychlé, 3 - Blikání pomalé, 4 - Blikání střídavé
unsigned long aktualniMillis; //aktualní čas
unsigned long predchoziMillis1; // předchozí čas pro rychle blikání
unsigned long predchoziMillis2; // předchozí čas pro pomalé blikání
unsigned long predchoziMillis3; // předchozí čas pro střídavé blikání
boolean led1svetlo; // pomocná proměnná led1svetlo
boolean led2svetlo; // pomocná proměnná led2svetlo
void setup() {
pinMode(LED1, OUTPUT); // pin pro LED1 nastaven jako výstup
pinMode(LED2, OUTPUT); // pin pro LED2 nastaven jako výstup
pinMode(TLACITKO, INPUT); // pin pro TLACITKO nastaveno jako vstup
Serial.begin(9600); // konfigurace rychlosti seriového portu
while (!Serial) { ; // čekaní na připojení seriového portu, pry nezbytné pouze u desky Leonardo
}
Serial.println("Seriovy port aktivni"); // První výpis na seriový port
}
void loop(){
/*TOHLE JE ZAČÁTEK BLOKU KDE OŠETŘUJI TLAČÍTKO*/
buttonState = digitalRead(TLACITKO); // přečtení stavu tlačítka
if (buttonState != lastButtonState) { // kmita to, od minule se to zmenilo, zacnu debounce cas pocitat znovu (tedy od posledni zmeny, ktera je ted)
lastDebounceTime = millis();
} // uložení do lastButtonState poslední načtená hodnota pro další smyčku v loop()
lastButtonState = buttonState; // tady si to ulozim, v dalsim pruchodu loop() to zase porovnam s novym stavem, zda se to mezi tim nezmenilo
if ((millis() - lastDebounceTime) > debounceDelay) { // jo, uz se to dlouho nezmenilo, tak je to stabilni a spravna hodnota
if (buttonState != lastButtonState) { // Pokud se stav tlačítka změnil tj. porovná se buttonState (stav tlačítka) s předchozím stavem
lastButtonState = buttonState; // tady si zapamatuje poslední ošetřený stav (novou hodnotu stavu ) stisknutého tlačítka
if(buttonState == HIGH) {
mode++; // přičte k MODE hodnotu 1
if (mode > 4) mode = 0; // když je mode větší jak 4 tak ho vynuluje
}
}
/*TOHLE JE KONEC BLOKU KDE OŠETŘUJI TLAČÍTKO*/
}
if(mode == 0) {
// ******* LED1, LED2 vypnuto ********
led1svetlo = false; // zhasni LED1
led2svetlo = false; // zhasni LED2
Serial.println("LED1,LED2 vypnuto"); // výpis na seriový monitor
}
if(mode == 1) {
// ******* LED1, LED2 zapnuto ********
led1svetlo = true; // rožni LED1
led2svetlo = true; // rožni LED2
Serial.println("LED1,LED2 zapnuto"); // výpis na seriový monitor
}
if(mode == 2) {
// ******* LED1,LED2 blikání rychlé *******
aktualniMillis = millis(); //podívám se na hodinky - aktuální čas
if(aktualniMillis - predchoziMillis1 > 200) { // nejprve si zjistím jestli je čas něco provést, uběhlo už 200ms od poslední akce?
if (led1svetlo) {
led1svetlo = false; // zhasnu LED1
led2svetlo = false; // zhasnu LED2
} else {
led1svetlo = true; // rožnu LED1
led2svetlo = true; // rožnu LED2
}
predchoziMillis1 = aktualniMillis; // v tento čas jsem provedl poslední akci
}
Serial.println("LED1,LED2 blikání rychlé"); // výpis na seriový monitor
}
if(mode == 3) {
// ******* LED1,LED2 blikání pomalé *******
aktualniMillis = millis(); //podívám se na hodinky - aktuální čas
if(aktualniMillis - predchoziMillis2 > 500) { // nejprve si zjistím jestli je čas něco provést, uběhlo už 500ms od poslední akce?
if (led2svetlo) {
led1svetlo = false; // zhasnu LED1
led2svetlo = false; // zhasnu LED2
} else {
led1svetlo = true; // rožnu LED1
led2svetlo = true; // rožnu LED2
}
predchoziMillis2 = aktualniMillis; // v tento čas jsem provedl poslední akci
}
Serial.println("LED1,LED2 blikání pomalé"); // výpis na seriový monitor
}
if(mode == 4) {
// ******* LED1,LED2 blikání střídavé *******
aktualniMillis = millis(); //podívám se na hodinky - aktuální čas
if(aktualniMillis - predchoziMillis3 > 300) { // nejprve si zjistím jestli je čas něco provést, uběhlo už 300ms ?
led1svetlo = !led1svetlo; // do proměnné led1svetlo zapíšu její negovanou hodnotu, tj. svítila-li LED1 tak zhasne, byla-li zhaslá rožne se
led2svetlo = !led1svetlo; // do proměnné led2svetlo zapíšu negovanou hodnotu led1svetlo, tj. pokud LED1 svítí chci LED2 zhaslou a naopak
predchoziMillis3 = aktualniMillis; // v tento čas jsem provedl poslední akci
Serial.println("LED1,LED2 blikání střídavé"); // výpis na seriový monitor
}
}
digitalWrite(LED1,led1svetlo); // aktualizace stavu LED1, zápis proměnné led1svetlo na výstupní pin 10
digitalWrite(LED2,led2svetlo); // aktualizace stavu LED2, zápis proměnné led2svetlo na výstupní pin 11
}
Re: Mini CNC osa Z
už jsem z toho domotaný i já ... že jsem si toho nevšimnul ...
ps: ty tvoje komenty jsem odmazal, aby ty moje šly lépe vidět
Kód: Vybrat vše
buttonState = digitalRead(TLACITKO);
if (buttonState != lastButtonState) {
lastDebounceTime = millis();
}
lastButtonState = buttonState; // <-- tohle příjde až na konec ... tady si totiž přepíšeš moc brzo lastButtonState a když ho níž porovnáváš je vždy stejný jako buttonState, takže se ti to vyhodnotí špatně
if ((millis() - lastDebounceTime) > debounceDelay) {
if (buttonState != lastButtonState) { // <-- tady se to špatně vyhodnocovalo, protože se moc brzo přepsala hodnota lastButtonState
lastButtonState = buttonState; // <-- smazat, není to zde už třeba
if(buttonState == HIGH) {
mode++;
if (mode > 4) mode = 0;
}
}
}
//<-- až semhle to příjde
Re: Mini CNC osa Z
pořád nic i po úpravách tady je obrázek zapojení : https: //ctrlv.cz/dB9Y
a tady kod :
a tady kod :
Kód: Vybrat vše
#define TLACITKO 2 // číslo pinu TLACITKA
#define LED1 10 // číslo pinu LED1 zelená
#define LED2 11 // číslo pinu LED2 červená
int buttonState; //nejnovější hodnota načtená ze vstupního pinu
int lastButtonState = LOW; // předchozí hodnota načtení ze vstupního pinu
// 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
unsigned long lastDebounceTime = 0; // čas posledního změny výstupního pinu
unsigned long debounceDelay = 50; // čas debounce prodlevy
byte mode = 0; // 0 - Vypnuto, 1 - Zapnuto, 2 - Blikání rychlé, 3 - Blikání pomalé, 4 - Blikání střídavé
unsigned long aktualniMillis; //aktualní čas
unsigned long predchoziMillis1; // předchozí čas pro rychle blikání
unsigned long predchoziMillis2; // předchozí čas pro pomalé blikání
unsigned long predchoziMillis3; // předchozí čas pro střídavé blikání
boolean led1svetlo; // pomocná proměnná led1svetlo
boolean led2svetlo; // pomocná proměnná led2svetlo
void setup() {
pinMode(LED1, OUTPUT); // pin pro LED1 nastaven jako výstup
pinMode(LED2, OUTPUT); // pin pro LED2 nastaven jako výstup
pinMode(TLACITKO, INPUT); // pin pro TLACITKO nastaveno jako vstup
Serial.begin(9600); // konfigurace rychlosti seriového portu
while (!Serial) { ; // čekaní na připojení seriového portu, pry nezbytné pouze u desky Leonardo
}
Serial.println("Seriovy port aktivni"); // První výpis na seriový port
}
void loop(){
/*TOHLE JE ZAČÁTEK BLOKU KDE OŠETŘUJI TLAČÍTKO*/
buttonState = digitalRead(TLACITKO); // přečtení stavu tlačítka
if (buttonState != lastButtonState) { // kmita to, od minule se to zmenilo, zacnu debounce cas pocitat znovu (tedy od posledni zmeny, ktera je ted)
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) { // jo, uz se to dlouho nezmenilo, tak je to stabilni a spravna hodnota
if (buttonState != lastButtonState) { // Pokud se stav tlačítka změnil tj. porovná se buttonState (stav tlačítka) s předchozím stavem
if(buttonState == HIGH) {
mode++; // přičte k MODE hodnotu 1
if (mode > 4) mode = 0; // když je mode větší jak 4 tak ho vynuluje
}
}
}
lastButtonState = buttonState; // tady si to ulozim, v dalsim pruchodu loop() to zase porovnam s novym stavem, zda se to mezi tim nezmenilo
if(mode == 0) {
// ******* LED1, LED2 vypnuto ********
led1svetlo = false; // zhasni LED1
led2svetlo = false; // zhasni LED2
Serial.println("LED1,LED2 vypnuto"); // výpis na seriový monitor
}
if(mode == 1) {
// ******* LED1, LED2 zapnuto ********
led1svetlo = true; // rožni LED1
led2svetlo = true; // rožni LED2
Serial.println("LED1,LED2 zapnuto"); // výpis na seriový monitor
}
if(mode == 2) {
// ******* LED1,LED2 blikání rychlé *******
aktualniMillis = millis(); //podívám se na hodinky - aktuální čas
if(aktualniMillis - predchoziMillis1 > 200) { // nejprve si zjistím jestli je čas něco provést, uběhlo už 200ms od poslední akce?
if (led1svetlo) {
led1svetlo = false; // zhasnu LED1
led2svetlo = false; // zhasnu LED2
} else {
led1svetlo = true; // rožnu LED1
led2svetlo = true; // rožnu LED2
}
predchoziMillis1 = aktualniMillis; // v tento čas jsem provedl poslední akci
}
Serial.println("LED1,LED2 blikání rychlé"); // výpis na seriový monitor
}
if(mode == 3) {
// ******* LED1,LED2 blikání pomalé *******
aktualniMillis = millis(); //podívám se na hodinky - aktuální čas
if(aktualniMillis - predchoziMillis2 > 500) { // nejprve si zjistím jestli je čas něco provést, uběhlo už 500ms od poslední akce?
if (led2svetlo) {
led1svetlo = false; // zhasnu LED1
led2svetlo = false; // zhasnu LED2
} else {
led1svetlo = true; // rožnu LED1
led2svetlo = true; // rožnu LED2
}
predchoziMillis2 = aktualniMillis; // v tento čas jsem provedl poslední akci
}
Serial.println("LED1,LED2 blikání pomalé"); // výpis na seriový monitor
}
if(mode == 4) {
// ******* LED1,LED2 blikání střídavé *******
aktualniMillis = millis(); //podívám se na hodinky - aktuální čas
if(aktualniMillis - predchoziMillis3 > 300) { // nejprve si zjistím jestli je čas něco provést, uběhlo už 300ms ?
led1svetlo = !led1svetlo; // do proměnné led1svetlo zapíšu její negovanou hodnotu, tj. svítila-li LED1 tak zhasne, byla-li zhaslá rožne se
led2svetlo = !led1svetlo; // do proměnné led2svetlo zapíšu negovanou hodnotu led1svetlo, tj. pokud LED1 svítí chci LED2 zhaslou a naopak
predchoziMillis3 = aktualniMillis; // v tento čas jsem provedl poslední akci
Serial.println("LED1,LED2 blikání střídavé"); // výpis na seriový monitor
}
}
digitalWrite(LED1,led1svetlo); // aktualizace stavu LED1, zápis proměnné led1svetlo na výstupní pin 10
digitalWrite(LED2,led2svetlo); // aktualizace stavu LED2, zápis proměnné led2svetlo na výstupní pin 11
}
Re: Mini CNC osa Z
zkus tohle ... momentálně nemám na čem otestovat, ale asi mě doženeš k tomu abych rozebral momentální projekt a zkusit si to zapojit s tvým programem
a nahoře
Kód: Vybrat vše
buttonState = digitalRead(TLACITKO); // přečtení stavu tlačítka
if (buttonState != lastButtonState) { // kmita to, od minule se to zmenilo, zacnu debounce cas pocitat znovu (tedy od posledni zmeny, ktera je ted)
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) { // jo, uz se to dlouho nezmenilo, tak je to stabilni a spravna hodnota
if (buttonState != lastTrueButtonState) { // Pokud se stav tlačítka změnil tj. porovná se buttonState (stav tlačítka) s předchozím ošetřeným stavem
if(buttonState == true) {
mode++; // přičte k MODE hodnotu 1
if (mode > 4) mode = 0; // když je mode větší jak 4 tak ho vynuluje
}
lastTrueButtonState = buttonState; // uložím si nový pravý ošetřený stav tlačítka
}
}
lastButtonState = buttonState; // tady si to ulozim, v dalsim pruchodu loop() to zase porovnam s novym stavem, zda se to mezi tim nezmenilo
Kód: Vybrat vše
boolean buttonState = false; //nejnovější hodnota načtená ze vstupního pinu
boolean lastButtonState = false; // předchozí hodnota načtení ze vstupního pinu
boolean lastTrueButtonState = false; // předchozí hodnota ošetřeného tlačítka
Re: Mini CNC osa Z
dobrý den, po posledních úpravách v kodu se po stisknutí tlačítka mode přepíná, ale musím stisknout tlačítko velmi rychle, aby se mode nespustilo další,další ... do rozepnutí tlačítka
tady je výpis na seriovém monitoru : https://ctrlv.cz/T8JT
a tady kod :
tady je výpis na seriovém monitoru : https://ctrlv.cz/T8JT
a tady kod :
Kód: Vybrat vše
#define TLACITKO 2 // číslo pinu TLACITKA
#define LED1 10 // číslo pinu LED1 zelená
#define LED2 11 // číslo pinu LED2 červená
boolean buttonState = false; //nejnovější hodnota načtená ze vstupního pinu
boolean lastButtonState = false; // předchozí hodnota načtení ze vstupního pinu
boolean lastTrueButtonState = false; // předchozí hodnota ošetřeného tlačítka
// 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
unsigned long lastDebounceTime = 0; // čas posledního změny výstupního pinu
unsigned long debounceDelay = 50; // čas debounce prodlevy
byte mode = 0; // 0 - Vypnuto, 1 - Zapnuto, 2 - Blikání rychlé, 3 - Blikání pomalé, 4 - Blikání střídavé
unsigned long aktualniMillis; //aktualní čas
unsigned long predchoziMillis1; // předchozí čas pro rychle blikání
unsigned long predchoziMillis2; // předchozí čas pro pomalé blikání
unsigned long predchoziMillis3; // předchozí čas pro střídavé blikání
boolean led1svetlo; // pomocná proměnná led1svetlo
boolean led2svetlo; // pomocná proměnná led2svetlo
void setup() {
pinMode(LED1, OUTPUT); // pin pro LED1 nastaven jako výstup
pinMode(LED2, OUTPUT); // pin pro LED2 nastaven jako výstup
pinMode(TLACITKO, INPUT); // pin pro TLACITKO nastaveno jako vstup
Serial.begin(9600); // konfigurace rychlosti seriového portu
while (!Serial) { ; // čekaní na připojení seriového portu, pry nezbytné pouze u desky Leonardo
}
Serial.println("Seriovy port aktivni"); // První výpis na seriový port
}
void loop(){
/*TOHLE JE ZAČÁTEK BLOKU KDE OŠETŘUJI TLAČÍTKO*/
buttonState = digitalRead(TLACITKO); // přečtení stavu tlačítka
if (buttonState != lastButtonState) { // kmita to, od minule se to zmenilo, zacnu debounce cas pocitat znovu (tedy od posledni zmeny, ktera je ted)
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) { // jo, uz se to dlouho nezmenilo, tak je to stabilni a spravna hodnota
if (buttonState != lastTrueButtonState) { // Pokud se stav tlačítka změnil tj. porovná se buttonState (stav tlačítka) s předchozím stavem
if(buttonState == true) {
mode++; // přičte k MODE hodnotu 1
if (mode > 4) mode = 0; // když je mode větší jak 4 tak ho vynuluje
}
}
}
lastButtonState = buttonState; // tady si to ulozim, v dalsim pruchodu loop() to zase porovnam s novym stavem, zda se to mezi tim nezmenilo
if(mode == 0) {
// ******* LED1, LED2 vypnuto ********
led1svetlo = false; // zhasni LED1
led2svetlo = false; // zhasni LED2
Serial.println("LED1,LED2 vypnuto"); // výpis na seriový monitor
}
if(mode == 1) {
// ******* LED1, LED2 zapnuto ********
led1svetlo = true; // rožni LED1
led2svetlo = true; // rožni LED2
Serial.println("LED1,LED2 zapnuto"); // výpis na seriový monitor
}
if(mode == 2) {
// ******* LED1,LED2 blikání rychlé *******
aktualniMillis = millis(); //podívám se na hodinky - aktuální čas
if(aktualniMillis - predchoziMillis1 > 200) { // nejprve si zjistím jestli je čas něco provést, uběhlo už 200ms od poslední akce?
if (led1svetlo) {
led1svetlo = false; // zhasnu LED1
led2svetlo = false; // zhasnu LED2
} else {
led1svetlo = true; // rožnu LED1
led2svetlo = true; // rožnu LED2
}
predchoziMillis1 = aktualniMillis; // v tento čas jsem provedl poslední akci
}
Serial.println("LED1,LED2 blikání rychlé"); // výpis na seriový monitor
}
if(mode == 3) {
// ******* LED1,LED2 blikání pomalé *******
aktualniMillis = millis(); //podívám se na hodinky - aktuální čas
if(aktualniMillis - predchoziMillis2 > 500) { // nejprve si zjistím jestli je čas něco provést, uběhlo už 500ms od poslední akce?
if (led2svetlo) {
led1svetlo = false; // zhasnu LED1
led2svetlo = false; // zhasnu LED2
} else {
led1svetlo = true; // rožnu LED1
led2svetlo = true; // rožnu LED2
}
predchoziMillis2 = aktualniMillis; // v tento čas jsem provedl poslední akci
}
Serial.println("LED1,LED2 blikání pomalé"); // výpis na seriový monitor
}
if(mode == 4) {
// ******* LED1,LED2 blikání střídavé *******
aktualniMillis = millis(); //podívám se na hodinky - aktuální čas
if(aktualniMillis - predchoziMillis3 > 300) { // nejprve si zjistím jestli je čas něco provést, uběhlo už 300ms ?
led1svetlo = !led1svetlo; // do proměnné led1svetlo zapíšu její negovanou hodnotu, tj. svítila-li LED1 tak zhasne, byla-li zhaslá rožne se
led2svetlo = !led1svetlo; // do proměnné led2svetlo zapíšu negovanou hodnotu led1svetlo, tj. pokud LED1 svítí chci LED2 zhaslou a naopak
predchoziMillis3 = aktualniMillis; // v tento čas jsem provedl poslední akci
Serial.println("LED1,LED2 blikání střídavé"); // výpis na seriový monitor
}
}
digitalWrite(LED1,led1svetlo); // aktualizace stavu LED1, zápis proměnné led1svetlo na výstupní pin 10
digitalWrite(LED2,led2svetlo); // aktualizace stavu LED2, zápis proměnné led2svetlo na výstupní pin 11
}
Re: Mini CNC osa Z
jeden řádek chybí
if(buttonState == true) {
mode++; // přičte k MODE hodnotu 1
if (mode > 4) mode = 0; // když je mode větší jak 4 tak ho vynuluje
}
lastTrueButtonState = buttonState; // uložím si nový pravý ošetřený stav tlačítka
if(buttonState == true) {
mode++; // přičte k MODE hodnotu 1
if (mode > 4) mode = 0; // když je mode větší jak 4 tak ho vynuluje
}
lastTrueButtonState = buttonState; // uložím si nový pravý ošetřený stav tlačítka
Re: Mini CNC osa Z
dobrý večer, obrovský respekt, obdiv a veliké děkuju pro kiRRow
Tady je plně funkční kod pro : varianty blikání Led s ošetřeným tlačítkem debounce
Vyzkoušeno ! po stisknutí tlačítka se přepne mode a k dalšímu mode dojde až při dalším stisknutí tlačítka
Tohle ošetření debounce , jsem snad na netu nikde neviděl ? Tedy na " lastTrueButtonState " určitě ne , a taky kde nejnovější a předchozí hodnota ze vstupních pinů a tlačítka jsou boolean a false - můžete mi prosím vysvětlit
proč to tak je ? děkuju
Tady je plně funkční kod pro : varianty blikání Led s ošetřeným tlačítkem debounce
Kód: Vybrat vše
#define TLACITKO 2 // číslo pinu TLACITKA
#define LED1 10 // číslo pinu LED1 zelená
#define LED2 11 // číslo pinu LED2 červená
boolean buttonState = false; //nejnovější hodnota načtená ze vstupního pinu
boolean lastButtonState = false; // předchozí hodnota načtení ze vstupního pinu
boolean lastTrueButtonState = false; // předchozí hodnota ošetřeného tlačítka
// 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
unsigned long lastDebounceTime = 0; // čas posledního změny výstupního pinu
unsigned long debounceDelay = 50; // čas debounce prodlevy
byte mode = 0; // 0 - Vypnuto, 1 - Zapnuto, 2 - Blikání rychlé, 3 - Blikání pomalé, 4 - Blikání střídavé
unsigned long aktualniMillis; //aktualní čas
unsigned long predchoziMillis1; // předchozí čas pro rychle blikání
unsigned long predchoziMillis2; // předchozí čas pro pomalé blikání
unsigned long predchoziMillis3; // předchozí čas pro střídavé blikání
boolean led1svetlo; // pomocná proměnná led1svetlo
boolean led2svetlo; // pomocná proměnná led2svetlo
void setup() {
pinMode(LED1, OUTPUT); // pin pro LED1 nastaven jako výstup
pinMode(LED2, OUTPUT); // pin pro LED2 nastaven jako výstup
pinMode(TLACITKO, INPUT); // pin pro TLACITKO nastaveno jako vstup
Serial.begin(9600); // konfigurace rychlosti seriového portu
while (!Serial) { ; // čekaní na připojení seriového portu, pry nezbytné pouze u desky Leonardo
}
Serial.println("Seriovy port aktivni"); // První výpis na seriový port
}
void loop(){
/*TOHLE JE ZAČÁTEK BLOKU KDE OŠETŘUJI TLAČÍTKO*/
buttonState = digitalRead(TLACITKO); // přečtení stavu tlačítka
if (buttonState != lastButtonState) { // kmita to, od minule se to zmenilo, zacnu debounce cas pocitat znovu (tedy od posledni zmeny, ktera je ted)
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) { // jo, uz se to dlouho nezmenilo, tak je to stabilni a spravna hodnota
if (buttonState != lastTrueButtonState) { // Pokud se stav tlačítka změnil tj. porovná se buttonState (stav tlačítka) s předchozím stavem
if(buttonState == true) {
mode++; // přičte k MODE hodnotu 1
if (mode > 4) mode = 0; // když je mode větší jak 4 tak ho vynuluje
}
lastTrueButtonState = buttonState; // uložím si nový pravý ošetřený stav tlačítka
}
}
lastButtonState = buttonState; // tady si to ulozim, v dalsim pruchodu loop() to zase porovnam s novym stavem, zda se to mezi tim nezmenilo
if(mode == 0) {
// ******* LED1, LED2 vypnuto ********
led1svetlo = false; // zhasni LED1
led2svetlo = false; // zhasni LED2
Serial.println("LED1,LED2 vypnuto"); // výpis na seriový monitor
}
if(mode == 1) {
// ******* LED1, LED2 zapnuto ********
led1svetlo = true; // rožni LED1
led2svetlo = true; // rožni LED2
Serial.println("LED1,LED2 zapnuto"); // výpis na seriový monitor
}
if(mode == 2) {
// ******* LED1,LED2 blikání rychlé *******
aktualniMillis = millis(); //podívám se na hodinky - aktuální čas
if(aktualniMillis - predchoziMillis1 > 200) { // nejprve si zjistím jestli je čas něco provést, uběhlo už 200ms od poslední akce?
if (led1svetlo) {
led1svetlo = false; // zhasnu LED1
led2svetlo = false; // zhasnu LED2
} else {
led1svetlo = true; // rožnu LED1
led2svetlo = true; // rožnu LED2
}
predchoziMillis1 = aktualniMillis; // v tento čas jsem provedl poslední akci
}
Serial.println("LED1,LED2 blikání rychlé"); // výpis na seriový monitor
}
if(mode == 3) {
// ******* LED1,LED2 blikání pomalé *******
aktualniMillis = millis(); //podívám se na hodinky - aktuální čas
if(aktualniMillis - predchoziMillis2 > 500) { // nejprve si zjistím jestli je čas něco provést, uběhlo už 500ms od poslední akce?
if (led2svetlo) {
led1svetlo = false; // zhasnu LED1
led2svetlo = false; // zhasnu LED2
} else {
led1svetlo = true; // rožnu LED1
led2svetlo = true; // rožnu LED2
}
predchoziMillis2 = aktualniMillis; // v tento čas jsem provedl poslední akci
}
Serial.println("LED1,LED2 blikání pomalé"); // výpis na seriový monitor
}
if(mode == 4) {
// ******* LED1,LED2 blikání střídavé *******
aktualniMillis = millis(); //podívám se na hodinky - aktuální čas
if(aktualniMillis - predchoziMillis3 > 300) { // nejprve si zjistím jestli je čas něco provést, uběhlo už 300ms ?
led1svetlo = !led1svetlo; // do proměnné led1svetlo zapíšu její negovanou hodnotu, tj. svítila-li LED1 tak zhasne, byla-li zhaslá rožne se
led2svetlo = !led1svetlo; // do proměnné led2svetlo zapíšu negovanou hodnotu led1svetlo, tj. pokud LED1 svítí chci LED2 zhaslou a naopak
predchoziMillis3 = aktualniMillis; // v tento čas jsem provedl poslední akci
Serial.println("LED1,LED2 blikání střídavé"); // výpis na seriový monitor
}
}
digitalWrite(LED1,led1svetlo); // aktualizace stavu LED1, zápis proměnné led1svetlo na výstupní pin 10
digitalWrite(LED2,led2svetlo); // aktualizace stavu LED2, zápis proměnné led2svetlo na výstupní pin 11
}
Tohle ošetření debounce , jsem snad na netu nikde neviděl ? Tedy na " lastTrueButtonState " určitě ne , a taky kde nejnovější a předchozí hodnota ze vstupních pinů a tlačítka jsou boolean a false - můžete mi prosím vysvětlit
proč to tak je ? děkuju
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 9 hostů