• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
JAK to się robi ...
#9
BARDZO WSZYSTKICH PRZEPRASZAM dajcie mi jeszcze jedną szanse ....

Aby zaprezentować problem napisałem 3 ledy zapalajace się jedna po drugiej na wyświetlacz trafia liczba która dioda jest aktualnie aktywna ...
Przejścia diod są uzależnione od milis 
Wyświetlacz podgląda zmienną co zadany czas która dioda świeci ("Procesy nie powinny kolidować")

1) Gdy uruchamiam bez wyświetlacza diody migają bardzo szybko
2) Gdy uruchamiam z wyświetlaczem diody spowalniają
3) Nastawiając różne czasy miedzy wyświetlaczem a czasem przejscia miedzy ledami widać że są zależności  są kombinacje które pokazują że podczas wyświetlania diody się na ułamek [s] wstrzymują przebieg nie jest płynny ...

Code

Kod:
//------------------ zdefiniowanie pinów --------------------------
#define ledPin2 2
#define ledPin3 3
#define ledPin4 4
#include "U8glib.h"                          //bibloteka  oleda
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);  

//------------------ ustawienia  stanow początkowych   ------------

unsigned long previousMillis2 = 0;
unsigned long previousMillis3 = 0;        
int ledState2 = HIGH;  
int ledState3 = HIGH;  
int ledState4 = HIGH;
int flaga2 = 0;    
//-----------------------inicjaizacje------------------------------    
void setup()
{
Serial.begin(9600);
u8g.setFont(u8g_font_unifont);        // dla wyswietlacza
pinMode(ledPin2, OUTPUT);            //LEDY ....
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
}

void loop(){
//--------------------- pierwsza dioda  wszeregu trzech się zapala --------------------------------------------                                            
 unsigned long Millis2 = millis();           //wczytanie MILLIS startowego
  if ( (ledState2 == HIGH) &&(Millis2 - previousMillis2 >= 100))   // swiece LED... jesli mineło 500  wykonaj przebieg if-a  
 {  
   flaga2=1;                            // aktualna wartość dla wyswietlacza = Led ktory swieci
   ledState2 = LOW;                     //obecny  led off
   ledState3 = HIGH;                    //kolejny led on
// ledState4 = LOW;                     // niepotrzebna linia zostawiłem program pracuje  bez niej prawidłowo
   previousMillis2 = Millis2 ;          // przygotowanie milis  do nastepnego przejscia warunku  
   digitalWrite(ledPin2, ledState2);    // wczytanie stanow na wyjscia led
   digitalWrite(ledPin3, ledState3);    // wczytanie stanow na wyjscia led
// digitalWrite(ledPin4, ledState4);    // niepotrzebna linia zostawiłem program pracuje  bez niej prawidłowo                                          
 }
 //--------------------- druga dioda  wszeregu trzech się zapala -----------------------------------------
 if ( (ledState3 == HIGH) &&(Millis2 - previousMillis2 >= 100))                
 {
 flaga2=2;
   ledState3 = LOW;  
// ledState2 = LOW;
   ledState4 = HIGH;                                                          
   previousMillis2 = Millis2 ;               // opis  się powtarza inne ledy zapalane i gaszone
// digitalWrite(ledPin2, ledState2);  
   digitalWrite(ledPin3, ledState3);  
   digitalWrite(ledPin4, ledState4);                                            
 }
 //--------------------- trzecia dioda  wszeregu trzech się zapala --------------------------------------------
  if ( (ledState4 == HIGH) &&(Millis2 - previousMillis2 >= 100))                
 {
 flaga2=3;
   ledState2 = HIGH;
// ledState3 = LOW;  
   ledState4 = LOW;                          // opis  sie powtarza inne ledy zapalane i gaszone                                  
   previousMillis2 = Millis2 ;
   digitalWrite(ledPin2, ledState2);  
// digitalWrite(ledPin3, ledState3);    
   digitalWrite(ledPin4, ledState4);                            
 }
 //----------- obsługa wyswietlacza tu wyswietlam flaga2  z odrebnym czasem millis  ---------------------------------
 
  unsigned long Millis3 = millis();
  if (Millis3 - previousMillis3 >= 500)       // czas... co ile wczytuje na oled  inny niz przejscie miedzy ledami znacznie szybszy        
 {
     u8g.firstPage();          //typowa petla U8glib.h w ktorej musi wyswietlac się wartosc flaga2
 do {
     u8g.setPrintPos(10, 20);  //pozycja  an ekranie
     u8g.print(flaga2);        // liczba ktora dioda swieci = flaga 2
   } while( u8g.nextPage() );                                                  
     previousMillis3 = Millis3;  // kasowanie millis
   }  
}
//-----------------------------------------------

Kod nie ma żadnego znaczenia chodzi o zjawisko które tu występuje (czytanie zmiennej i wpisywanie na wyswietlacz i lagi za tym idące)
 
Odpowiedź
  


Wiadomości w tym wątku
JAK to się robi ... - przez maniek100 - 25-04-2019, 12:19
RE: JAK to się robi ... - przez Robson Kerman - 25-04-2019, 19:23
RE: JAK to się robi ... - przez kaczakat - 25-04-2019, 19:53
RE: JAK to się robi ... - przez es2 - 25-04-2019, 21:50
RE: JAK to się robi ... - przez kaczakat - 26-04-2019, 21:40
RE: JAK to się robi ... - przez maniek100 - 26-04-2019, 12:54
RE: JAK to się robi ... - przez es2 - 26-04-2019, 16:22
RE: JAK to się robi ... - przez Robson Kerman - 26-04-2019, 21:14
RE: JAK to się robi ... - przez maniek100 - 02-05-2019, 19:43
RE: JAK to się robi ... - przez es2 - 02-05-2019, 20:06
RE: JAK to się robi ... - przez kaczakat - 04-05-2019, 15:38
RE: JAK to się robi ... - przez es2 - 04-05-2019, 16:31
RE: JAK to się robi ... - przez kaczakat - 04-05-2019, 23:09
RE: JAK to się robi ... - przez es2 - 05-05-2019, 10:33

Skocz do:


Przeglądający: 2 gości