Arduino Polska Forum

Pełna wersja: Siema
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Programuję PLC w językach graficznych LAD, FBD, i te inne... W ostatnim czasie zakupiłem sobie Uno, coś poczytałem, nawet puściłem program do kości. I prawie działa...  Podpiąłem DHT11 i w zależności od temperatur regulował mi wypełnienie PWM i było ok. Ale żeby zabawka działała jak potrzebuję, to potrzebuję przełożyć z DHT temperaturę na częstotliwość. Napisałem taki prosty programik, tylko na pół sekundy jakby przerywał obwiednię; działa około 1,5 sekundy a potem staje, na 0,5 sek. Ma ktoś pomysł dlaczego?

Kod:
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);              
int pwm = 9;

void setup()
{
dht.begin();
 pinMode(pwm, OUTPUT);
}

void loop()
{
float t = dht.readTemperature();
    delay(500/t);
     digitalWrite(pwm,  HIGH);
     delay(500/t);
     digitalWrite(pwm,  LOW);
   
}
Witam
Kod:
float t = dht.readTemperature();
   delay(500/t);
    digitalWrite(pwm,  HIGH);
    delay(500/t);
    digitalWrite(pwm,  LOW);
 
}
No jak jest kod... to zaraz inaczej się patrzy na problem i człowieka :-)
Panie kolego.... piny PWM w procesorze służą do zadawania wartości w przedziale 0-255 (niektóre inne procki ze stajni atmela mają także 10 bitowe - czyli od 0-1024).
Jak na razie Twój fragment kodu zadaje tylko inne czasy przerwy dla funkcji delay(). Aby zmieniać wartości PWM musisz użyć analogWrite(pwm, t); To delay sobie wyrzuć. Nie mam pojęcia jak chcesz tym grać zmieniając temperaturę, bo ona nie będzie się aż tak bardzo przecież zmieniać :-) No chyba, że chcesz przypalać swoją zabawkę papierosem i obserwować jak cienko piszczy :-)
Może warto by poczytać o funkcji map(.....).
Odsyłam do źródeł : https://www.arduino.cc/en/Reference/HomePage
Kurcze wszystkiego nie możemy robić :-)
Pozdrawiam