www.swiatelka.pl  Strona Główna www.swiatelka.pl
...czyli forum miłośników światełek... ;-)

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj  AlbumAlbum  DownloadDownload
Google

 Ogłoszenie 
...UWAGA...NOWI UŻYTKOWNICY!!! ... brak słowa powitania w waszym pierwszym poście będzie równoznaczny z usunięciem posta i ostrzeżeniem. NA TYM FORUM CENIMY SOBIE KULTURĘ OSOBISTĄ!!! Lektura obowiązkowa: LINK

UWAGA
AKTUALIZACJA regulaminu działu handlowego > KLIK
Szczegóły na samym dole

Poprzedni temat «» Następny temat
Program C i Arduino. Pomoc.
Autor Wiadomość
fedu 

Dołączył: 11 Gru 2015
Posty: 166
Skąd: Zamosc
Wysłany: 20-03-2017, 09:44   Program C i Arduino. Pomoc.

Witam. Zaczynam zabawę z Arduino i językiem C. Jestem w trakcie pisania prostego programu do pomiaru temperatury ogniw z alarmem. Jak się okazuję nie do końca taki prosty. Posiadam płytkę Arduino UNO. Dwa czujniki ds18d20 LCD 16x2 I2C i buzzer pasywny KY-006 z którym mam najwięcej kłopotów. Założenie jest takie. Temperatury wyświetlają się na LCD, i to jest ok. Przy 50stC załącza się buzer i tylko robi cichutkie "pi' i dalej cisza pomimo tego że temperatura jest po wyżej 50c. Temperatura spada po niżej 50st. znowu robi cichutkie "pi". Czemu buzzer pika po cichu i krótko ? Najfajniej żeby grała jakaś melodyjka przy tym alarmie. Rozdzielczość czujnika też nie działa i pokazuję co 0,5 stopnia. Po niżej kod którego używam.. Z góry dziękuję.

KOD Programu

Kod:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define TEMPERATURE_PRECISION 12  // rozdzielczość czujnika
#define ONE_WIRE_BUS 2          //Linia danych podpięta jest pod pin 2 Ardiuno
OneWire oneWire(ONE_WIRE_BUS);
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Ustawienie adresu układu na 0x27
DallasTemperature sensors(&oneWire);  //Przekazanie danych dotyczących One Wire do DallasTemperature
  int buzzer = 10;                             //pin 12 jako buzzer
 

void setup(void)
{
  pinMode(buzzer,OUTPUT);                    //ustawiamy buzzer jako output
  lcd.begin(16,2);       //ustaw rozdzielczość ekranu 16x4
  lcd.backlight();       // Załączenie podświetlenia
  //Serial.begin(9600);
  sensors.begin();      //Włączenie biblioteki
 
}
 
void loop(void)
{
  sensors.requestTemperatures();                  //zażądaj odczyt temperatury z czujnika
  lcd.setCursor(0,0);                             //ustaw kursor w pozycji 0,0
  lcd.print("Temp1 :");                           //wyświetl "Temperatura: "
  lcd.setCursor(10,0);
  lcd.print(sensors.getTempCByIndex(0));          //wyświetl wartość z czujnika 0

  lcd.setCursor(0,1);
  lcd.print("Temp2 :");
  lcd.setCursor(10,1);
  lcd.print(sensors.getTempCByIndex(1));
  delay(1000);

if(sensors.getTempCByIndex(0) >= 50)       //jeżeli temperatura jest >= 30
 
  digitalWrite(buzzer, HIGH);              //uruchom alarm
 
 
 
  else                                    //w przeciwnym wypadku
  digitalWrite(buzzer, LOW);              //nie uruchamiaj alarmu
}
Ostatnio zmieniony przez fedu Wczoraj 18:22, w całości zmieniany 1 raz  
 
 
ptja 

Pomógł: 67 razy
Dołączył: 31 Gru 2012
Posty: 1934
Skąd: Łódź
Wysłany: 20-03-2017, 12:09   

Wykorzystaj port szeregowy do podejrzenia wartości w trakcie działania programu.
I jeszcze rozważ czytanie temperatury rzadziej i tylko raz w pętli (zapamiętaj wynik i nim się posługuj, nie wołaj funkcji z tym samym parametrem wielokrotnie).
_________________
--
pozdrawiam,
Jarek Andrzejewski
 
 
fedu 

Dołączył: 11 Gru 2015
Posty: 166
Skąd: Zamosc
Wysłany: 20-03-2017, 13:18   

Dzięki ale dopiero zaczynam poznawać ten język. Można pokazać jak to powinno wyglądać.
 
 
ptja 

Pomógł: 67 razy
Dołączył: 31 Gru 2012
Posty: 1934
Skąd: Łódź
Wysłany: 20-03-2017, 15:37   

Odkomentuj "Serial.begin(9600);" i dodaj przed i zamiast "if":

"<typ> temperatura = sensors.getTempCByIndex(0);
Serial.println(temperatura);
if (temperatura >= 50) ... dalej bez zmian"

Za <typ> wstaw typ wartości zwracanej przez funkcję = sensors.getTempCByIndex (pewnie float albo int, nie znam tej biblioteki).
_________________
--
pozdrawiam,
Jarek Andrzejewski
 
 
fedu 

Dołączył: 11 Gru 2015
Posty: 166
Skąd: Zamosc
Wysłany: 20-03-2017, 19:42   

Niestety dalej nie działa.
Ten kod sam działa.

int buzzer = 10; // set the buzzer control digital IO pin

void setup() {
pinMode(buzzer, OUTPUT); // set pin 8 as output
}

void loop() {
for (int i = 0; i < 100; i++) { // make a sound
digitalWrite(buzzer, HIGH); // send high signal to buzzer
delay(1); // delay 1ms
digitalWrite(buzzer, LOW); // send low signal to buzzer
delay(1);
}
delay(50);
for (int j = 0; j < 100; j++) { //make another sound
digitalWrite(buzzer, HIGH);
delay(2); // delay 2ms
digitalWrite(buzzer, LOW);
delay(2);
}
delay(1000);
}
  
 
 
ptja 

Pomógł: 67 razy
Dołączył: 31 Gru 2012
Posty: 1934
Skąd: Łódź
Wysłany: 20-03-2017, 19:59   

Zacznij od podstaw i polub Serial. Inaczej to strzelanie na oślep.
_________________
--
pozdrawiam,
Jarek Andrzejewski
 
 
fedu 

Dołączył: 11 Gru 2015
Posty: 166
Skąd: Zamosc
Wysłany: 20-03-2017, 20:12   

ptja napisał/a:
Zacznij od podstaw i polub Serial. Inaczej to strzelanie na oślep.


Dopiero się uczę. Chcę zrobić na szybko ten termometr z alarmem. Następne projekty bedę samodzielnie próbował. Po dokładnym zapoznaniu się z funkcjami języka.
 
 
ptja 

Pomógł: 67 razy
Dołączył: 31 Gru 2012
Posty: 1934
Skąd: Łódź
Wysłany: 20-03-2017, 21:07   

To zleć komuś i zapłać, jak chcesz szybko.
Jeśli chcesz zrobić sam, to zacznij od nauki i korzystania ze sprawdzonych sposobów.
_________________
--
pozdrawiam,
Jarek Andrzejewski
 
 
fedu 

Dołączył: 11 Gru 2015
Posty: 166
Skąd: Zamosc
Wysłany: 20-03-2017, 21:52   

ptja, Szczerze mówiąc nie spodziewałem się takiej odpowiedzi. :( Będę szukał dalej gdzieś jakiejś pomocy. Pozdrawiam.
 
 
Marcin S. 

Pomógł: 23 razy
Dołączył: 12 Wrz 2008
Posty: 382
Wysłany: 20-03-2017, 21:57   

Z tego programu, w którym buzzer działa, wynika, że potrzebuje on nie ustawienia na stałe

Kod:
digitalWrite(buzzer, HIGH);


ale trzeba go wysterować falą prostokątną. W tym programie mamy paczkę 100 okresów 500Hz, 50ms przerwy, 100 okresów 250Hz, sekunda przerwy i od początku.

A w Twoim pomiarze temperatury tego nie ma.

Pzdr.
M.
 
 
ptja 

Pomógł: 67 razy
Dołączył: 31 Gru 2012
Posty: 1934
Skąd: Łódź
Wysłany: 20-03-2017, 22:27   

fedu napisał/a:
ptja, Szczerze mówiąc nie spodziewałem się takiej odpowiedzi. :( Będę szukał dalej gdzieś jakiejś pomocy. Pozdrawiam.

Nie zawsze otrzymasz pomoc taką, jakiej oczekujesz.
Umiejętność znalezienia przyczyn będzie znacznie bardziej przydatna niż gotowy program... który i tak za chwilę zechcesz zmienić i napotkasz kolejny kłopot.
Programuję od ponad 30 lat, mam już pewne doświadczenie.
A rada Marcina to prawdopodobnie rozwiązanie problemu.
_________________
--
pozdrawiam,
Jarek Andrzejewski
 
 
Marcin S. 

Pomógł: 23 razy
Dołączył: 12 Wrz 2008
Posty: 382
Wysłany: 21-03-2017, 07:29   

fedu napisał/a:
ptja, Szczerze mówiąc nie spodziewałem się takiej odpowiedzi. :( Będę szukał dalej gdzieś jakiejś pomocy. Pozdrawiam.


Przecież nie napiszemy tego programu za Ciebie :) Dostałeś wędkę, ruszaj na ryby ;)

Pzdr.
M.
 
 
fedu 

Dołączył: 11 Gru 2015
Posty: 166
Skąd: Zamosc
Wysłany: 21-03-2017, 09:42   

Próbowałem dopisać falę prostokątną, ale albo gra cały czas albo wcale.
 
 
ptja 

Pomógł: 67 razy
Dołączył: 31 Gru 2012
Posty: 1934
Skąd: Łódź
Wysłany: 21-03-2017, 09:46   

fedu napisał/a:
Próbowałem dopisać falę prostokątną, ale albo gra cały czas albo wcale.


I wciąż nie chcesz użyć portu szeregowego, żeby podejrzeć stan programu?
Czego oczekujesz od nas zatem?
_________________
--
pozdrawiam,
Jarek Andrzejewski
 
 
fedu 

Dołączył: 11 Gru 2015
Posty: 166
Skąd: Zamosc
Wysłany: 21-03-2017, 10:35   

Port szeregowy jest pusty. Albo coś robię nie tak. Chciałbym żeby ta melodyjka działała jako alarm.
  
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Nie możesz ściągać załączników na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Strona wygenerowana w 0,13 sekundy. Zapytań do SQL: 16