as the topic says, I've written this little program for my school project.
I'm as the code says, arduino should output 3 signals coming out from my A3 pwm output: 0, 123, 255
unfortunately, the code only works then the value is over 150, and the output is always 4.98V
it seems as pwm is outputting as a digital instead of analog
please help
#include <TinyLiquidCrystal_I2C.h> //I2C adattato per attiny85, pilota il display
#include <TinyWireM.h> // Wire adattato per attiny85
int pin_temp = A2; //Pin di collegamento del piedino Vout del sensore di temperatura
float temp = 0; //Variabile in cui verrà memorizzata la temperatura rilevata
int tip120PIN = A3; //Variabile assegnata al transistor
LiquidCrystal_I2C lcd(0x3F,16,2); //Inizializzazione standard piattaforma I2C
int pinSensorPIR = 1; //Assegnando le variabili
int pinLed = 5; //Led lampeggiante per illuminare il garage
int valorSensorPIR = 0; //Imposto un valore basso al sensore PIR
void setup()
{
lcd.init(); //Impostazione del display LCD
lcd.backlight();
lcd.setCursor(0, 0); //Sposto il cursore sulla prima riga (riga 0) e sulla prima colonna
lcd.print("Temperatura:"); //Stampo il messaggio 'Temperatura:' sulla prima riga
analogReference(INTERNAL);
//Definisco i pin come input e output
pinMode(pinSensorPIR,INPUT);
pinMode(pinLed,OUTPUT);
pinMode(pin_temp,INPUT);
pinMode(tip120PIN,OUTPUT);
delay(6000);
}
void loop() {
//Calcolo temperatura
temp = 0;
for (int i = 0; i < 5; i++) { //Esegue l'istruzione successiva 5 volte
temp += (analogRead(pin_temp) / 9.31); //Calcola la temperatura e la somma alla variabile 'temp'
}
temp /= 5; //Calcola la media matematica dei valori di temperatura
if (temp <30) {
analogWrite(tip120PIN,0);
lcd.setCursor(1, 1);
lcd.print("Duty cycle 0% ");
} else if ((temp >=29) && (temp <35))
{ analogWrite(tip120PIN,123);
lcd.setCursor(1, 1);
lcd.print("Duty cycle 50% ");
} else {
analogWrite(tip120PIN,250);
lcd.setCursor(1, 1);
lcd.print("Duty cycle 100%");
}
/*Visualizzo la temperatura sul display LCD =============================================*/
lcd.setCursor(12, 0); //Sposto il cursore sulla prima colonna e sulla seconda riga
lcd.print(temp); //Stampo sul display LCD la temperatura
lcd.print(" C"); //Stampo uno spazio e il carattere 'C' sul display
/*===========================================*/
delay(1000); //Ritardo di un secondo (può essere modificato)
//Leggo il valore del sensore PIR, che può assumere 1 o 2 valori
//1 quando rileva movimento e 0 quando non c'è movimento.
valorSensorPIR = digitalRead(pinSensorPIR);
//Verificando l'occorrenza di movimento
if (valorSensorPIR == 1) {
accendi();
} else {
spegni();
}
}
void accendi() {
digitalWrite(pinLed, HIGH); //accendo il led
delay(6000); //Tempo in cui il led rimane acceso
spegni();
delay(2000);
}
void spegni() {
digitalWrite(pinLed, LOW); //Spengo il led
}