Arduino Polska Forum

Pełna wersja: Arduino Uno i oled 128x64
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2
(17-11-2016, 18:28)juriii28 napisał(a): [ -> ]Nie , nie zaglądałem. Rozumiem że można go otworzyć w WordPad?
Wiersz 70? ciężko to policzyć. Czego mam szukać?
Nie licz, ja przyjadę i palcem wskaże który to wiersz.

Wcześniej zacytowałem komunikat błędu który mówi co jest źle w programie który kompilujesz i którego wiersza programu to dotyczy :

Cytat:ssd1306_128x64_i2c.ino:54:2: error: #error ("Height incorrect, please fix Adafruit_SSD1306.h!");


A tak wygląda to wprogramie:
Kod:
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif


Jeśli nie wiesz co to znaczy to proponuję odłożyć na tydzień arduino i przeczytać dowolny podręcznik programowania w c++ a wtedy wszystko nagle stanie się proste.

PS
W arduino można włączyć numerację wiersZy a ten plik też pewnie otworzy.
Włączyłem numeracje wierszy w arduino, tylko jak odpalić ten plik H w arduino żeby zobaczyć co jest w tym 70 wierszu?
ok. odpaliłem plik w arduino.
w wierszu 70 jest:

#define SSD1306_128_32

Już zrobiłem Big Grin . Zmieniłem 32 na 64, zapisałem zmiany w pliku i pod mieniłem plik w folderze ssd1306. Potem wgrałem od nowa całą biblioteke, i wgrałem program. Działa idealnie
Witam!
Odświeżę temat choć może trochę inny.

Do solar trackera chcę dobudować anemometr z przekaźnikiem , który po przekroczeniu ustawionego progu wiatru załączy wypłaszczenie baterii PV.
Użyłem gotowego kodu dla anemometru z czujnikiem Halla, dopisałem komendę dla załączenia przekaźnika ale nie potrafię wstawić czasu zwłoki wyłączenia przekaźnika po tym jak wiatr ustanie.
Proszę Was o pomoc.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#define am 8 //anemometer is connected to pin 8 with pulldown resistor

int pinOut = 10;
int cnt = 0; //counter
int rot = 0; // number of rotations

boolean stan = 0; //state of anemometer -open or closed
float wind;

void setup() {
  pinMode (am, INPUT);
  pinMode(10, OUTPUT);
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();

}

void loop() {
  cnt = cnt + 1;
  if (digitalRead(am) == LOW) { //I've checked that on free position anemometer is always closed
    delay(2);
    stan = !stan;
    while (digitalRead(am) == LOW) ;
    rot = rot + 1 ;
  }

  if (cnt == 100) {
    int czas1 = millis();
    wind = rot * 2.40114; ///5;  //equation calculating average speed of the wind in 3 sec intervals
    Serial.println(rot);
    Serial.print("WIATR = ");
    Serial.print(wind, 2);
    Serial.println(" km/h");
    cnt = 0; //counter reset
    rot = 0; //rotation number reset
    display.clearDisplay();
    display.setTextSize(2);
    display.setTextColor(WHITE);
    display.setCursor(30, 0);
    display.println("WIATR");
    display.setTextSize(2);
    display.setCursor(2, 15);
    display.print(wind, 2);
    display.setTextSize(2);
    display.println(" km/h");
    display.display();
    int czas2 = millis();
    int czas = czas2 - czas1;
    Serial.println(czas);
  }
  if (wind > 6) {
    digitalWrite (10, HIGH);  // załączenie przekaźnika po przekroczeniu progu nastawionego wiatru
  }
  else
  {
    digitalWrite (10, LOW);  // wyłaczenie przekaźnika po spadku siły wiatru
  }
  delay(8);//elay is put here to extend time of whole loop to 10ms
}
Naucz się używać millis, masz przykład w Arduino gdzie zmieniasz stan led co 1s, zamiast zmieniać stan led możesz zwiększać co 1s zmienną i masz licznik sekund, taki licznik sekund też można porównywać, zerować, zapisać do innej zmiennej w wybranym momencie, np. gdy wykryjesz ustanie wiatru ustawiasz zmienną wylaczanie =1 i zapisać licznik sekund, else wylaczanie =0, jeśli wylaczanie =1 sprawdź czy minęło X sekund, jeśli tak wyłącz.
Wywal wszystkie delay z kodu, tym samym sposobem możesz odświeżać ekran co 1s, czy co 50ms, robienie więcej niż 20fps na tym ekranie nie ma większego sensu, chyba że wysyłasz wybrany fragment ekranu dla jakiejś animacji w celu "sztuka dla sztuki".
Ok, dzięki za informacje.
Przypuszczałem, że powinienem użyć millis.
Podszkolę się i podziałam.
Na pewno będę dopytywał.
Pozdrawiam

No i się udało.
Kod działa , po przekroczeniu progu wiatru, przekaźnik się załącza i po upływie nastawionego czasu przekaźnik się wyłącza jak wiatr osłabnie oczywiście.

Teraz będę próbował dodać potencjometr z nastawą progu wiatru i czasem działania przekaźnika.

Kolego "kaczakat" dziękuję za wskazówkę no i masz u mnie duży tymbark :-)
Stron: 1 2