Mini CNC osa Z
Re: Mini CNC osa Z
Děje se totiž to, že vyselektuješ mode1, pak dáš start, uběhne 5vteřin a pak přepneš selectem na mode2 a to odpočítává od zbývajících 5ti vteřin.
Ošetříš to právě tak, že "uživateli" zakážeš měnit mode, kdyz program má běžet.
mode = (mode + 1) % 5; - tento zápis se stará o to aby se mode zvyšovalo ale nikdy nebylo větší než 4. Používá k tomu matematickou operaci modulo=zbytek po dělení.
Mno a jak to zakázat ?
Buď budeš kompletně ignorovat tlačítko select, když mamBezet == true ... ale to by byla škoda ... půlka tlačítek by v polovině programu byla vyřazena z funkce.
Já bych šel cestou, kdy bych při mamBezet == true přeskočil ten příkaz co přičítá mode.
A nebo se to dá vymyslet i tak, že když během blikání někdo přepne select, tak se sice mode zvýší, ale zároveň dojde k zastavení blikání a bude nutno znovu jej spustit pomocí start
------
Řešení je tak snadné, že může být až složité na něj přijít ...
Ošetříš to právě tak, že "uživateli" zakážeš měnit mode, kdyz program má běžet.
mode = (mode + 1) % 5; - tento zápis se stará o to aby se mode zvyšovalo ale nikdy nebylo větší než 4. Používá k tomu matematickou operaci modulo=zbytek po dělení.
Mno a jak to zakázat ?
Buď budeš kompletně ignorovat tlačítko select, když mamBezet == true ... ale to by byla škoda ... půlka tlačítek by v polovině programu byla vyřazena z funkce.
Já bych šel cestou, kdy bych při mamBezet == true přeskočil ten příkaz co přičítá mode.
A nebo se to dá vymyslet i tak, že když během blikání někdo přepne select, tak se sice mode zvýší, ale zároveň dojde k zastavení blikání a bude nutno znovu jej spustit pomocí start
------
Řešení je tak snadné, že může být až složité na něj přijít ...
Re: Mini CNC osa Z
dobrý den, upravil jsem kod pro : Přeskočení mode2 v kodu Start / Stop blikání led . Jestli jste to myslel takto, budu mít velkou radost, zde je kod :
upraveno pouze mode2, mohl jsem to možná udělat i jinak, ale tohle mě "hned" napadlo
tady je odkaz na video, jak kod nyní pracuje : https://www.youtube.com/watch?v=ynZxJm-QWY4
jen mi uniká , proč jsem měl zakázat mode2 ? pravda je, že se pořád mám co učit a doufám, že se ještě dlouho budu
děkuju
ps: hudbu jsem u videa zrušil
Kód: Vybrat vše
#define buttonSelect 2 // číslo pinu tlačítka SELECT pro výběr MODE červené
#define buttonStart 3 // číslo pinu tlačítka START
#define LED1 10 // číslo pinu LED1 zelená
#define LED2 11 // číslo pinu LED2 červená
#include <Wire.h> // knihovny pro LCD přes I2C
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // nastavení adresy I2C (0x27), počtu znaků, řádků LCD 20x4
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
boolean buttonStateStart = false;
boolean lastButtonStart = false;
boolean lastTrueButtonStart = false;
boolean mamBezet = false;
unsigned long lastDebounceTime = 0; // čas posledního změny výstupního pinu
unsigned long lastDebounceTime2 = 0;
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í
unsigned long cas = 0;
long buttonTime; // čas začátku stisknutí tlačítka
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(buttonSelect, INPUT); // pin pro tlačítko buttonSelect nastaveno jako vstup
pinMode(buttonStart, INPUT); // pin pro tlačítko buttonStart nastaveno jako vstup
lcd.begin(); // inicializace LCD
lcd.backlight(); // zapnutí podsvícení
Serial.begin(9600); // konfigurace rychlosti seriového portu
Serial.println("Seriovy port aktivni"); // První výpis na seriový port
lcd.setCursor( 2, 1);
lcd.print("ready");
delay(1000);
}
void loop(){
/*TOHLE JE ZAČÁTEK BLOKU KDE OŠETŘUJI TLAČÍTKO*/
buttonState = digitalRead(buttonSelect); // 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
//-------------- debounce pro tlačítko START ----------
buttonStateStart = digitalRead(buttonStart); // přečtení stavu tlačítka
if (buttonStateStart != lastButtonStart) { // kmita to, od minule se to zmenilo, zacnu debounce cas pocitat znovu (tedy od posledni zmeny, ktera je ted)
lastDebounceTime2 = millis();
}
if ((millis() - lastDebounceTime2) > debounceDelay) { // jo, uz se to dlouho nezmenilo, tak je to stabilni a spravna hodnota
if (buttonStateStart != lastTrueButtonStart) { // Pokud se stav tlačítka změnil tj. porovná se buttonState (stav tlačítka) s předchozím stavem
if (buttonStateStart == true) {
mamBezet = !mamBezet;
buttonTime = millis();
Serial.println("START"); // výpis na seriový monitor
}
// TADY CHYBÍ CO SE MÁ PROVÉST PŘI STISKU TLAČÍTKA START ... U MODE SE PŘIČÍTÁ MODE ...
// ...U STARTU BY SE MĚLA PŘEKLÁPĚT PROMĚNNÁ mamBezet - hoď si tu nějaký výpis do seriové linky a uvidíš že to funguje
}
lastTrueButtonStart = buttonStateStart; // uložím si nový pravý ošetřený stav tlačítka
}
lastButtonStart = buttonStateStart; // tady si to ulozim, v dalsim pruchodu loop() to zase porovnam s novym stavem, zda se to mezi tim nezmenilo
//-------------- konec ořetření tlačítka Start ----------
if(mode == 0) { // ******* LED1,LED2 vypnuto ********
if(mamBezet == false){
led1svetlo = false; // zhasni LED1
led2svetlo = false; // zhasni LED2
lcd.setCursor( 12, 2 );
lcd.print("STOP ");
} else {
lcd.setCursor( 12, 2 );
lcd.print("START");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 0");
}
if(mode == 1) { // ******* LED1,LED2 zapnuto ********
if(mamBezet == true){
led1svetlo = true;
led2svetlo = true;
lcd.setCursor( 12, 2 );
lcd.print("START");
}
else {
led1svetlo = false;
led2svetlo = false;
lcd.setCursor( 12, 2 );
lcd.print("STOP ");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 1");
}
if((mode == 2) && (mamBezet = false)) { // ******* LED1,LED2 blikání rychlé *******
// if(mamBezet == true) { // ZRUŠENÁ PODMÍNKA A PŘESUNUTA VIZ.VÝŠE K MODE2
if(millis() - buttonTime > 10000){ // zjistím si jestli je čas něco provést, uběhlo už 10s od poslední akce?
lcd.setCursor ( 10, 2 );
lcd.print(" START ");
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
// }
} else {
// vypis : "blikat začneme" - jestli chci vědět jak dlouho budu ještě čekat, tak vypíšu 10000 - (millis() - buttonTime
lcd.setCursor( 11, 2 );
lcd.print(10000 - (millis() - buttonTime)); // zobrazí se odpočet do blikání led v ms
lcd.setCursor( 15, 2 );
lcd.print(" ms");
}
} else {
lcd.setCursor( 11, 2 );
lcd.print(" STOP ");
led1svetlo = true;
led2svetlo = true;
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 2");
}
if(mode == 3) { // ******* LED1,LED2 blikání pomalé *******
if(mamBezet == true){
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
}
lcd.setCursor( 5, 2 );
lcd.print(" START ");
} else {
led1svetlo = false;
led2svetlo = false;
lcd.setCursor( 12, 2);
lcd.print("STOP ");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 3");
}
if(mode == 4) { // ******* LED1,LED2 blikání střídavé *******
if(mamBezet == true){
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
}
lcd.setCursor( 12, 2 );
lcd.print("START");
} else {
led1svetlo = false;
led2svetlo = false;
lcd.setCursor( 12, 2 );
lcd.print("STOP ");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 4");
}
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
}
tady je odkaz na video, jak kod nyní pracuje : https://www.youtube.com/watch?v=ynZxJm-QWY4
jen mi uniká , proč jsem měl zakázat mode2 ? pravda je, že se pořád mám co učit a doufám, že se ještě dlouho budu
děkuju
ps: hudbu jsem u videa zrušil
Re: Mini CNC osa Z
stačilo jen upravit toto
takhle
Kód: Vybrat vše
mode++; // přičte k MODE hodnotu 1
if (mode > 4) mode = 0; // když je mode větší jak 4 tak ho vynuluje
Kód: Vybrat vše
if(mamBezet == false) {
mode++; // přičte k MODE hodnotu 1
if (mode > 4) mode = 0; // když je mode větší jak 4 tak ho vynuluje
}
Re: Mini CNC osa Z
dobrý den, tak jsem upravil kod, jak radí kiRRow a přidáním podmínky je dosaženo nejenom toho, že se odpočet 10 s vždy provede celý, ale taky toho, že se mode dají přepnout jen ve stavu Stop ! což je úžasné a profi
Vemte si například ovládání bezpečnostních modulů, motorů, zdvihacích zařízení atd... .
Tady je kod s úpravou tj. provede se celý nastavený odpočet času v mode2 + mode se přepnou pouze ve stavu Stop :
děkuju
Vemte si například ovládání bezpečnostních modulů, motorů, zdvihacích zařízení atd... .
Tady je kod s úpravou tj. provede se celý nastavený odpočet času v mode2 + mode se přepnou pouze ve stavu Stop :
Kód: Vybrat vše
#define buttonSelect 2 // číslo pinu tlačítka SELECT pro výběr MODE červené
#define buttonStart 3 // číslo pinu tlačítka START
#define LED1 10 // číslo pinu LED1 zelená
#define LED2 11 // číslo pinu LED2 červená
#include <Wire.h> // knihovny pro LCD přes I2C
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // nastavení adresy I2C (0x27), počtu znaků, řádků LCD 20x4
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
boolean buttonStateStart = false;
boolean lastButtonStart = false;
boolean lastTrueButtonStart = false;
boolean mamBezet = false;
unsigned long lastDebounceTime = 0; // čas posledního změny výstupního pinu
unsigned long lastDebounceTime2 = 0;
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í
unsigned long cas = 0;
long buttonTime; // čas začátku stisknutí tlačítka
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(buttonSelect, INPUT); // pin pro tlačítko buttonSelect nastaveno jako vstup
pinMode(buttonStart, INPUT); // pin pro tlačítko buttonStart nastaveno jako vstup
lcd.begin(); // inicializace LCD
lcd.backlight(); // zapnutí podsvícení
Serial.begin(9600); // konfigurace rychlosti seriového portu
Serial.println("Seriovy port aktivni"); // První výpis na seriový port
lcd.setCursor( 2, 1);
lcd.print("ready");
delay(1000);
}
void loop(){
/*TOHLE JE ZAČÁTEK BLOKU KDE OŠETŘUJI TLAČÍTKO*/
buttonState = digitalRead(buttonSelect); // 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) {
// přidáním podmínky docílím vždy celého odpočtu času 10s !
if(mamBezet == false) { // a taky přepnutí mode jen tehdy, když jsou mode ve Stop
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
//-------------- debounce pro tlačítko START ----------
buttonStateStart = digitalRead(buttonStart); // přečtení stavu tlačítka
if (buttonStateStart != lastButtonStart) { // kmita to, od minule se to zmenilo, zacnu debounce cas pocitat znovu (tedy od posledni zmeny, ktera je ted)
lastDebounceTime2 = millis();
}
if ((millis() - lastDebounceTime2) > debounceDelay) { // jo, uz se to dlouho nezmenilo, tak je to stabilni a spravna hodnota
if (buttonStateStart != lastTrueButtonStart) { // Pokud se stav tlačítka změnil tj. porovná se buttonState (stav tlačítka) s předchozím stavem
if (buttonStateStart == true) {
mamBezet = !mamBezet;
buttonTime = millis();
Serial.println("START"); // výpis na seriový monitor
}
// TADY CHYBÍ CO SE MÁ PROVÉST PŘI STISKU TLAČÍTKA START ... U MODE SE PŘIČÍTÁ MODE ...
// ...U STARTU BY SE MĚLA PŘEKLÁPĚT PROMĚNNÁ mamBezet - hoď si tu nějaký výpis do seriové linky a uvidíš že to funguje
}
lastTrueButtonStart = buttonStateStart; // uložím si nový pravý ošetřený stav tlačítka
}
lastButtonStart = buttonStateStart; // tady si to ulozim, v dalsim pruchodu loop() to zase porovnam s novym stavem, zda se to mezi tim nezmenilo
//-------------- konec ořetření tlačítka Start ----------
if(mode == 0) { // ******* LED1,LED2 vypnuto ********
if(mamBezet == false){
led1svetlo = false; // zhasni LED1
led2svetlo = false; // zhasni LED2
lcd.setCursor( 12, 2 );
lcd.print("STOP ");
} else {
lcd.setCursor( 12, 2 );
lcd.print("START");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 0");
}
if(mode == 1) { // ******* LED1,LED2 zapnuto ********
if(mamBezet == true){
led1svetlo = true;
Serial.println("Mode:1 - LED1 Zap");
led2svetlo = true;
// Serial.println(11);
lcd.setCursor( 12, 2 );
lcd.print("START");
}
else {
led1svetlo = false;
Serial.println("Mode:1 - LED1 Vyp");
led2svetlo = false;
lcd.setCursor( 12, 2 );
lcd.print("STOP ");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 1");
}
if(mode == 2) { // ******* LED1,LED2 blikání rychlé *******
if(mamBezet == true) { // ZRUŠENÁ PODMÍNKA mamBezet - zmena true za false
if(millis() - buttonTime > 10000){ // zjistím si jestli je čas něco provést, uběhlo už 10s od poslední akce?
lcd.setCursor ( 10, 2 );
lcd.print(" START ");
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
}
} else {
// vypis : "blikat začneme" - jestli chci vědět jak dlouho budu ještě čekat, tak vypíšu 10000 - (millis() - buttonTime
lcd.setCursor( 11, 2 );
lcd.print(10000 - (millis() - buttonTime)); // zobrazí se odpočet do blikání led v ms
lcd.setCursor( 15, 2 );
lcd.print(" ms");
}
} else {
lcd.setCursor( 11, 2 );
lcd.print(" STOP ");
led1svetlo = true;
led2svetlo = true;
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 2");
}
if(mode == 3) { // ******* LED1,LED2 blikání pomalé *******
if(mamBezet == true){
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
}
lcd.setCursor( 5, 2 );
lcd.print(" START ");
} else {
led1svetlo = false;
led2svetlo = false;
lcd.setCursor( 12, 2);
lcd.print("STOP ");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 3");
}
if(mode == 4) { // ******* LED1,LED2 blikání střídavé *******
if(mamBezet == true){
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
}
lcd.setCursor( 12, 2 );
lcd.print("START");
} else {
led1svetlo = false;
led2svetlo = false;
lcd.setCursor( 12, 2 );
lcd.print("STOP ");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 4");
}
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
dobrý den, do kodu jsem přidal třetí tlačítko, které má za úkol odčítat mode tedy selectDown. Druhé je přejmenováno na selectUp. Tlačítko Start/Stop v mode zůstává. Chodí to, mode Up od mode0 do mode4 a tlačítko Down odčítá. Problém mi nastavá tehdy, když Down odečte na mode0 a při jeho dalším stisknutí např. 6x jakoby do mínusu, musím taky potom 6x stisknout Up , abych se dostal zpět na mode0 ? Stiskám tlačítka v podstatě naprázdno a mohl bych asi do nekonečna ?
problém je i u mode4 a stiskání tlačítka dál ? jak tohle ošetřit ? děkuju
Kód: Vybrat vše
#define buttonSelect 2 // číslo pinu tlačítka SELECT pro výběr MODE nahoru
#define buttonStart 3 // číslo pinu tlačítka START/STOP - červené
#define buttonSelectDown 4 // číslo pinu tlačítka pro výběr MODE dolů
#define LED1 10 // číslo pinu LED1 zelená
#define LED2 11 // číslo pinu LED2 červená
#include <Wire.h> // knihovny pro LCD přes I2C
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // nastavení adresy I2C (0x27), počtu znaků, řádků LCD 20x4
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
boolean buttonStateStart = false;
boolean lastButtonStart = false;
boolean lastTrueButtonStart = false;
boolean buttonStateDown = false;
boolean lastButtonStateDown = false;
boolean lastTrueButtonStateDown = false;
boolean mamBezet = false;
unsigned long lastDebounceTime = 0; // čas posledního změny výstupního pinu
unsigned long lastDebounceTime2 = 0;
unsigned long lastDebounceTime3 = 0;
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í
unsigned long cas = 0;
long buttonTime; // čas začátku stisknutí tlačítka
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(buttonSelect, INPUT); // pin pro tlačítko buttonSelect nastaveno jako vstup
pinMode(buttonStart, INPUT); // pin pro tlačítko buttonStart nastaveno jako vstup
pinMode(buttonSelectDown, INPUT); //pin pro tlačítko buttonSelectDown nastaveno jako vstup
lcd.begin(); // inicializace LCD
lcd.backlight(); // zapnutí podsvícení
Serial.begin(9600); // konfigurace rychlosti seriového portu
Serial.println("Seriovy port aktivni"); // První výpis na seriový port
lcd.setCursor( 2, 1);
lcd.print("ready");
delay(1000);
}
void loop(){
//-------------- debounce pro tlačítko Select Up ----------
buttonState = digitalRead(buttonSelect); // 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) {
// přidáním podmínky - začátek počítání vždy např. od 10s
if(mamBezet == false) { // a taky přepnutí mode jen tehdy, když jsou mode ve Stop
mode++; // přičte k MODE hodnotu 1
//------- zrušením podmínky mode > 4 -------- Up dojde do mode=4 a Down vrací zpět na mode=0 , nechodí dokola 0,1,2,3,4,0,1 atd. -------
// 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
//---------------konec ošetření tlačítka Select Up -----------
//-------------- debounce pro tlačítko Select Down ----------
buttonStateDown = digitalRead(buttonSelectDown); // přečtení stavu tlačítka
if (buttonStateDown != lastButtonStateDown) { // kmita to, od minule se to zmenilo, zacnu debounce cas pocitat znovu (tedy od posledni zmeny, ktera je ted)
lastDebounceTime3 = millis();
}
if ((millis() - lastDebounceTime3) > debounceDelay) { // jo, uz se to dlouho nezmenilo, tak je to stabilni a spravna hodnota
if (buttonStateDown != lastTrueButtonStateDown) { // Pokud se stav tlačítka změnil tj. porovná se buttonState (stav tlačítka) s předchozím stavem
if(buttonStateDown == true) {
// přidáním podmínky docílím vždy celého odpočtu času 10s !
if(mamBezet == false) { // a taky přepnutí mode jen tehdy, když jsou mode ve Stop
mode--; // odečte od MODE hodnotu 1
}
}
lastTrueButtonStateDown = buttonStateDown; // uložím si nový pravý ošetřený stav tlačítka
}
}
lastButtonStateDown = buttonStateDown; // tady si to ulozim, v dalsim pruchodu loop() to zase porovnam s novym stavem, zda se to mezi tim nezmenilo
//-------------- konec ořetření tlačítka Select Down ----------
//-------------- debounce pro tlačítko START/STOP ----------
buttonStateStart = digitalRead(buttonStart); // přečtení stavu tlačítka
if (buttonStateStart != lastButtonStart) { // kmita to, od minule se to zmenilo, zacnu debounce cas pocitat znovu (tedy od posledni zmeny, ktera je ted)
lastDebounceTime2 = millis();
}
if ((millis() - lastDebounceTime2) > debounceDelay) { // jo, uz se to dlouho nezmenilo, tak je to stabilni a spravna hodnota
if (buttonStateStart != lastTrueButtonStart) { // Pokud se stav tlačítka změnil tj. porovná se buttonState (stav tlačítka) s předchozím stavem
if (buttonStateStart == true) {
mamBezet = !mamBezet;
buttonTime = millis();
Serial.println("START"); // výpis na seriový monitor
}
// TADY CHYBÍ CO SE MÁ PROVÉST PŘI STISKU TLAČÍTKA START ... U MODE SE PŘIČÍTÁ MODE ...
// ...U STARTU BY SE MĚLA PŘEKLÁPĚT PROMĚNNÁ mamBezet - hoď si tu nějaký výpis do seriové linky a uvidíš že to funguje
}
lastTrueButtonStart = buttonStateStart; // uložím si nový pravý ošetřený stav tlačítka
}
lastButtonStart = buttonStateStart; // tady si to ulozim, v dalsim pruchodu loop() to zase porovnam s novym stavem, zda se to mezi tim nezmenilo
//-------------- konec ořetření tlačítka Start/Stop ----------
if(mode == 0) { // ******* LED1,LED2 vypnuto ********
if(mamBezet == false){
led1svetlo = false; // zhasni LED1
led2svetlo = false; // zhasni LED2
lcd.setCursor( 12, 2 );
lcd.print("STOP ");
} else {
lcd.setCursor( 12, 2 );
lcd.print("START");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 0");
}
if(mode == 1) { // ******* LED1,LED2 zapnuto ********
if(mamBezet == true){
led1svetlo = true;
Serial.println("Mode:1 - LED1 Zap");
led2svetlo = true;
lcd.setCursor( 12, 2 );
lcd.print("START");
}
else {
led1svetlo = false;
Serial.println("Mode:1 - LED1 Vyp");
led2svetlo = false;
lcd.setCursor( 12, 2 );
lcd.print("STOP ");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 1");
}
if(mode == 2) { // ******* LED1,LED2 blikání rychlé *******
if(mamBezet == true) { // ZRUŠENÁ PODMÍNKA mamBezet - zmena true za false
if(millis() - buttonTime > 10000){ // zjistím si jestli je čas něco provést, uběhlo už 10s od poslední akce?
lcd.setCursor ( 10, 2 );
lcd.print(" START ");
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
}
} else {
// vypis : "blikat začneme" - jestli chci vědět jak dlouho budu ještě čekat, tak vypíšu 10000 - (millis() - buttonTime
lcd.setCursor( 11, 2 );
lcd.print(10000 - (millis() - buttonTime)); // zobrazí se odpočet do blikání led v ms
lcd.setCursor( 15, 2 );
lcd.print(" ms");
}
} else {
lcd.setCursor( 11, 2 );
lcd.print(" STOP ");
led1svetlo = false;
led2svetlo = false;
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 2");
}
if(mode == 3) { // ******* LED1,LED2 blikání pomalé *******
if(mamBezet == true){
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
}
lcd.setCursor( 5, 2 );
lcd.print(" START ");
} else {
led1svetlo = false;
led2svetlo = false;
lcd.setCursor( 12, 2);
lcd.print("STOP ");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 3");
}
if(mode == 4) { // ******* LED1,LED2 blikání střídavé *******
if(mamBezet == true){
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
}
lcd.setCursor( 12, 2 );
lcd.print("START");
} else {
led1svetlo = false;
led2svetlo = false;
lcd.setCursor( 12, 2 );
lcd.print("STOP ");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 4");
}
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
dobrý den, upraveny /přidány /do kodu podmínky, u problému dalšího stisknutí tlačítka u mode4 a mode0. Nyní při mode4 nebo mode0 tlačítka ihned reagují na stisknutí nahoru a dolů v mode.
tady je kod pro : Up + Down + Start/Stop v mode blikání led s výpisem na LCD 4x20 i2c
tady odkaz na video : https://www.youtube.com/watch?v=4aeQUBd ... e=youtu.be
děkuju
tady je kod pro : Up + Down + Start/Stop v mode blikání led s výpisem na LCD 4x20 i2c
Kód: Vybrat vše
#define buttonSelect 2 // číslo pinu tlačítka SELECT pro výběr MODE nahoru
#define buttonStart 3 // číslo pinu tlačítka START/STOP - červené
#define buttonSelectDown 4 // číslo pinu tlačítka pro výběr MODE dolů
#define LED1 10 // číslo pinu LED1 zelená
#define LED2 11 // číslo pinu LED2 červená
#include <Wire.h> // knihovny pro LCD přes I2C
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // nastavení adresy I2C (0x27), počtu znaků, řádků LCD 20x4
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
boolean buttonStateStart = false;
boolean lastButtonStart = false;
boolean lastTrueButtonStart = false;
boolean buttonStateDown = false;
boolean lastButtonStateDown = false;
boolean lastTrueButtonStateDown = false;
boolean mamBezet = false;
unsigned long lastDebounceTime = 0; // čas posledního změny výstupního pinu
unsigned long lastDebounceTime2 = 0;
unsigned long lastDebounceTime3 = 0;
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í
unsigned long cas = 0;
long buttonTime; // čas začátku stisknutí tlačítka
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(buttonSelect, INPUT); // pin pro tlačítko buttonSelect nastaveno jako vstup
pinMode(buttonStart, INPUT); // pin pro tlačítko buttonStart nastaveno jako vstup
pinMode(buttonSelectDown, INPUT); //pin pro tlačítko buttonSelectDown nastaveno jako vstup
lcd.begin(); // inicializace LCD
lcd.backlight(); // zapnutí podsvícení
Serial.begin(9600); // konfigurace rychlosti seriového portu
Serial.println("Seriovy port aktivni"); // První výpis na seriový port
lcd.setCursor( 2, 1);
lcd.print("ready");
delay(1000);
}
void loop(){
//-------------- debounce pro tlačítko Select Up ----------
buttonState = digitalRead(buttonSelect); // 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) {
// přidáním podmínky - začátek počítání vždy např. od 10s
if(mamBezet == false) { // a taky přepnutí mode jen tehdy, když jsou mode ve Stop
if(mode < 4) { // když je hodnota mode menší než 4
mode++; // přičte k mode hodnotu 1
}
}
}
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
//---------------konec ošetření tlačítka Select Up -----------
//-------------- debounce pro tlačítko Select Down ----------
buttonStateDown = digitalRead(buttonSelectDown); // přečtení stavu tlačítka
if (buttonStateDown != lastButtonStateDown) { // kmita to, od minule se to zmenilo, zacnu debounce cas pocitat znovu (tedy od posledni zmeny, ktera je ted)
lastDebounceTime3 = millis();
}
if ((millis() - lastDebounceTime3) > debounceDelay) { // jo, uz se to dlouho nezmenilo, tak je to stabilni a spravna hodnota
if (buttonStateDown != lastTrueButtonStateDown) { // Pokud se stav tlačítka změnil tj. porovná se buttonState (stav tlačítka) s předchozím stavem
if(buttonStateDown == true) {
// přidáním podmínky docílím vždy celého odpočtu času 10s !
if(mamBezet == false) { // a taky přepnutí mode jen tehdy, když jsou mode ve Stop
if(mode > 0) { // když je mode větší než 0
mode--; // odečte od mode hodnotu 1
}
}
}
lastTrueButtonStateDown = buttonStateDown; // uložím si nový pravý ošetřený stav tlačítka
}
}
lastButtonStateDown = buttonStateDown; // tady si to ulozim, v dalsim pruchodu loop() to zase porovnam s novym stavem, zda se to mezi tim nezmenilo
//-------------- konec ořetření tlačítka Select Down ----------
//-------------- debounce pro tlačítko START/STOP ----------
buttonStateStart = digitalRead(buttonStart); // přečtení stavu tlačítka
if (buttonStateStart != lastButtonStart) { // kmita to, od minule se to zmenilo, zacnu debounce cas pocitat znovu (tedy od posledni zmeny, ktera je ted)
lastDebounceTime2 = millis();
}
if ((millis() - lastDebounceTime2) > debounceDelay) { // jo, uz se to dlouho nezmenilo, tak je to stabilni a spravna hodnota
if (buttonStateStart != lastTrueButtonStart) { // Pokud se stav tlačítka změnil tj. porovná se buttonState (stav tlačítka) s předchozím stavem
if (buttonStateStart == true) {
mamBezet = !mamBezet;
buttonTime = millis();
Serial.println("START"); // výpis na seriový monitor
}
// TADY CHYBÍ CO SE MÁ PROVÉST PŘI STISKU TLAČÍTKA START ... U MODE SE PŘIČÍTÁ MODE ...
// ...U STARTU BY SE MĚLA PŘEKLÁPĚT PROMĚNNÁ mamBezet - hoď si tu nějaký výpis do seriové linky a uvidíš že to funguje
}
lastTrueButtonStart = buttonStateStart; // uložím si nový pravý ošetřený stav tlačítka
}
lastButtonStart = buttonStateStart; // tady si to ulozim, v dalsim pruchodu loop() to zase porovnam s novym stavem, zda se to mezi tim nezmenilo
//-------------- konec ořetření tlačítka Start/Stop ----------
if(mode == 0) { // ******* LED1,LED2 vypnuto ********
if(mamBezet == false){
led1svetlo = false; // zhasni LED1
led2svetlo = false; // zhasni LED2
lcd.setCursor( 12, 2 );
lcd.print("STOP ");
} else {
lcd.setCursor( 12, 2 );
lcd.print("START");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 0");
}
if(mode == 1) { // ******* LED1,LED2 zapnuto ********
if(mamBezet == true){
led1svetlo = true;
Serial.println("Mode:1 - LED1 Zap");
led2svetlo = true;
lcd.setCursor( 12, 2 );
lcd.print("START");
}
else {
led1svetlo = false;
Serial.println("Mode:1 - LED1 Vyp");
led2svetlo = false;
lcd.setCursor( 12, 2 );
lcd.print("STOP ");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 1");
}
if(mode == 2) { // ******* LED1,LED2 blikání rychlé *******
if(mamBezet == true) { // ZRUŠENÁ PODMÍNKA mamBezet - zmena true za false
if(millis() - buttonTime > 10000){ // zjistím si jestli je čas něco provést, uběhlo už 10s od poslední akce?
lcd.setCursor ( 10, 2 );
lcd.print(" START ");
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
}
} else {
// vypis : "blikat začneme" - jestli chci vědět jak dlouho budu ještě čekat, tak vypíšu 10000 - (millis() - buttonTime
lcd.setCursor( 11, 2 );
lcd.print(10000 - (millis() - buttonTime)); // zobrazí se odpočet do blikání led v ms
lcd.setCursor( 15, 2 );
lcd.print(" ms");
}
} else {
lcd.setCursor( 11, 2 );
lcd.print(" STOP ");
led1svetlo = false;
led2svetlo = false;
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 2");
}
if(mode == 3) { // ******* LED1,LED2 blikání pomalé *******
if(mamBezet == true){
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
}
lcd.setCursor( 5, 2 );
lcd.print(" START ");
} else {
led1svetlo = false;
led2svetlo = false;
lcd.setCursor( 12, 2);
lcd.print("STOP ");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 3");
}
if(mode == 4) { // ******* LED1,LED2 blikání střídavé *******
if(mamBezet == true){
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
}
lcd.setCursor( 12, 2 );
lcd.print("START");
} else {
led1svetlo = false;
led2svetlo = false;
lcd.setCursor( 12, 2 );
lcd.print("STOP ");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 4");
}
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
}
děkuju
Re: Mini CNC osa Z
Takže jsi na to přišel sám ? ... to je pocit, když něco vymyslíš a ono to funguje, co ?
Mno a teď k tomu přidělej to servo, kterým vlastně celá tahle konverzace začala.
Když to přepneš do mode5, a dáš start, tak pomocí selectUP a selectDOWN budeš moct nastavit pozici serva
Mno a teď k tomu přidělej to servo, kterým vlastně celá tahle konverzace začala.
Když to přepneš do mode5, a dáš start, tak pomocí selectUP a selectDOWN budeš moct nastavit pozici serva
Re: Mini CNC osa Z
dobrý den, super pocit, když něco funguje je to k nezaplacení, no radoval jsem se chvilku, jen do té doby, než jsem se pokusil v mode5 přidat servo, Nemůžu na to přijít. Tady se to aspoň trochu vrtí
v mode5 jsou zakomentované příkazy, protože , výpisy jsem odstranil , zpomalovaly mi servo, aspoň mi to tak připadalo.Taky mám servo napájené z pevného zdroje, kdy +5V a GND zdroje jdou přímo na servo, žlutý na pin9 Arduina a GND ze zdroje a Arduina jsou propojeny, problikával mi lcd, díky odběru serva a 9V baterka to dlouho neudržela. Taky mě zarazilo, že když jsem přepnul na mode5, tak se servo natočilo na polovinu svoji dráhy ? Nezačalo od 0 ? Když jsem si nechal vypsat pos na lcd, tak ty úhly neseděly s úhly na servu . děkuju
Kód: Vybrat vše
#define buttonSelectUp 2 // číslo pinu tlačítka SELECT pro výběr MODE nahoru
#define buttonStart 3 // číslo pinu tlačítka START/STOP - červené
#define buttonSelectDown 4 // číslo pinu tlačítka pro výběr MODE dolů
#define LED1 10 // číslo pinu LED1 zelená
#define LED2 11 // číslo pinu LED2 červená
#include <Wire.h> // knihovny pro LCD přes I2C
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // nastavení adresy I2C (0x27), počtu znaků, řádků LCD 20x4
#include <Servo.h> // knihovna pro ovládání serva
Servo myservo; // instance třídy servo viz. Objektově Orientované Programování
int pos = 0; // proměnná úhlu natočení serva
boolean buttonStateUp = false; // nejnovější hodnota načtená ze vstupního pinu
boolean lastButtonStateUp = false; // předchozí hodnota načtení ze vstupního pinu
boolean lastTrueButtonStateUp = false; // předchozí hodnota ošetřeného tlačítka
boolean buttonStateStart = false;
boolean lastButtonStart = false;
boolean lastTrueButtonStart = false;
boolean buttonStateDown = false;
boolean lastButtonStateDown = false;
boolean lastTrueButtonStateDown = false;
boolean mamBezet = false;
unsigned long lastDebounceTime = 0; // čas posledního změny výstupního pinu
unsigned long lastDebounceTime2 = 0;
unsigned long lastDebounceTime3 = 0;
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í
unsigned long cas = 0;
long buttonTime; // čas začátku stisknutí tlačítka
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(buttonSelectUp, INPUT); // pin pro tlačítko buttonSelect nastaveno jako vstup
pinMode(buttonStart, INPUT); // pin pro tlačítko buttonStart nastaveno jako vstup
pinMode(buttonSelectDown, INPUT); //pin pro tlačítko buttonSelectDown nastaveno jako vstup
myservo.attach(9); // pin pro servo
lcd.begin(); // inicializace LCD
lcd.backlight(); // zapnutí podsvícení
Serial.begin(9600); // konfigurace rychlosti seriového portu
Serial.println("Seriovy port aktivni"); // První výpis na seriový port
lcd.setCursor( 2, 1);
lcd.print("ready");
delay(1000);
}
void loop(){
//-------------- debounce pro tlačítko Select Up ----------
buttonStateUp = digitalRead(buttonSelectUp); // přečtení stavu tlačítka
if (buttonStateUp != lastButtonStateUp) { // 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 (buttonStateUp != lastTrueButtonStateUp) { // Pokud se stav tlačítka změnil tj. porovná se buttonState (stav tlačítka) s předchozím stavem
if(buttonStateUp == true) {
// přidáním podmínky - začátek počítání vždy např. od 10s
if(mamBezet == false) { // a taky přepnutí mode jen tehdy, když jsou mode ve Stop
if(mode < 5) { // když je hodnota mode menší než 5
mode++; // přičte k mode hodnotu 1
}
}
}
lastTrueButtonStateUp = buttonStateUp; // uložím si nový pravý ošetřený stav tlačítka
}
}
lastButtonStateUp = buttonStateUp; // tady si to ulozim, v dalsim pruchodu loop() to zase porovnam s novym stavem, zda se to mezi tim nezmenilo
//---------------konec ošetření tlačítka Select Up -----------
//-------------- debounce pro tlačítko Select Down ----------
buttonStateDown = digitalRead(buttonSelectDown); // přečtení stavu tlačítka
if (buttonStateDown != lastButtonStateDown) { // kmita to, od minule se to zmenilo, zacnu debounce cas pocitat znovu (tedy od posledni zmeny, ktera je ted)
lastDebounceTime3 = millis();
}
if ((millis() - lastDebounceTime3) > debounceDelay) { // jo, uz se to dlouho nezmenilo, tak je to stabilni a spravna hodnota
if (buttonStateDown != lastTrueButtonStateDown) { // Pokud se stav tlačítka změnil tj. porovná se buttonState (stav tlačítka) s předchozím stavem
if(buttonStateDown == true) {
// přidáním podmínky docílím vždy celého odpočtu času 10s !
if(mamBezet == false) { // a taky přepnutí mode jen tehdy, když jsou mode ve Stop
if(mode > 0) { // když je mode větší než 0
mode--; // odečte od mode hodnotu 1
}
}
}
lastTrueButtonStateDown = buttonStateDown; // uložím si nový pravý ošetřený stav tlačítka
}
}
lastButtonStateDown = buttonStateDown; // tady si to ulozim, v dalsim pruchodu loop() to zase porovnam s novym stavem, zda se to mezi tim nezmenilo
//-------------- konec ořetření tlačítka Select Down ----------
//-------------- debounce pro tlačítko START/STOP ----------
buttonStateStart = digitalRead(buttonStart); // přečtení stavu tlačítka
if (buttonStateStart != lastButtonStart) { // kmita to, od minule se to zmenilo, zacnu debounce cas pocitat znovu (tedy od posledni zmeny, ktera je ted)
lastDebounceTime2 = millis();
}
if ((millis() - lastDebounceTime2) > debounceDelay) { // jo, uz se to dlouho nezmenilo, tak je to stabilni a spravna hodnota
if (buttonStateStart != lastTrueButtonStart) { // Pokud se stav tlačítka změnil tj. porovná se buttonState (stav tlačítka) s předchozím stavem
if (buttonStateStart == true) {
mamBezet = !mamBezet;
buttonTime = millis();
Serial.println("START"); // výpis na seriový monitor
}
// TADY CHYBÍ CO SE MÁ PROVÉST PŘI STISKU TLAČÍTKA START ... U MODE SE PŘIČÍTÁ MODE ...
// ...U STARTU BY SE MĚLA PŘEKLÁPĚT PROMĚNNÁ mamBezet - hoď si tu nějaký výpis do seriové linky a uvidíš že to funguje
}
lastTrueButtonStart = buttonStateStart; // uložím si nový pravý ošetřený stav tlačítka
}
lastButtonStart = buttonStateStart; // tady si to ulozim, v dalsim pruchodu loop() to zase porovnam s novym stavem, zda se to mezi tim nezmenilo
//-------------- konec ořetření tlačítka Start/Stop ----------
if(mode == 0) { // ******* LED1,LED2 vypnuto ********
if(mamBezet == false){
led1svetlo = false; // zhasni LED1
led2svetlo = false; // zhasni LED2
lcd.setCursor( 12, 2 );
lcd.print("STOP ");
} else {
lcd.setCursor( 12, 2 );
lcd.print("START");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 0");
}
if(mode == 1) { // ******* LED1,LED2 zapnuto ********
if(mamBezet == true){
led1svetlo = true;
led2svetlo = true;
lcd.setCursor( 12, 2 );
lcd.print("START");
}
else {
led1svetlo = false;
led2svetlo = false;
lcd.setCursor( 12, 2 );
lcd.print("STOP ");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 1");
}
if(mode == 2) { // ******* LED1,LED2 blikání rychlé *******
if(mamBezet == true) { // ZRUŠENÁ PODMÍNKA mamBezet - zmena true za false
if(millis() - buttonTime > 10000){ // zjistím si jestli je čas něco provést, uběhlo už 10s od poslední akce?
lcd.setCursor ( 10, 2 );
lcd.print(" START ");
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
}
} else {
// vypis : "blikat začneme" - jestli chci vědět jak dlouho budu ještě čekat, tak vypíšu 10000 - (millis() - buttonTime
lcd.setCursor( 11, 2 );
lcd.print(10000 - (millis() - buttonTime)); // zobrazí se odpočet do blikání led v ms
lcd.setCursor( 15, 2 );
lcd.print(" ms");
}
} else {
lcd.setCursor( 11, 2 );
lcd.print(" STOP ");
led1svetlo = false;
led2svetlo = false;
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 2");
}
if(mode == 3) { // ******* LED1,LED2 blikání pomalé *******
if(mamBezet == true){
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
}
lcd.setCursor( 5, 2 );
lcd.print(" START ");
} else {
led1svetlo = false;
led2svetlo = false;
lcd.setCursor( 12, 2);
lcd.print("STOP ");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 3");
}
if(mode == 4) { // ******* LED1,LED2 blikání střídavé *******
if(mamBezet == true){
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
}
lcd.setCursor( 12, 2 );
lcd.print("START");
} else {
led1svetlo = false;
led2svetlo = false;
lcd.setCursor( 12, 2 );
lcd.print("STOP ");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 4");
}
if(mode == 5){ // ******* SERVO *******
if(buttonStateStart == false){
// if(buttonSelectUp == true){
if(buttonStateUp == false){
if (pos <= 175) {
pos +=1;
myservo.write(pos);
}
}
// }
// if(buttonSelectDown == true){
if(buttonStateDown == false){
if(pos >= 5){
pos -=1;
myservo.write(pos);
}
}
// }
lcd.setCursor( 12, 2);
lcd.print("STOP ");
if(mamBezet == true){
lcd.setCursor( 12, 2);
lcd.print("START");
}
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 5");
}
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
Kód: Vybrat vše
if(mode == 5){//mode 5
if(mamBezet == true) {// program spuštěn
if(lastTrueButtonStateUp == true){// stisknuto tlačítko selectUp
//pokud můžu a nebourám servem do krajní pozice, měním pozici serva
}
if(lastTrueButtonStateDown == true){// stisknuto tlačítko selectDown
//pokud můžu a nebourám servem do druhé krajní pozice, měním pozici serva druhým směrem
}
}
}
Re: Mini CNC osa Z
dobrý den, upravil jsem kod - mode5, ale vůbec mě to nepustí na ten mode5
pochopil jsem správně, že pod ... //pokud můžu a nebourám servem do druhé krajní pozice, měním pozici serva druhým směrem....má být natáčení serva do "skoro" krajní pozice ? děkuju
Kód: Vybrat vše
#define buttonSelectUp 2 // číslo pinu tlačítka SELECT pro výběr MODE nahoru
#define buttonStart 3 // číslo pinu tlačítka START/STOP - červené
#define buttonSelectDown 4 // číslo pinu tlačítka pro výběr MODE dolů
#define LED1 10 // číslo pinu LED1 zelená
#define LED2 11 // číslo pinu LED2 červená
#include <Wire.h> // knihovny pro LCD přes I2C
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // nastavení adresy I2C (0x27), počtu znaků, řádků LCD 20x4
#include <Servo.h> // knihovna pro ovládání serva
Servo myservo; // instance třídy servo viz. Objektově Orientované Programování
int pos = 0; // proměnná úhlu natočení serva
boolean buttonStateUp = false; // nejnovější hodnota načtená ze vstupního pinu
boolean lastButtonStateUp = false; // předchozí hodnota načtení ze vstupního pinu
boolean lastTrueButtonStateUp = false; // předchozí hodnota ošetřeného tlačítka
boolean buttonStateStart = false;
boolean lastButtonStart = false;
boolean lastTrueButtonStart = false;
boolean buttonStateDown = false;
boolean lastButtonStateDown = false;
boolean lastTrueButtonStateDown = false;
boolean mamBezet = false;
unsigned long lastDebounceTime = 0; // čas posledního změny výstupního pinu
unsigned long lastDebounceTime2 = 0;
unsigned long lastDebounceTime3 = 0;
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í
unsigned long cas = 0;
long buttonTime; // čas začátku stisknutí tlačítka
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(buttonSelectUp, INPUT); // pin pro tlačítko buttonSelect nastaveno jako vstup
pinMode(buttonStart, INPUT); // pin pro tlačítko buttonStart nastaveno jako vstup
pinMode(buttonSelectDown, INPUT); //pin pro tlačítko buttonSelectDown nastaveno jako vstup
myservo.attach(9); // pin pro servo
lcd.begin(); // inicializace LCD
lcd.backlight(); // zapnutí podsvícení
Serial.begin(9600); // konfigurace rychlosti seriového portu
Serial.println("Seriovy port aktivni"); // První výpis na seriový port
lcd.setCursor( 2, 1);
lcd.print("ready");
delay(1000);
}
void loop(){
//-------------- debounce pro tlačítko Select Up ----------
buttonStateUp = digitalRead(buttonSelectUp); // přečtení stavu tlačítka
if (buttonStateUp != lastButtonStateUp) { // 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 (buttonStateUp != lastTrueButtonStateUp) { // Pokud se stav tlačítka změnil tj. porovná se buttonState (stav tlačítka) s předchozím stavem
if(buttonStateUp == true) {
// přidáním podmínky - začátek počítání vždy např. od 10s
if(mamBezet == false) { // a taky přepnutí mode jen tehdy, když jsou mode ve Stop
if(mode < 5) { // když je hodnota mode menší než 5
mode++; // přičte k mode hodnotu 1
}
}
}
lastTrueButtonStateUp = buttonStateUp; // uložím si nový pravý ošetřený stav tlačítka
}
}
lastButtonStateUp = buttonStateUp; // tady si to ulozim, v dalsim pruchodu loop() to zase porovnam s novym stavem, zda se to mezi tim nezmenilo
//---------------konec ošetření tlačítka Select Up -----------
//-------------- debounce pro tlačítko Select Down ----------
buttonStateDown = digitalRead(buttonSelectDown); // přečtení stavu tlačítka
if (buttonStateDown != lastButtonStateDown) { // kmita to, od minule se to zmenilo, zacnu debounce cas pocitat znovu (tedy od posledni zmeny, ktera je ted)
lastDebounceTime3 = millis();
}
if ((millis() - lastDebounceTime3) > debounceDelay) { // jo, uz se to dlouho nezmenilo, tak je to stabilni a spravna hodnota
if (buttonStateDown != lastTrueButtonStateDown) { // Pokud se stav tlačítka změnil tj. porovná se buttonState (stav tlačítka) s předchozím stavem
if(buttonStateDown == true) {
// přidáním podmínky docílím vždy celého odpočtu času 10s !
if(mamBezet == false) { // a taky přepnutí mode jen tehdy, když jsou mode ve Stop
if(mode > 0) { // když je mode větší než 0
mode--; // odečte od mode hodnotu 1
}
}
}
lastTrueButtonStateDown = buttonStateDown; // uložím si nový pravý ošetřený stav tlačítka
}
}
lastButtonStateDown = buttonStateDown; // tady si to ulozim, v dalsim pruchodu loop() to zase porovnam s novym stavem, zda se to mezi tim nezmenilo
//-------------- konec ořetření tlačítka Select Down ----------
//-------------- debounce pro tlačítko START/STOP ----------
buttonStateStart = digitalRead(buttonStart); // přečtení stavu tlačítka
if (buttonStateStart != lastButtonStart) { // kmita to, od minule se to zmenilo, zacnu debounce cas pocitat znovu (tedy od posledni zmeny, ktera je ted)
lastDebounceTime2 = millis();
}
if ((millis() - lastDebounceTime2) > debounceDelay) { // jo, uz se to dlouho nezmenilo, tak je to stabilni a spravna hodnota
if (buttonStateStart != lastTrueButtonStart) { // Pokud se stav tlačítka změnil tj. porovná se buttonState (stav tlačítka) s předchozím stavem
if (buttonStateStart == true) {
mamBezet = !mamBezet;
buttonTime = millis();
Serial.println("START"); // výpis na seriový monitor
}
// TADY CHYBÍ CO SE MÁ PROVÉST PŘI STISKU TLAČÍTKA START ... U MODE SE PŘIČÍTÁ MODE ...
// ...U STARTU BY SE MĚLA PŘEKLÁPĚT PROMĚNNÁ mamBezet - hoď si tu nějaký výpis do seriové linky a uvidíš že to funguje
}
lastTrueButtonStart = buttonStateStart; // uložím si nový pravý ošetřený stav tlačítka
}
lastButtonStart = buttonStateStart; // tady si to ulozim, v dalsim pruchodu loop() to zase porovnam s novym stavem, zda se to mezi tim nezmenilo
//-------------- konec ořetření tlačítka Start/Stop ----------
if(mode == 0) { // ******* LED1,LED2 vypnuto ********
if(mamBezet == false){
led1svetlo = false; // zhasni LED1
led2svetlo = false; // zhasni LED2
lcd.setCursor( 12, 2 );
lcd.print("STOP ");
} else {
lcd.setCursor( 12, 2 );
lcd.print("START");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 0");
}
if(mode == 1) { // ******* LED1,LED2 zapnuto ********
if(mamBezet == true){
led1svetlo = true;
led2svetlo = true;
lcd.setCursor( 12, 2 );
lcd.print("START");
}
else {
led1svetlo = false;
led2svetlo = false;
lcd.setCursor( 12, 2 );
lcd.print("STOP ");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 1");
}
if(mode == 2) { // ******* LED1,LED2 blikání rychlé *******
if(mamBezet == true) { // ZRUŠENÁ PODMÍNKA mamBezet - zmena true za false
if(millis() - buttonTime > 10000){ // zjistím si jestli je čas něco provést, uběhlo už 10s od poslední akce?
lcd.setCursor ( 10, 2 );
lcd.print(" START ");
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
}
} else {
// vypis : "blikat začneme" - jestli chci vědět jak dlouho budu ještě čekat, tak vypíšu 10000 - (millis() - buttonTime
lcd.setCursor( 11, 2 );
lcd.print(10000 - (millis() - buttonTime)); // zobrazí se odpočet do blikání led v ms
lcd.setCursor( 15, 2 );
lcd.print(" ms");
}
} else {
lcd.setCursor( 11, 2 );
lcd.print(" STOP ");
led1svetlo = false;
led2svetlo = false;
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 2");
}
if(mode == 3) { // ******* LED1,LED2 blikání pomalé *******
if(mamBezet == true){
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
}
lcd.setCursor( 5, 2 );
lcd.print(" START ");
} else {
led1svetlo = false;
led2svetlo = false;
lcd.setCursor( 12, 2);
lcd.print("STOP ");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 3");
}
if(mode == 4) { // ******* LED1,LED2 blikání střídavé *******
if(mamBezet == true){
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
}
lcd.setCursor( 12, 2 );
lcd.print("START");
} else {
led1svetlo = false;
led2svetlo = false;
lcd.setCursor( 12, 2 );
lcd.print("STOP ");
}
lcd.setCursor( 2, 1 );
lcd.print("Mode 4");
}
if(mode == 5){ // ********** SERVO **********
if(mamBezet == true) { // program spuštěn
if(lastTrueButtonStateUp == true){ // stisknuto tlačítko selectUp
//pokud můžu a nebourám servem do krajní pozice, měním pozici serva
if(pos <= 175){
pos +=1;
myservo.write(pos);
}
}
if(lastTrueButtonStateDown == true){ // stisknuto tlačítko selectDown
//pokud můžu a nebourám servem do druhé krajní pozice, měním pozici serva druhým směrem
if(pos >= 5){
pos -=1;
myservo.write(pos);
}
}
}
}
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
}
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 38 hostů