• 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
Arduino i LCD Nokia 5110
#18
Poznaj używane biblioteki, jakie mają możliwe do zastosowania metody. Zrobiłeś w programie dużo zakamarków, gdzie program wpada, kuca, zamyka uszy i oczy i robi sobie przerwę - delay(). Przy takim programie musisz grzebnąć głębiej. Na początek jednak proponuję podmianę stepper.h na AccelStepper.h http://42bots.com/tutorials/28byj-48-ste...duino-uno/ . stepper.h jest takim delay(), jak korzystając z tej biblioteki ustawisz mu 500 kroków do przejścia to on będzie to robił dopóki nie wypełni zadania.  W AccelStepper.h naciskasz np. przycisk ustawiasz mu do przejścia 500 kroków/cel w krokach i kończysz obsługę silnika. Lub po prostu tak samo każesz mu utrzymywać prędkość w lewo dopóki przycisk jest wciśnięty. Ale w czasie wciśnięcia przycisku program przelatuje pętlę loop() tysiące razy. Zostawiasz tylko w pętli głównej stepper.run() i ta funkcja sprawdza, czy minął już czas by zrobić kolejny krok, czy taki krok w ogóle jest do zrobienia, jeśli tak to go robi. To będzie jednak źle działać w połączeniu z wyświetlaniem menu z dalay(). Tu też powinieneś mieć to tak zrobione, że sobie modyfikujesz menu, a wyrzucasz na ekran w określonych interwałach, ale tylko jeśli to konieczne - coś się zmieniło na ekranie. Biblioteka z adafruit też działa tak, że ma bufor całego ekranu, modyfikujesz zawartość ekranu w pamięci procka, a wysyłasz całe ekrany funkcją display.display(). I przy takim programie nie ma sensu tego zmieniać. Przy takim skomplikowaniu nie jest konieczne używanie przerwań. Wystarczy poukładać sobie wszystko w pętli głównej. Przerwania są konieczne gdy coś nie może czekać, musi się wydarzyć w określonym czasie. Np. gdyby procek sterował  drukarką 3d to nie możesz nie ruszyć silnikiem w określonym czasie bo plastik kapie ze stałą prędkością, nie ruszysz to zrobi kleksa. Jeśli potrzebujesz przerwań wchodzisz w Arduino Reference i wszystko jest  opisane. Nie można korzystać  z ogólnej wiedzy o C/C++/AVR bo część elementów jest używane do napędzania timerów programowych Arduino - nimi "żywią" się np. funkcje millis() i micros(), a te używane są w bibliotekach. Sprawdź też sobie ile coś trwa: 
Kod:
uint32_t czas1=micros();
 display.display();   // clears the screen and buffer
 czas1=micros()-czas1;
W zależności jak masz taktowany SPI tak długo trwa przesyłanie danych. Generalnie jest szybciej niż na oled I2C jakieś 3-10x, więc sam musisz ocenić, czy 1-3ms ma dla Ciebie znaczenie czy nie. Są też inne biblioteki, inne podejście, też można tak jak w moim wcześniejszym przykładzie odświeżyć część ekranu, to nie jest matryca led wymagająca odświeżania co 5ms. 
Dyskusja jest kwintesencją forum, bez tego nic byśmy się tu nie uczyli...

Jak Pan es2 zainstalował już Arduino to proszę wgrać ten przykład:
Kod:
/*
 Blink without Delay

 Turns on and off a light emitting diode (LED) connected to a digital pin,
 without using the delay() function. This means that other code can run at the
 same time without being interrupted by the LED code.

 The circuit:
 - Use the onboard LED.
 - Note: Most Arduinos have an on-board LED you can control. On the UNO, MEGA
   and ZERO it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN
   is set to the correct LED pin independent of which board is used.
   If you want to know what pin the on-board LED is connected to on your
   Arduino model, check the Technical Specs of your board at:
   https://www.arduino.cc/en/Main/Products

 created 2005
 by David A. Mellis
 modified 8 Feb 2010
 by Paul Stoffregen
 modified 11 Nov 2013
 by Scott Fitzgerald
 modified 9 Jan 2017
 by Arturo Guadalupi

 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/

// constants won't change. Used here to set a pin number:
const int ledPin =  LED_BUILTIN;// the number of the LED pin

// Variables will change:
int ledState = LOW;             // ledState used to set the LED

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;        // will store last time LED was updated

// constants won't change:
const long interval = 1000;           // interval at which to blink (milliseconds)

void setup() {
 // set the digital pin as output:
 pinMode(ledPin, OUTPUT);
}

void loop() {
 // here is where you'd put code that needs to be running all the time.

 // check to see if it's time to blink the LED; that is, if the difference
 // between the current time and last time you blinked the LED is bigger than
 // the interval at which you want to blink the LED.
 unsigned long currentMillis = millis();

 if ((unsigned long)(currentMillis - previousMillis) >= interval) {
   // save the last time you blinked the LED
   previousMillis = currentMillis;

   // if the LED is off turn it on and vice-versa:
   if (ledState == LOW) {
     ledState = HIGH;
   } else {
     ledState = LOW;
   }

   // set the LED with the ledState of the variable:
   digitalWrite(ledPin, ledState);
 }
}
i dać znać gdy objawi się ta pluskwa millis(). Proszę zresztą się nie przejmować, w zabawkach to nie ma znaczenia. Cały kod do oleda jest w poście wraz z bibliotekami, nie mam pojęcia jak działa biblioteka.
Miło być decenianym https://buycoffee.to/kaczakat
 
  


Wiadomości w tym wątku
Arduino i LCD Nokia 5110 - przez RobUK - 11-04-2018, 23:40
RE: Arduino i LCD Nokia 5110 - przez Robson Kerman - 12-04-2018, 18:35
RE: Arduino i LCD Nokia 5110 - przez RobUK - 13-04-2018, 22:42
RE: Arduino i LCD Nokia 5110 - przez es2 - 14-04-2018, 02:33
RE: Arduino i LCD Nokia 5110 - przez RobUK - 14-04-2018, 22:41
RE: Arduino i LCD Nokia 5110 - przez es2 - 14-04-2018, 23:07
RE: Arduino i LCD Nokia 5110 - przez Robson Kerman - 15-04-2018, 00:59
RE: Arduino i LCD Nokia 5110 - przez es2 - 15-04-2018, 10:35
RE: Arduino i LCD Nokia 5110 - przez Robson Kerman - 15-04-2018, 13:17
RE: Arduino i LCD Nokia 5110 - przez es2 - 15-04-2018, 13:43
RE: Arduino i LCD Nokia 5110 - przez kaczakat - 15-04-2018, 18:25
RE: Arduino i LCD Nokia 5110 - przez es2 - 15-04-2018, 19:09
RE: Arduino i LCD Nokia 5110 - przez RobUK - 16-04-2018, 12:39
RE: Arduino i LCD Nokia 5110 - przez es2 - 16-04-2018, 12:46
RE: Arduino i LCD Nokia 5110 - przez RobUK - 16-04-2018, 13:20
RE: Arduino i LCD Nokia 5110 - przez es2 - 16-04-2018, 13:33
RE: Arduino i LCD Nokia 5110 - przez RobUK - 16-04-2018, 14:07
RE: Arduino i LCD Nokia 5110 - przez kaczakat - 16-04-2018, 17:50
RE: Arduino i LCD Nokia 5110 - przez es2 - 16-04-2018, 18:00
RE: Arduino i LCD Nokia 5110 - przez kaczakat - 16-04-2018, 20:35
RE: Arduino i LCD Nokia 5110 - przez es2 - 16-04-2018, 21:01
RE: Arduino i LCD Nokia 5110 - przez kaczakat - 16-04-2018, 23:01
RE: Arduino i LCD Nokia 5110 - przez es2 - 16-04-2018, 23:29
RE: Arduino i LCD Nokia 5110 - przez RobUK - 16-04-2018, 23:16
RE: Arduino i LCD Nokia 5110 - przez Robson Kerman - 17-04-2018, 11:04

Skocz do:


Przeglądający: 2 gości