Witam , prosty program który ma za zadanie wyświetlać godzinę oraz sterować serwem gdy załączony
zostaje przycisk. Obydwa układy działają osobno , kiedy chce je połączyć ze sobą w ten sposób to
występuje problem. Jak zrobic aby te fukcje void serwo oraz void czas zadziałały. Proszę o
wyrozumiałość zaczynam przygodę z arduino i programowaniem. Logikę programu jak na filmiku
https://www.youtube.com/watch?v=d_WaQ9Sszww 5:30
zostaje przycisk. Obydwa układy działają osobno , kiedy chce je połączyć ze sobą w ten sposób to
występuje problem. Jak zrobic aby te fukcje void serwo oraz void czas zadziałały. Proszę o
wyrozumiałość zaczynam przygodę z arduino i programowaniem. Logikę programu jak na filmiku
https://www.youtube.com/watch?v=d_WaQ9Sszww 5:30
Kod:
#include "Wire.h"
#include "TimeLib.h"
#include "DS1307RTC.h"
#include "LiquidCrystal.h"
#include "Servo.h"
Servo myservo;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Definicja pinów do których podłaczamy wyprowadzenia ekranu
int godzina_ON = 17;
int minuta_ON = 35;
int sekunda_ON = 51;
int godzina_OFF = 17;
int minuta_OFF = 35;
int sekunda_OFF = 53;
int sygnal = 6;
int pos = 0;
int przycisk = 7;
void setup() {
lcd.begin(16, 2);
myservo.attach(9); //Przyłaczenie serwomechanizmu do pinu 9 w Arduino
pinMode(sygnal, OUTPUT);
pinMode(przycisk, INPUT);
}
void loop() {
czas();
serwo1();
}
void czas () {
tmElements_t tm; //Inicjalizacja zegara DS1307
//Jeśli odczyt prawidłowy następuje wyświetlenie danych
if (RTC.read(tm)) {
lcd.setCursor(0, 0);
print2digits(tm.Hour); //Wyswietlenie godzin
lcd.print(":");
print2digits(tm.Minute);//Minut
lcd.print(":");
print2digits(tm.Second);//Sekund
lcd.setCursor(0, 1);
//Wyświetlenie daty
lcd.print(tm.Day);
lcd.print('/');
lcd.print(tm.Month);
lcd.print('/');
lcd.print(tmYearToCalendar(tm.Year));
//W przypadku problemu z modułem wyswietla odpowiedni komunikat
} else {
if (RTC.chipPresent()) {
lcd.setCursor(0, 0);
lcd.print("Zegar zatrzymany!");
} else {
lcd.setCursor(0, 0);
lcd.print("Blad odczytu!");
}
}
delay(1000);
if ((godzina_ON == tm.Hour) && (minuta_ON == tm.Minute) && (sekunda_ON == tm.Second))
{
digitalWrite(sygnal, HIGH);
}
if ((godzina_OFF == tm.Hour) && (minuta_OFF == tm.Minute) && (sekunda_OFF == tm.Second))
{
digitalWrite(sygnal, LOW);
}
}
//Funkcja odpowiedzialna za wyswietlanie zer na pozycji
//poprzedzającej jesli cyfra jest mniejsza od 10
void print2digits(int number) {
if (number >= 0 && number < 10) {
lcd.print('0');
}
lcd.print(number);
}
void serwo1 ()
{
if (digitalRead(przycisk) == HIGH) {
for (pos = 0; pos <= 90; pos += 1) //Zmiana pozycji (dodawanie) do 180 stopni
{
myservo.write(pos); //ustawienie zadanej pozycji
delay(15); //Czas na zmiane pozycji
} delay(2000);
//Analogiczne odejmowanie pozycji po osiągnięciu maksumum
for (pos = 90; pos >= 0; pos -= 1)
{
myservo.write(pos);
delay(15);
}
}