Skocz do zawartości

Egzekutor27

Użytkownicy
  • Zawartość

    13
  • Rejestracja

  • Ostatnio

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Bełchatów

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

Egzekutor27's Achievements

2/10

2/10 (2/10)

8

Reputacja

  1. Wpadłem na pomysł włączenia i wyłączenia LCD na określony czas ( jak to było w przypadku "przypominacza". Program robi to co powinien ale zauważyłem defekt na wyświetlaczu. Nie odlicza czasu jeśli chodzi o zliczanie sekund tylko stoi w miejscu, jeśli LCD jest podświetlony. Zgasza się i po 5ciu sekundach się spowrotem włącza, czas oczywiście jest dalej. W czym tkwi problem ? Dodane linijki są skomentowane ( na samym dole ). Tu leży gdzieś usterka i dlatego na razie nie używam NoBacklight #include <Wire.h> //WireLibrary comes with arduino #include <LiquidCrystal_I2C.h> //i2c LCD Library #define DS3231_I2C_ADDRESS 0x68 //RTC Address #include <OneWire.h> #include <DallasTemperature.h> // Data wire is conntec to the Arduino digital pin 4 #define ONE_WIRE_BUS 4 // Setup a oneWire instance to communicate with any OneWire devices OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature sensor DallasTemperature sensors(&oneWire); LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 20, 4); // Set the LCD I2C address byte Degree[] = { B00111, B00101, B00111, B00000, B00000, B00000, B00000, B00000 }; void setup() { lcd.createChar(0, Degree); Wire.begin(); //initialise the TWI lcd.begin(20, 4); //20 x 4 LCD (Change if required) for (int i = 0; i < 2; i++) //Flash LCD backlight 2 times on startup { lcd.backlight(); delay(250); } lcd.backlight(); // finish with backlight on lcd.setCursor(0, 0); //Start at character 0 on line 0 lcd.print("....WELCOME HOME...."); // Start serial communication for debugging purposes Serial.begin(115200); // initialize the Serial Monitor at a baud rate of 9600 // Start up the library sensors.begin(); // initialize the DS18B20 temperature sensor: } void loop() { displayTime(); //calls the display time function { sensors.requestTemperatures(); //zazadaj odczyt temperatury z czujnika lcd.setCursor(0,3); //ustaw kursor w pozycji 0,0 lcd.print("Temperatura: "); //wyswietl "Temperatura: " lcd.print(sensors.getTempCByIndex(0)); //wyswietl wartosc z czujnika 0 lcd.print((char)0); //wyswietl znak stopnia lcd.print("C"); delay(50); } delay(100); } byte decToBcd(byte val)//used when sending time { return ( (val / 10 * 16) + (val % 10) ); } // Convert binary coded decimal to normal decimal numbers byte bcdToDec(byte val) { return ( (val / 16 * 10) + (val % 16) ); } void readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // set DS3231 register pointer to 00h Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); // request seven bytes of data from DS3231 starting from register 00h *second = bcdToDec(Wire.read() & 0x7f); *minute = bcdToDec(Wire.read()); *hour = bcdToDec(Wire.read() & 0x3f); *dayOfWeek = bcdToDec(Wire.read()); *dayOfMonth = bcdToDec(Wire.read()); *month = bcdToDec(Wire.read()); *year = bcdToDec(Wire.read()); } void displayTime() { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); if (hour < 10) { lcd.setCursor(0, 1); lcd.print("0"); lcd.setCursor(1, 1); lcd.print(hour , DEC); } if (hour > 9) { lcd.setCursor(0, 1); lcd.print(hour , DEC); } lcd.setCursor(2, 1); lcd.print(":"); if (minute < 10) { lcd.setCursor(3, 1); lcd.print("0"); lcd.setCursor(4, 1); lcd.print(minute , DEC); } if (minute > 9) { lcd.setCursor(3, 1); lcd.print(minute , DEC); } lcd.setCursor(5, 1); lcd.print(":"); if (second < 10) { lcd.setCursor(6, 1); lcd.print("0"); lcd.setCursor(7, 1); lcd.print(second, DEC); } if (second > 9) { lcd.setCursor(6, 1); lcd.print(second, DEC); } if (dayOfMonth < 10) { lcd.setCursor(9, 1); lcd.print("0"); lcd.setCursor(10, 1); lcd.print(dayOfMonth, DEC); lcd.setCursor(11, 1); lcd.print("/"); } if (dayOfMonth > 9) { lcd.setCursor(9, 1); lcd.print(dayOfMonth, DEC); lcd.setCursor(11, 1); lcd.print("/"); } if (month < 10) { lcd.setCursor(12, 1); lcd.print("0"); lcd.setCursor(13, 1); lcd.print(month, DEC); lcd.setCursor(14, 1); lcd.print("/"); } if (month > 9) { lcd.setCursor(12, 1); lcd.print(month, DEC); lcd.setCursor(14, 1); lcd.print("/"); } lcd.setCursor(15, 1); lcd.print(year, DEC); switch (dayOfWeek) { case 1: lcd.setCursor(0, 2); lcd.print("Dzis Poniedzialek"); break; case 2: lcd.setCursor(0, 2); lcd.print("Dzis jest Wtorek"); break; case 3: lcd.setCursor(0, 2); lcd.print("Dzis jest Sroda"); break; case 4: lcd.setCursor(0, 2); lcd.print("Dzis jest Czwartek"); break; case 5: lcd.setCursor(0, 2); lcd.print("Dzis jest Piatek"); break; case 6: lcd.setCursor(0, 2); lcd.print("Dzis jest Sobota"); break; case 7: lcd.setCursor(0, 2); lcd.print("Dzis jest Niedziela"); break; } //lcd.noBacklight(); // brak wyświetlacza // delay(5000); // 60 sekund, jedna minuta //lcd.backlight(); // włączenie wyświetlacza //delay(5000); }
  2. Mimo wszystko, nie pokazuje znaczka. Aktualizacja: Dobra. Udało się zakomentowana była linijka lcd.print((char)0); . odkomentowałem i zadziałało
  3. Dzięki za informacje. Czujnik wilgotności ( a raczej wilgotność ), nie jest mi potrzebny. Tylko temperatura. Gdzieś TU jest błąd ( screen ) i nie pokazuje "stopnia" . Chciałem Wysłać informację z czujnika temperatury przez nadajnik FS1000A, no ale jakoś ani nie nadaje jakiegokolwiek komunikatu, ani nie odbiera ( transmiter i receiver ). Zakupiłem więc NRF24L01. Czekam na dostawę. Oczywiście chciałbym aby mi wyświetlało wszystko to , co jest na wyświetlaczu ( pierwszy post ). Może ktoś pomoże z linijką ?
  4. Witajcie. Chciałbym się pochwalić drugim projektem ( mieszanina kilku gotowców do jednego ). Mianowicie Przyjemny Zegar połączony z datą oraz pokazaniem aktualnej temperatury. Wiadomo, że w skład zestawu wchodzi Arduino UNO, zegar RTC DS3231 + 24c32 , Sonda-czujnik temperatury DS18B20 ( wodoodporny - będzie na zewnątrz budynku ) do tego wyświetlacz LCD 20x4 I2C , a przewodziki i płytka Kod jest jeszcze w trakcie poprawek. Mianowicie są błędy jeśli chodzi o pokazanie na LCD znaku "stopnia Celsjusza" . Kombinuje i na razie zostawiłem jak jest. Może ktoś ma inny pomysł ? Chciałem z tego wszystkiego podpiąć pod RF czyli standardowy transmiter i receiver 433MHz, ale coś są kłopoty z tymi dwiema rzeczami. Niby nadaje, ale przy sprawdzaniu portu COM na odbiorniku to nic nie wyświetla. Nadajnik standardowy FS1000A i odbiornik do niego. Podłączone kabelki ( antenki ) 17cm. i za "grzybka" nie wiem co jest grane. A pomysłem było, aby nadawało mi temperaturę zdalnie ( arduino Nano ) za pomocą sondy, do właśnie UNO i pokazywało to samo co jest na screenach. Jeśli ma ktokolwiek pomysł na poprawki, zmiany, to proszę śmiało pisać z góry dzięki. Aha, jeszcze kod wrzucę #include <Wire.h> //WireLibrary comes with arduino #include <LiquidCrystal_I2C.h> //i2c LCD Library #define DS3231_I2C_ADDRESS 0x68 //RTC Address #include <OneWire.h> #include <DallasTemperature.h> // Data wire is conntec to the Arduino digital pin 4 #define ONE_WIRE_BUS 4 // Setup a oneWire instance to communicate with any OneWire devices OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature sensor DallasTemperature sensors(&oneWire); LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 20, 4); // Set the LCD I2C address //Degree symbol: byte Degree[] = { B00111, B00101, B00111, B00000, B00000, B00000, B00000, B00000 }; void setup() { // lcd.createChar(0, byte degree); Wire.begin(); //initialise the TWI lcd.begin(20, 4); //20 x 4 LCD (Change if required) for (int i = 0; i < 2; i++) //Flash LCD backlight 2 times on startup { lcd.backlight(); delay(250); } lcd.backlight(); // finish with backlight on lcd.setCursor(0, 0); //Start at character 0 on line 0 lcd.print(" Witaj Marku :)"); // Start serial communication for debugging purposes Serial.begin(115200); // initialize the Serial Monitor at a baud rate of 9600 // Start up the library sensors.begin(); // initialize the DS18B20 temperature sensor: } void loop() { displayTime(); //calls the display time function { sensors.requestTemperatures(); //zazadaj odczyt temperatury z czujnika // lcd.clear(); //wyczysc ekran lcd.setCursor(0,3); //ustaw kursor w pozycji 0,0 lcd.print("Temperatura: "); //wyswietl "Temperatura: " lcd.print(sensors.getTempCByIndex(0)); //wyswietl wartosc z czujnika 0 //lcd.print((char)0); //wyswietl znak stopnia lcd.print("C"); delay(50); } delay(100); } byte decToBcd(byte val)//used when sending time { return ( (val / 10 * 16) + (val % 10) ); } // Convert binary coded decimal to normal decimal numbers byte bcdToDec(byte val) { return ( (val / 16 * 10) + (val % 16) ); } void readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // set DS3231 register pointer to 00h Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); // request seven bytes of data from DS3231 starting from register 00h *second = bcdToDec(Wire.read() & 0x7f); *minute = bcdToDec(Wire.read()); *hour = bcdToDec(Wire.read() & 0x3f); *dayOfWeek = bcdToDec(Wire.read()); *dayOfMonth = bcdToDec(Wire.read()); *month = bcdToDec(Wire.read()); *year = bcdToDec(Wire.read()); } void displayTime() { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); if (hour < 10) { lcd.setCursor(0, 1); lcd.print("0"); lcd.setCursor(1, 1); lcd.print(hour , DEC); } if (hour > 9) { lcd.setCursor(0, 1); lcd.print(hour , DEC); } lcd.setCursor(2, 1); lcd.print(":"); if (minute < 10) { lcd.setCursor(3, 1); lcd.print("0"); lcd.setCursor(4, 1); lcd.print(minute , DEC); } if (minute > 9) { lcd.setCursor(3, 1); lcd.print(minute , DEC); } lcd.setCursor(5, 1); lcd.print(":"); if (second < 10) { lcd.setCursor(6, 1); lcd.print("0"); lcd.setCursor(7, 1); lcd.print(second, DEC); } if (second > 9) { lcd.setCursor(6, 1); lcd.print(second, DEC); } if (dayOfMonth < 10) { lcd.setCursor(9, 1); lcd.print("0"); lcd.setCursor(10, 1); lcd.print(dayOfMonth, DEC); lcd.setCursor(11, 1); lcd.print("/"); } if (dayOfMonth > 9) { lcd.setCursor(9, 1); lcd.print(dayOfMonth, DEC); lcd.setCursor(11, 1); lcd.print("/"); } if (month < 10) { lcd.setCursor(12, 1); lcd.print("0"); lcd.setCursor(13, 1); lcd.print(month, DEC); lcd.setCursor(14, 1); lcd.print("/"); } if (month > 9) { lcd.setCursor(12, 1); lcd.print(month, DEC); lcd.setCursor(14, 1); lcd.print("/"); } lcd.setCursor(15, 1); lcd.print(year, DEC); switch (dayOfWeek) { case 1: lcd.setCursor(0, 2); lcd.print("Dzis Poniedzialek"); break; case 2: lcd.setCursor(0, 2); lcd.print("Dzis jest Wtorek"); break; case 3: lcd.setCursor(0, 2); lcd.print("Dzis jest Sroda"); break; case 4: lcd.setCursor(0, 2); lcd.print("Dzis jest Czwartek"); break; case 5: lcd.setCursor(0, 2); lcd.print("Dzis jest Piatek"); break; case 6: lcd.setCursor(0, 2); lcd.print("Dzis jest Sobota"); break; case 7: lcd.setCursor(0, 2); lcd.print("Dzis jest Niedziela"); break; } }
  5. Na prostym przykładzie może być przywitanie , zaraz po wejściu do domu. Oczywiście dołączyć trzeba czujnik ruchu
  6. Witajcie. Wpadłem na pomysł "przypominacza" z obsługą wyświetlacza. W tym przypadku zastosowałem wyświetlacz LCD I2C 20x4, oraz Arduino UNO. Schemacik jest dość prosty, polega on na włączeniu wyświetlacza, oraz wyświetlanego napisu ( można użyć przewijania tekstu ) na ustalony czas ( u mnie 5 sekund ). Kolejno wyłączeniu napisów i po jednej sekundzie, wyłączeniu wyświetlacza. A po odmierzeniu ustalonego czasu ( u mnie 60 sekund ), włącza wyświetlacz oraz napisy. I tak w kółko. Może komuś się przyda. Np. przy stacji Meteo aby na chwile pokazał czas, datę oraz temperaturę lub oczywiście może to być ważne wydarzenie lub wizyta u lekarza Tutaj w tym dziale to mój pierwszy wpis i projekt, więc w razie czego, proszę o wyrozumiałość Mam nadzieję, że komuś się przyda. #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 20, 4); void setup() { lcd.init(); lcd.backlight(); lcd.setCursor(0,0); // Napis w pierwszej rubryce lcd.print(" Witaj Marku."); lcd.setCursor(0,2); // napis w trzeciej rubryce lcd.print(" Jutro wolne :)"); } void loop() { lcd.display(); //napis włącz delay(5000); lcd.noDisplay(); // napis wyłącz delay(1000); //1000 ms to 1 sekunda. lcd.noBacklight(); // brak wyświetlacza delay(60000); // 60 sekund, jedna minuta lcd.backlight(); // włączenie wyświetlacza }
  7. Jak pisałem, nie jestem obcykany z komend. Masz możliwość poprawić lub podpowiedzieć kod ?
  8. No w tym wszystkim masz zupełną rację. Możesz wyedytować linijkę na poprawną ? W razie czego podeślę video z działania jak to z tym jest. Dzięki za info.
  9. Z diodą IR to nie jest problem. Na testy wymontowałem zwykłą z nieużywanego tunera DVB-T (fot1) i się sprawdza. Test robiony na pilocie i przełączało na przemian diody za pomocą klawiszy w pilocie.(fot2) Mam linijkę kodu, którym włączam pasek LED RGB właśnie tą diodą IR i własnym pilotem, zmienia się kolor na inny po X czasie, innym klawiszem mogę wyłączyć ale jak wezmę z powrotem aby włączyło to już tylko świeci się jeden kolor ( zielony ). Zamiast tego powinno włączyć się ponownie "tęcza" , a tak nie jest. Dlatego nie wiem, co jest w tym kodzie nie tak. Rozwiązałoby mi to całą sytuację poprawnego działania zestawu o którym pisze. Dzięki za odpowiedź. #include <IRremote.h> int red = 255; int green = 255; int blue = 255; int redPin = 9; int greenPin = 10; int bluePin = 11; int r = 0; int g = 0; int b = 0; int msSpeed = 50; // milli seconds const int REC_PIN = 7; IRrecv irrecv(REC_PIN); decode_results results; unsigned long key_value = 0; const int rainbow = 1; int loopThis = 0; void setup() { pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); irrecv.enableIRIn(); irrecv.blink13(true); } void loop() { start: if (irrecv.decode(&results)){ if (results.value == 0XFFFFFFFF) results.value = key_value; switch(results.value){ case 0xFD58A7: // OK on the remote if((red == 255) && (green == 255) && (blue == 255)) { green = 0; blue = 0; } loopThis = rainbow; break; case 0xFD20DF: // STOP on the rmote loopThis = 0; red = 0; green = 0; blue = 0; RGB(red, green, blue); delay(50); break; } key_value = results.value; irrecv.resume(); } switch(loopThis){ case rainbow: if((red == 255) && (green == 0) && (blue == 0)) { b = 0; g = 1; } if((red == 255) && (green == 255) && (blue == 0)) { g = 0; r = -1; } if((red == 0) && (green == 255) && (blue == 0)) { r = 0; b = 1; } if((red == 0) && (green == 255) && (blue == 255)) { b = 0; g = -1; } if((red == 0) && (green == 0) && (blue == 255)) { g = 0; r = 1; } if((red == 255) && (green == 0) && (blue == 255)) { r = 0; b = -1; } red = red + r; green = green + g; blue = blue + b; RGB(red, green, blue); delay(msSpeed); goto start; break; } } void RGB(int redValue, int greenValue, int blueValue) { analogWrite(redPin, redValue); analogWrite(greenPin, greenValue); analogWrite(bluePin, blueValue); }
  10. Witam. Jest to mój pierwszy post na tym forum więc w razie błędów, proszę o wyrozumiałość. Zamierzam zrobić sobie oświetlenie LED "rainbow", do półek szklanych w regale składających się z pięciu półeczek. Zdjęcie pokazuje aktualnie jeden kolor, z uwagi iż jest to pasek led składający się tylko z koloru niebieskiego. W miejsce paseczka (-ów) chciałbym zamiast niebieskiego, dać LED RGB ( zdjęcie ). Jest to najzwyklejszy pasek RGB 12V. przeglądając stronki WWW, znalazłem gotowy kod, który po podłączeniu "na sucho" Arduino UNO ( NANO ) sprawuje się znakomicie. Nie za jasny kolor, ustawienia zmiany przejścia koloru dobrałem w/g własnego czasu. Tylko: Chciałbym abym zestaw włączył lub wyłączył się za pomocą mikroswitcha lub za pomocą Diody IR. W tym przypadku włącznikiem będą dwa klawisze pilota ( PLAY/ STOP ) Kod jest tylko na działanie "tęczy " od razu. // Rainbow color changing RGB leds example // I am using common cathode RGB leds int PIN_RED = 9; int PIN_GREEN = 10; int PIN_BLUE = 11; int counter = 0; // Number of colors used for animating, higher = smoother and slower animation) int numColors = 255; // The combination of numColors and animationDelay determines the // animation speed, I recommend a higher number of colors if you want // to slow down the animation. Higher number of colors = smoother color changing. int animationDelay = 500; // number milliseconds before RGB LED changes to next color void setup() { pinMode(PIN_RED, OUTPUT); pinMode(PIN_BLUE, OUTPUT); pinMode(PIN_GREEN, OUTPUT); } void loop() { // This part takes care of displaying the // color changing in reverse by counting backwards if counter // is above the number of available colors float colorNumber = counter > numColors ? counter - numColors: counter; // Play with the saturation and brightness values // to see what they do float saturation = 1; // Between 0 and 1 (0 = gray, 1 = full color) float brightness = .40; // Between 0 and 1 (0 = dark, 1 is full brightness) float hue = (colorNumber / float(numColors)) * 360; // Number between 0 and 360 long color = HSBtoRGB(hue, saturation, brightness); // Get the red, blue and green parts from generated color int red = color >> 16 & 255; int green = color >> 8 & 255; int blue = color & 255; setColor(red, green, blue); // Counter can never be greater then 2 times the number of available colors // the colorNumber = line above takes care of counting backwards (nicely looping animation) // when counter is larger then the number of available colors counter = (counter + 1) % (numColors * 2); // If you uncomment this line the color changing starts from the // beginning when it reaches the end (animation only plays forward) // counter = (counter + 1) % (numColors); delay(animationDelay); } void setColor (unsigned char red, unsigned char green, unsigned char blue) { analogWrite(PIN_RED, red); analogWrite(PIN_GREEN, green); analogWrite(PIN_BLUE, blue); } long HSBtoRGB(float _hue, float _sat, float _brightness) { float red = 0.0; float green = 0.0; float blue = 0.0; if (_sat == 0.0) { red = _brightness; green = _brightness; blue = _brightness; } else { if (_hue == 360.0) { _hue = 0; } int slice = _hue / 60.0; float hue_frac = (_hue / 60.0) - slice; float aa = _brightness * (1.0 - _sat); float bb = _brightness * (1.0 - _sat * hue_frac); float cc = _brightness * (1.0 - _sat * (1.0 - hue_frac)); switch(slice) { case 0: red = _brightness; green = cc; blue = aa; break; case 1: red = bb; green = _brightness; blue = aa; break; case 2: red = aa; green = _brightness; blue = cc; break; case 3: red = aa; green = bb; blue = _brightness; break; case 4: red = cc; green = aa; blue = _brightness; break; case 5: red = _brightness; green = aa; blue = bb; break; default: red = 0.0; green = 0.0; blue = 0.0; break; } } long ired = red * 255.0; long igreen = green * 255.0; long iblue = blue * 255.0; return long((ired << 16) | (igreen << 8) | (iblue)); } Nie jestem jeszcze obcykany jeśli chodzi o komendy w programie Arduino. Za poprawienie kodu i wszelką pomoc, będę bardzo wdzięczny.
  11. Witam Wszystkich. Mam na imię Marek. Mam 41 lat. Mieszkam w Bełchatowie. Przygodę z elektroniką zacząłem już w wieku 14-u lat. Zazwyczaj były to zestawy do samodzielnego zestawu, które można było nabyć w sklepach z elektroniką. Lata lecą i nastąpiła duża przerwa z tym profilem. Ale od nowa zacząłem przygody z tą dziedziną. Kupiłem gotową płytkę Arduino UNO ( raczej jej klon ), oraz Arduino NANO ( również jej klon ). Zabawy i zadowolenia z działających "gotowych" projektów jest co nie miara. Mam w swoim umyśle kilka projektów, które ruszą mam nadzieję w życie z pomocą TEGO forum . Pozdrawiam Raz jeszcze.
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.