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.