04-11-2025, 21:40
Hej, mam problem z programem. Do płytki prawidłowo podłączony jest analogowy czujnik temperatury LM35 oraz dioda LED.
Program działa tak, że dioda miga określoną liczbę razy (liczba ta jest zależna od temperatury). Przedziały mam prawidłowo dobrane. Napięcie wyjściowe na czujniku wynosi 0.25V, więc powinno działać prawidłowo. Dioda zawsze miga TYLKO dwa razy, czyli sygnalizuje temperaturę mniejszą niż 20 stopni. Zmieniałem widełki, ale nic to nie zmieniało.
Postanowiłem zamiast 'else if' wpisać 'if' i po uruchomieniu programu dioda mrugnęła 6 razy, czyli zasygnalizowała temperaturę powyżej 26 stopni. Również zwiększyłem ten próg do 30 stopni z myślą, że złapię ten środkowy przedział, ale nic z tego... Macie jakieś pomysły co jest nie tak? Może to jakaś głupota, ale siedzę, myślę, myślę i nic.
Dodam tylko, że jest to program z książki Arduino - 65 praktycznych projektów. Jestem początkujący, więc proszę o wyrozumiałość. Może polecicie też jakieś ciekawe książki, kursy? Ten na FORBOT mi nie siedzi...
Tutaj jest cały program:
#define led 3
int blinks = 0;
void setup() {
pinMode(led, OUTPUT);
}
int checkTemp(){
float voltage = 0;
float celsius = 0;
float hotTemp = 26;
float coldTemp = 20;
float sensor = 0;
int result;
sensor = analogRead(A0);
voltage = (sensor * 5000) / 1023;
voltage = voltage - 500;
celsius = voltage / 10;
if(celsius < coldTemp){
result = 2;
}
else if (celsius >= coldTemp && celsius <= hotTemp){
result = 4;
}
else {
result = 6;
}
return result;
}
void blinkLed(int cycles, int del){
for(int i = 0; i < cycles; i++){
digitalWrite(led, HIGH);
delay(del);
digitalWrite(led, LOW);
delay(del);
}
}
void loop() {
blinks = checkTemp();
blinkLed(blinks, 500);
delay(3000);
}
Z góry dziękuję!!!
Program działa tak, że dioda miga określoną liczbę razy (liczba ta jest zależna od temperatury). Przedziały mam prawidłowo dobrane. Napięcie wyjściowe na czujniku wynosi 0.25V, więc powinno działać prawidłowo. Dioda zawsze miga TYLKO dwa razy, czyli sygnalizuje temperaturę mniejszą niż 20 stopni. Zmieniałem widełki, ale nic to nie zmieniało.
Postanowiłem zamiast 'else if' wpisać 'if' i po uruchomieniu programu dioda mrugnęła 6 razy, czyli zasygnalizowała temperaturę powyżej 26 stopni. Również zwiększyłem ten próg do 30 stopni z myślą, że złapię ten środkowy przedział, ale nic z tego... Macie jakieś pomysły co jest nie tak? Może to jakaś głupota, ale siedzę, myślę, myślę i nic.
Dodam tylko, że jest to program z książki Arduino - 65 praktycznych projektów. Jestem początkujący, więc proszę o wyrozumiałość. Może polecicie też jakieś ciekawe książki, kursy? Ten na FORBOT mi nie siedzi...
Tutaj jest cały program:
#define led 3
int blinks = 0;
void setup() {
pinMode(led, OUTPUT);
}
int checkTemp(){
float voltage = 0;
float celsius = 0;
float hotTemp = 26;
float coldTemp = 20;
float sensor = 0;
int result;
sensor = analogRead(A0);
voltage = (sensor * 5000) / 1023;
voltage = voltage - 500;
celsius = voltage / 10;
if(celsius < coldTemp){
result = 2;
}
else if (celsius >= coldTemp && celsius <= hotTemp){
result = 4;
}
else {
result = 6;
}
return result;
}
void blinkLed(int cycles, int del){
for(int i = 0; i < cycles; i++){
digitalWrite(led, HIGH);
delay(del);
digitalWrite(led, LOW);
delay(del);
}
}
void loop() {
blinks = checkTemp();
blinkLed(blinks, 500);
delay(3000);
}
Z góry dziękuję!!!

