Stránka 14 z 27
Re: Mini CNC osa Z
Napsal: 16 říj 2019, 19:18
od kiRRow
nemám momentálně na čem to otestovat ... ale zkus to střídavé blikání pojmout takhle ...
Kód: Vybrat vše
if(mode == 4) {
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
led1svetlo = !led1svetlo; // do hodnoty led1svetlo zapíšu její negovanou hodnotu, svítila-li zhasne, byla-li zhaslá rožne se
led2svetlo = !led1svetlo; // do hodnoty led2svetlo zapíšu negovanou hodnotu led1svetlo, pokud led1 svítí chci led2 zhaslou a naopak
predchoziMillis3 = aktualniMillis; // v tento čas jsem provedl poslední akci
}
}
už se to pomalu blíží k slušnému programu ... ještě to očesat a je to

Re: Mini CNC osa Z
Napsal: 17 říj 2019, 15:36
od Hanz
dobrý den, pokusil jsem se dále zkoušet a testovat sketch s blikáním led, hlavně tu část, kde má jít o blikání střídavé. Myslím si, že se mi to povedlo, ale raději budu opatrnější s oslavama. Sketch je funkční, přidány komentáře, tady je :
Kód: Vybrat vše
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 predchoziMillis4; // předchozí čas pro střídavé blikání
boolean led1svetlo; // pomocná hodnota led1svetlo
boolean led2svetlo; // pomocná hodnota led2svetlo
#define Tlacitko 7 // pin pro tlačítko
#define led1 10 // pin pro led1 zelená
#define led2 11 // pin pro led2 červená
int mode = 0; // 0 - Vypnuto, 1 - Zapnuto, 2 - Blikání rychlé, 3 - Blikání pomalé, 4 - Blikání střídavé
void setup() {
pinMode(led1, OUTPUT); // pin led1 nastaven jako výstup
pinMode(led2, OUTPUT); // pin led2 nastaven jako výstup
pinMode(Tlacitko, INPUT); // pin tlačítka nastaven jako vstup
digitalWrite(Tlacitko,HIGH); //
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(){
if ((digitalRead(Tlacitko)) == LOW) // tady se přečte stav tlačítka
{
mode++; // přičte k MODE hodnotu 1
if (mode > 4) mode = 0; // když je mode větší jak 4 tak ho vynuluj
delay(200); // prodleva proti záchvěvům tlačítka 250ms
}
if(mode == 0) {
// ******* led1, led2 vypnuto ********
led1svetlo = false; // zhasni led1
Serial.println("led1 nesvítí"); // výpis na seriový monitor
led2svetlo = false; // zhasni led2
Serial.println("led2 nesvítí"); // výpis na seriový monitor
}
if(mode == 1) {
// ******* led1, led2 svítí ********
led1svetlo = true; // rožni led1
Serial.println("led1 svítí"); // výpis na seriový monitor
led2svetlo = true; // rožni led2
Serial.println("led2 svítí"); // výpis na seriový monitor
}
if(mode == 2) {
// ******* led1 bliká rychle *******
aktualniMillis = millis(); //podívám se na hodinky - aktuální čas
if(led1svetlo){ // potřebuju led1 zhasnout nebo rosvítit?
if(aktualniMillis - predchoziMillis1 > 200) { // pokud zhasnout uběhlo už 200ms od poslední akce?
predchoziMillis1 = aktualniMillis; // v tento čas jsem provedl poslední akci
led1svetlo = false ; //zhasni led1
}
}else if(aktualniMillis - predchoziMillis1 > 200) { // pokud zhasnout uběhlo už 200ms od poslední akce?
predchoziMillis1 = aktualniMillis; // v tento čas jsem provedl poslední akci
led1svetlo = true; //rozsviť led1
Serial.println("led1 bliká rychle"); // výpis na seriový monitor
}
// ******* led2 bliká rychle *******
aktualniMillis = millis(); //podívam se na hodinky - aktuální čas
if(led2svetlo){ // potřebuju led2 zhasnout nebo rosvítit?
if(aktualniMillis - predchoziMillis2 > 200) { // pokud zhasnout uběhlo už 200ms od poslední akce?
predchoziMillis2 = aktualniMillis; // v tento čas jsem provedl poslední akci
led2svetlo = false; //zhasni led2
}
}else if(aktualniMillis - predchoziMillis2 > 200) { // pokud zhasnout uběhlo už 200ms od poslední akce?
predchoziMillis2 = aktualniMillis; // v tento čas jsem provedl poslední akci
led2svetlo = true; // rozsviť led2
Serial.println("led2 bliká rychle"); // výpis na seriový monitor
}
}
if(mode == 3) {
// ******* led1 bliká pomalu *******
aktualniMillis = millis(); //podívám se na hodinky - aktuální čas
if(led1svetlo){ // potřebuju led1 zhasnout nebo rosvítit?
if(aktualniMillis - predchoziMillis1 > 500) { // pokud zhasnout uběhlo už 500ms od poslední akce?
predchoziMillis1 = aktualniMillis; // v tento čas jsem provedl poslední akci
led1svetlo = false; // zhasni led1
}
}else if(aktualniMillis - predchoziMillis1 > 500) { // pokud zhasnout uběhlo už 500ms od poslední akce?
predchoziMillis1 = aktualniMillis; // v tento čas jsem provedl poslední akci
led1svetlo = true; // rozsviť led1
Serial.println("led1 bliká pomalu"); // výpis na seriový monitor
}
// ******* led2 bliká pomalu *******
aktualniMillis = millis(); //podívam se na hodinky - aktuální čas
if(led2svetlo){ // potřebuju led2 zhasnout nebo rosvítit?
if(aktualniMillis - predchoziMillis2 > 500) { // pokud zhasnout uběhlo už 500ms od poslední akce?
predchoziMillis2 = aktualniMillis; // v tento čas jsem provedl poslední akci
led2svetlo = false; // zhasni led2
}
}else if(aktualniMillis - predchoziMillis2 > 500) { // pokud zhasnout uběhlo už 500ms od poslední akce?
predchoziMillis2 = aktualniMillis; // v tento čas jsem provedl poslední akci
led2svetlo = true; // rozsviť led2
Serial.println("led2 bliká pomalu"); // výpis na seriový monitor
}
}
if(mode == 4) {
// ******* led1 bliká střídavě *******
aktualniMillis = millis(); //podívám se na hodinky - aktuální čas
if(led1svetlo){ // potřebuju led1 zhasnout nebo rosvítit?
if(aktualniMillis - predchoziMillis3 > 500) { // pokud zhasnout uběhlo už 500ms od poslední akce?
led1svetlo = false; // zhasni led1
predchoziMillis3 = aktualniMillis; // v tento čas jsem provedl poslední akci
}
}else if(aktualniMillis - predchoziMillis3 > 500) { // pokud zhasnout uběhlo už 500ms od poslední akce?
led1svetlo = true; // rožni led1
predchoziMillis3 = aktualniMillis; // v tento čas jsem provedl poslední akci
Serial.println("led1 bliká střídavě"); // výpis na seriový monitor
}
digitalWrite(led2,!led1svetlo); // aktualizace stavu led2 ?!
// ******* led2 bliká střídavě *******
aktualniMillis = millis(); //podívam se na hodinky - aktuální čas
if(led2svetlo){ // potřebuju led2 zhasnout nebo rosvítit?
if(aktualniMillis - predchoziMillis4 > 500) { // pokud zhasnout uběhlo už 500ms od poslední akce?
// predchoziMillis4 = aktualniMillis; // v tento čas jsem provedl poslední akci
/* do hodnoty led2svetlo zapíšu negovanou hodnotu led1svetlo, pokud led1 svítí chci led2 zhaslou a naopak
čas blikání se bude řídit časem blikání led1svetlo */
led2svetlo = !led1svetlo; // aktualizace stavu proměnné led2
}
}else if(aktualniMillis - predchoziMillis4 > 500) { // pokud zhasnout uběhlo už 500ms od poslední akce?
// predchoziMillis4 = aktualniMillis; // v tento čas jsem provedl poslední akci
/* do hodnoty led2svetlo zapíšu negovanou hodnotu led1svetlo, pokud led1 svítí chci led2 zhaslou a naopak
čas blikání se bude řídit časem blikání led1svetlo */
led2svetlo = !led1svetlo; // aktualizace stavu proměnné led2
Serial.println("led2 bliká střídavě"); // výpis na seriový monitor
}
}
digitalWrite(led1,led1svetlo); // aktualizace stavu led1, zápis proměnné na výstupní pin 10
digitalWrite(led2,led2svetlo); // aktualizace stavu led2, zápis proměnné na výstupní pin 11
}
stojí za zmínku, že jsem musel v mode==4 přidat aktualizaci stavu led2 !?
Kód: Vybrat vše
digitalWrite(led2,!led1svetlo); // aktualizace stavu led2 ?!
// ******* led2 bliká střídavě *******
aktualniMillis = millis(); //podívam se na hodinky - aktuální čas
a taky zrušit provedení poslední akce predchoziMillis4 - nyní je napsán jako text
Kód: Vybrat vše
// ******* led2 bliká střídavě *******
aktualniMillis = millis(); //podívam se na hodinky - aktuální čas
if(led2svetlo){ // potřebuju led2 zhasnout nebo rosvítit?
if(aktualniMillis - predchoziMillis4 > 500) { // pokud zhasnout uběhlo už 500ms od poslední akce?
// predchoziMillis4 = aktualniMillis; // v tento čas jsem provedl poslední akci
/* do hodnoty led2svetlo zapíšu negovanou hodnotu led1svetlo, pokud led1 svítí chci led2 zhaslou a naopak
čas blikání se bude řídit časem blikání led1svetlo */
led2svetlo = !led1svetlo; // aktualizace stavu proměnné led2
}
}else if(aktualniMillis - predchoziMillis4 > 500) { // pokud zhasnout uběhlo už 500ms od poslední akce?
// predchoziMillis4 = aktualniMillis; // v tento čas jsem provedl poslední akci
/* do hodnoty led2svetlo zapíšu negovanou hodnotu led1svetlo, pokud led1 svítí chci led2 zhaslou a naopak
čas blikání se bude řídit časem blikání led1svetlo */
led2svetlo = !led1svetlo; // aktualizace stavu proměnné led2
Serial.println("led2 bliká střídavě"); // výpis na seriový monitor
}
mám to na stole, od mačkání tlačítka už mozol ,ale hodně pomohl výpis na seriový monitor, aspoň jsem věděl, kde v kodu zrovna jsem, když mi neblikalo nic.
Re: Mini CNC osa Z
Napsal: 17 říj 2019, 18:49
od kiRRow
V minulém příspěvku jsem ti posílal kód jak by to střídavé blikání mělo vypadat a pracovat. Čti, prosím, co ti píšu, protože jinak nemá cenu ti už odpovídat.
Re: Mini CNC osa Z
Napsal: 17 říj 2019, 18:52
od Hanz
vyzkoušel jsem , ale bohužel mi to nešlo, no ale pro jistotu to vyzkouším ještě jednou.
Re: Mini CNC osa Z
Napsal: 17 říj 2019, 21:35
od Hanz
dobrý den, jsem zmatkař ! Znovu jsem vyzkoušel dodělat střídavé blikání od kiRRow a je plně funkční - zprvu jsem špatně pochopil

tady je Funkční sketch :
Kód: Vybrat vše
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 predchoziMillis4; // předchozí čas pro střídavé blikání
boolean led1svetlo; // pomocná hodnota led1svetlo
boolean led2svetlo; // pomocná hodnota led2svetlo
#define Tlacitko 7 // pin pro tlačítko
#define led1 10 // pin pro led1 zelená
#define led2 11 // pin pro led2 červená
int mode = 0; // 0 - Vypnuto, 1 - Zapnuto, 2 - Blikání rychlé, 3 - Blikání pomalé, 4 - Blikání střídavé
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(Tlacitko, INPUT);
digitalWrite(Tlacitko,HIGH);
// konfigurace rychlosti seriového portu
Serial.begin(9600);
while (!Serial) { ; // čekaní na připojení seriového portu, pry nezbytné pouze u desky Leonardo
}
// První výpis na seriový port
Serial.println("Seriovy port aktivni");
}
void loop(){
if ((digitalRead(Tlacitko)) == LOW) // tady se přečte stav tlačítka
{
mode++; // přičte k MODE hodnotu 1
if (mode > 4) mode = 0; // když je mode větší jak 4 tak ho vynuluj
delay(200); // prodleva proti záchvěvům tlačítka
}
if(mode == 0) {
// ******* led1, led2 vypnuto ********
led1svetlo = false; //zhasni led1
Serial.println("led1 nesvítí");
led2svetlo = false; //zhasni led2
Serial.println("led2 nesvítí");
}
if(mode == 1) {
// ******* led1, led2 svítí ********
led1svetlo = true; //rožni led1
Serial.println("led1 svítí");
led2svetlo = true; //rožni led2
Serial.println("led2 svítí");
}
if(mode == 2) {
// ******* led1 bliká rychle *******
aktualniMillis = millis(); //podívám se na hodinky - aktuální čas
if(led1svetlo){ // potřebuju led1 zhasnout nebo rosvítit?
if(aktualniMillis - predchoziMillis1 > 200) { // pokud zhasnout uběhlo už 200ms od poslední akce?
predchoziMillis1 = aktualniMillis; // v tento čas jsem provedl poslední akci
led1svetlo = false ; //zhasni led1
Serial.println("led1 rychle VYP");
}
}else if(aktualniMillis - predchoziMillis1 > 200) { // pokud zhasnout uběhlo už 200ms od poslední akce?
predchoziMillis1 = aktualniMillis; // v tento čas jsem provedl poslední akci
led1svetlo = true; //rozsviť led1
Serial.println("led1 rychle ZAP");
}
// ******* led2 bliká rychle *******
aktualniMillis = millis(); //podívam se na hodinky - aktuální čas
if(led2svetlo){ // potřebuju led2 zhasnout nebo rosvítit?
if(aktualniMillis - predchoziMillis2 > 200) { // pokud zhasnout uběhlo už 200ms od poslední akce?
predchoziMillis2 = aktualniMillis; // v tento čas jsem provedl poslední akci
led2svetlo = false; //zhasni led2
Serial.println("led2 rychle VYP");
}
}else if(aktualniMillis - predchoziMillis2 > 200) { // pokud zhasnout uběhlo už 200ms od poslední akce?
predchoziMillis2 = aktualniMillis; // v tento čas jsem provedl poslední akci
led2svetlo = true; // rozsviť led2
Serial.println("led2 rychle ZAP");
}
}
if(mode == 3) {
// ******* led1 bliká pomalu *******
aktualniMillis = millis(); //podívám se na hodinky - aktuální čas
if(led1svetlo){ // potřebuju led1 zhasnout nebo rosvítit?
if(aktualniMillis - predchoziMillis1 > 500) { // pokud zhasnout uběhlo už 500ms od poslední akce?
predchoziMillis1 = aktualniMillis; // v tento čas jsem provedl poslední akci
led1svetlo = false; //zhasni led1
Serial.println("led1 pomalu VYP");
}
}else if(aktualniMillis - predchoziMillis1 > 500) { // pokud zhasnout uběhlo už 500ms od poslední akce?
predchoziMillis1 = aktualniMillis; // v tento čas jsem provedl poslední akci
led1svetlo = true; //rozsviť led1
Serial.println("led1 pomalu ZAP");
}
// ******* led2 bliká pomalu *******
aktualniMillis = millis(); //podívam se na hodinky - aktuální čas
if(led2svetlo){ // potřebuju led2 zhasnout nebo rosvítit?
if(aktualniMillis - predchoziMillis2 > 500) { // pokud zhasnout uběhlo už 500ms od poslední akce?
predchoziMillis2 = aktualniMillis; // v tento čas jsem provedl poslední akci
led2svetlo = false; //zhasni led2
Serial.println("led2 pomalu VYP");
}
}else if(aktualniMillis - predchoziMillis2 > 500) { // pokud zhasnout uběhlo už 500ms od poslední akce?
predchoziMillis2 = aktualniMillis; // v tento čas jsem provedl poslední akci
led2svetlo = true; // rozsviť led2
Serial.println("led2 pomalu ZAP");
}
}
if(mode == 4) {
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
led1svetlo = !led1svetlo; // do hodnoty led1svetlo zapíšu její negovanou hodnotu, svítila-li zhasne, byla-li zhaslá rožne se
led2svetlo = !led1svetlo; // do hodnoty led2svetlo zapíšu negovanou hodnotu led1svetlo, pokud led1 svítí chci led2 zhaslou a naopak
predchoziMillis3 = aktualniMillis; // v tento čas jsem provedl poslední akci
}
}
digitalWrite(led1,led1svetlo); // aktualizace stavu led1, zápis stavu proměnné na výstupní pin 10
digitalWrite(led2,led2svetlo); // aktualizace stavu led2, zápis stavu proměnné na výstupní pin 11
}
Re: Mini CNC osa Z
Napsal: 18 říj 2019, 08:59
od KamilV
Kód jsem až tak nestudoval, ale minimálně ještě drobnou kosmetiku by si zasloužil:
- je dobrým zvykem dát všechny #define nahoru
- konstanty je přehledné psát velkými písmeny
- mode by mohlo být jen byte místo int
Re: Mini CNC osa Z
Napsal: 18 říj 2019, 12:23
od Hanz
dobrý den, děkuju za připomínky a návrhy. Zde jsou zakomponovány a sketch upraven, upraveno i mode == 2, mode == 3
Kód: Vybrat vše
#define TLACITKO 7 // pin pro TLACITKO
#define LED1 10 // pin pro LED1 zelená
#define LED2 11 // pin pro LED2 červená
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á hodnota proměnné led1svetlo
boolean led2svetlo; // pomocná hodnota 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 nastaven jako vstup
digitalWrite(TLACITKO,HIGH); //
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(){
if ((digitalRead(TLACITKO)) == LOW) // tady se přečte stav tlačítka
{
mode++; // přičte k MODE hodnotu 1
if (mode > 4) mode = 0; // když je mode větší jak 4 tak ho vynuluje
delay(200); // prodleva proti záchvěvům tlačítka 200ms
}
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(led1svetlo){ // potřebuju LED1,LED2 zhasnout nebo rosvítit?
if(aktualniMillis - predchoziMillis1 > 200) { // nejprve si zjistím jestli je čas něco provést, uběhlo už 200ms od poslední akce?
led1svetlo = false; // zhasni LED1
led2svetlo = false; // zhasni LED2
predchoziMillis1 = aktualniMillis; // v tento čas jsem provedl poslední akci
}
} else if(aktualniMillis - predchoziMillis1 > 200) { // nejprve si zjistím jestli je čas něco provést, uběhlo už 200ms od poslední akce?
led1svetlo = true; // rozsviť LED1
led2svetlo = true; // rozsviť 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(led1svetlo){ // potřebuju LED1,LED2 zhasnout nebo rosvítit?
if(aktualniMillis - predchoziMillis2 > 500) { // nejprve si zjistím jestli je čas něco provést, uběhlo už 500ms od poslední akce?
led1svetlo = false; // zhasni LED1
led2svetlo = false; // zhasni LED2
predchoziMillis2 = aktualniMillis; // v tento čas jsem provedl poslední akci
}
} else if(aktualniMillis - predchoziMillis2 > 500) { // nejprve si zjistím jestli je čas něco provést, uběhlo už 500ms od poslední akce?
led1svetlo = true; // rozsviť LED1
led2svetlo = true; // rozsviť 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 hodnoty led1svetlo zapíšu její negovanou hodnotu, svítila-li LED1 tak zhasne, byla-li zhaslá rožne se
led2svetlo = !led1svetlo; // do hodnoty led2svetlo zapíšu negovanou hodnotu led1svetlo, 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é na výstupní pin 10
digitalWrite(LED2,led2svetlo); // aktualizace stavu LED2, zápis proměnné na výstupní pin 11
}
zajímá mě jestli je tohle dobře ? mám to v mode == 2, mode == 3
Kód: Vybrat vše
if(led1svetlo){ // potřebuju LED1,LED2 zhasnout nebo rosvítit?
Re: Mini CNC osa Z
Napsal: 18 říj 2019, 15:51
od kiRRow
tak ... mode 0 a mode 1 je perfektní ... teď se kouknem na blikání oběma ledkama najednou v mode 2 ... mělo by to pracovat následujícím způsobem ...
1) nejprve se mrkneme na hodinky - aktuálí čas
2) potom nebudem sledovat stav led1svetlo, ale místo toho zjistíme jestli je čas něco provést ... jestli uběhlo oněch 200 ms od poslední akce
3) když je čas něco provést, tak teprve tehdy zjistím jestli led1svetlo je HIGH, nebo ne ...
4) pokud ano, zhasnu led1svetlo i led2svetlo, pokud ne, rožnu led1svetlo i led2svetlo
5) zapíšu si čas provedení poslední akce
bude z toho nakonec kód o pár řádcích ... ten jen zkopíruješ do mode 3 a lehoučce upravíš aby blikal pomaleji
ps: pouč se z toho co je teďkom v mode 4
Re: Mini CNC osa Z
Napsal: 18 říj 2019, 16:39
od Hanz
dobrý den, další zjednodušení a hlavně nápověda pro mě od kiRRow, úprava mode == 2 a mode == 3
Kód: Vybrat vše
#define TLACITKO 2 // pin pro TLACITKO
#define LED1 10 // pin pro LED1 zelená
#define LED2 11 // pin pro LED2 červená
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á hodnota proměnné led1svetlo
boolean led2svetlo; // pomocná hodnota 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_PULLUP); // pin pro TLACITKO nastaven jako vstup
digitalWrite(TLACITKO,HIGH); //
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(){
if ((digitalRead(TLACITKO)) == LOW) // tady se přečte stav tlačítka
{
mode++; // přičte k MODE hodnotu 1
if (mode > 4) mode = 0; // když je mode větší jak 4 tak ho vynuluje
delay(200); // prodleva proti záchvěvům tlačítka 200ms
}
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?
digitalRead(led1svetlo == HIGH); { // zjistím jestli led1svetlo je HIGH - tj. jestli svítí LED1
led1svetlo = !led1svetlo; // jestli ano zhasnu, když ne tak rožnu LED1
led2svetlo = !led2svetlo; // totéž provedu s 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?
digitalRead(led1svetlo == HIGH); { // zjistím jestli led1svetlo je HIGH - tj. jestli svítí LED1
led1svetlo = !led1svetlo; // jestli ano zhasnu, když ne tak rožnu LED1
led2svetlo = !led2svetlo; // totéž provedu s 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 hodnoty led1svetlo zapíšu její negovanou hodnotu, svítila-li LED1 tak zhasne, byla-li zhaslá rožne se
led2svetlo = !led1svetlo; // do hodnoty led2svetlo zapíšu negovanou hodnotu led1svetlo, 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é na výstupní pin 10
digitalWrite(LED2,led2svetlo); // aktualizace stavu LED2, zápis proměnné na výstupní pin 11
}
Re: Mini CNC osa Z
Napsal: 18 říj 2019, 17:10
od kiRRow
Kód: Vybrat vše
digitalRead(led1svetlo == HIGH); { // zjistím jestli led1svetlo je HIGH - tj. jestli svítí LED1
led1svetlo = !led1svetlo; // jestli ano zhasnu, když ne tak rožnu LED1
led2svetlo = !led2svetlo; // totéž provedu s LED2
predchoziMillis1 = aktualniMillis; // v tento čas jsem provedl poslední akci
}
špatně ... podmínka se klade příkazem IF
Kód: Vybrat vše
/*
led1svetlo je proměná v paměti ... je v ní napsáno to, co se nakonci loopu zapíše do výstupních pinů ... je boolean, tudíž má hodnotu jen 0 nebo 1 ...
pokud výsledek toho co je v závorce za příkazem IF je roven 1 neboli true, tak se provede to co je v prvních složených závorkách, pokud podmínka
splněna není ... příkaz IF dostane 0 neboli false, tak se provede to co je v složených závorkách za else ...
*/
if(led1svetlo){
zhasnu ledky
} else {
rožnu ledky
}
zapíšu si poslední akci
ps : jo a ledky se zhasínaj tak, že je obě nastavíš obě ledsvetko na tvrdo false a rožínaj tak, že je nastavíš na true ...