Offline
Newbie
Karma: 0
Posts: 26
|
 |
« Reply #30 on: December 07, 2012, 01:50:53 pm » |
il fatto è che facendo come mi hai consigliato tu succedono 2 cose: 1) non produce una nota completa...emette solo un brevissimo suono! 2) anche se scende sotto i 25° non si spegne e continua a "suonare"! Ho fatto esattamente come mi hai indicato tu!!!! ps non è che sono legato ai delay  ....il fatto è semplicemente che io voglio che questo dannato buzzer emetta quel suono così com'è impostato in quel processo!!!se c'è un buon modo per sostituirlo non ho problemi.Ma quello che mi avevi suggerito ieri non andava bene 
|
|
|
|
« Last Edit: December 07, 2012, 01:56:17 pm by acca90 »
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 7
Posts: 293
|
 |
« Reply #31 on: December 07, 2012, 01:57:46 pm » |
il fatto è che facendo come mi hai consigliato tu succedono 2 cose: 1) non produce una nota completa...emette solo un brevissimo suono! 2) anche se scende sotto i 25° non si spegne e continua a "suonare"! Ho fatto esattamente come mi hai indicato tu!!!! ps non è che sono legato ai delay  ....il fatto è semplicemente che io voglio che questo dannato buzzer emetta quel suono così com'è impostato in quel processo!!!se c'è un buon modo per sostituirlo non ho problemi.Ma quello che mi avevi suggerito ieri non andava bene  e lo facciamo con i tone... riposta il programma... impossibile che non si spenga... se me lo riposti poi lo testo: questa volta mi sono procurato il simulatore e durante il we posso provare anche ad attaccarmi col mega.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 26
|
 |
« Reply #32 on: December 07, 2012, 03:35:53 pm » |
Sono riuscito a farlo funzionare come volevo....anche se fa 1 solo nota!!!ma come allarme è più che sufficiente!!!adesso tocca al servo!!!
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 7
Posts: 293
|
 |
« Reply #33 on: December 07, 2012, 03:53:08 pm » |
Sono riuscito a farlo funzionare come volevo....anche se fa 1 solo nota!!!ma come allarme è più che sufficiente!!!adesso tocca al servo!!!
be penso che tu debba dirci cosa sbagliavi... vabbè pensiamo al futuro: cosa deve fare questo servo e che sorgente hai in questo momento?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 26
|
 |
« Reply #34 on: December 07, 2012, 03:58:06 pm » |
Sbagliavo una piccola impostazione...ma era un errore di distrazione perchè non avevo cancellato tutta la parte vecchia riguardo al buzzer. Il servo deve avere la stessa funzione che ha il buzzer. Quindi sopra i 25° si attva, sotto si spegne!!!!
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16431
Don't know what I do
|
 |
« Reply #35 on: December 07, 2012, 06:00:00 pm » |
@acca90: ok, vedo che non rispondi alle nostre domande, non segui i nostri consigli e fai tutto di testa tua  Onore al merito, in bocca al lupo per il tuo progetto, io mi tiro indietro.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 7
Posts: 293
|
 |
« Reply #36 on: December 08, 2012, 03:05:36 am » |
@acca90: ok, vedo che non rispondi alle nostre domande, non segui i nostri consigli e fai tutto di testa tua  Onore al merito, in bocca al lupo per il tuo progetto, io mi tiro indietro. è si... c'ha ragione leo... tra l'altro il doppio tono se fai come ti ho detto io è assolutamente funzionante ed assolutamente simile al quello della tua funzione buzzer... e quanto al servo la domanda era intesa sul cosa deve fare questo servo...quanto deve muoversi in particolare e come... e poi deve aprire una finestra? deve aprire un rubinetto? deve far scendere delle barre di boro nel nocciolo?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 26
|
 |
« Reply #37 on: December 08, 2012, 03:18:28 am » |
Allora!!! Ho usato la funzione tone!!! E il risultato mi va bene!!! L'ho scritto anche nel post precedente...Tanto è vero che in uno dei post di qsecofr è presente questo "comando"...o sbaglio? Io ho seguito il suo consiglio per il semplice motivo che era il più semplice. Adesso vi riposto lo sketch... #include <Servo.h> #include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); float tempC; int sensore = A1; int val = 0; int vecchio_val = 0; int stato = 0; int valore; int angolo = 0; Servo mioservo;
const byte tempOttima = 0; const byte tempOttimaMax = 20; const byte tempCritica = 25; const byte ledgreen = 10; const byte ledyellow = 9; const byte ledred = 8;
bool green=false; bool yellow=false; bool red=false; bool buzzer=false; bool servo=false; void setup() { lcd.begin(16, 2); pinMode(13, INPUT); pinMode(10, OUTPUT); pinMode(9, OUTPUT); pinMode(8, OUTPUT); mioservo.attach(6); pinMode(7, OUTPUT); } void loop() { lcdlm35(); if ((tempC >= tempOttima) && (tempC <= tempOttimaMax)) {green = true;} else { green = false;}; if ((tempC >tempOttimaMax) && (tempC <= tempCritica)) {yellow = true; } else { yellow = false; }; if (tempC > tempCritica) {red = true;} else {red = false;} if (tempC > tempCritica) {buzzer = true;} else {buzzer = false;} if (tempC > tempCritica) {servo = true;} else {servo = false;} aggiornacolori(); }
void lcdlm35() { lcd.clear(); lcd.print( "Temperatura..."); tempC = analogRead(sensore); tempC = (5.0 * tempC * 100.0)/1024.0; lcd.setCursor(0, 1); lcd.print(tempC); lcd.print( (char) 223); lcd.print(" Celsius "); delay(1500);//delay(750); lcd.clear(); }
void aggiornacolori() { if (green == true) { digitalWrite(ledgreen, HIGH); } else { digitalWrite(ledgreen, LOW); }; if (yellow == true) { if(( millis() % 1000) > 500) { digitalWrite(ledyellow, HIGH); } else { digitalWrite(ledyellow, LOW); } } else { digitalWrite(ledyellow, LOW); } if (red == true) { tone(7, 1000); if(( millis() % 1000) > 500) { digitalWrite(ledred, HIGH); } else { digitalWrite(ledred, LOW); } } else { noTone(7); digitalWrite(ledred, LOW); }
if (servo == true) { servo1();}
}
void servo1() { for(angolo = 0; angolo < 180; angolo +=1) { mioservo.write(angolo); delay(20); } for(angolo = 180; angolo >= 1; angolo -=1) { mioservo.write(angolo); delay(20); } }
Il servo adesso non è collegato!!! P.S. da come potete notare non ho fatto di testa mia!!!
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 7
Posts: 293
|
 |
« Reply #38 on: December 08, 2012, 05:49:28 am » |
Allora!!! Ho usato la funzione tone!!! E il risultato mi va bene!!! L'ho scritto anche nel post precedente...Tanto è vero che in uno dei post di qsecofr è presente questo "comando"...o sbaglio? Io ho seguito il suo consiglio per il semplice motivo che era il più semplice. Adesso vi riposto lo sketch... ..... Il servo adesso non è collegato!!! P.S. da come potete notare non ho fatto di testa mia!!!
concedimi la battuta: più che altro quando hai fatto di testa tua non ha funzionato...il che onestamente per uno alle prime armi è assolutamente normale...non che io sia infallibile anzi:ogni programmatore fallisce n volte prima di portare a termine il programma ... si chiama fase di debug ma non si bolla un programma in fase di debug come non funzionante e lo si mette nel cassetto... la programmazione non è una lampadina che o è buona o è fulminata è un processo produttivo fatto di step da raggiungere (e capire) pianpiano. La cosa che un po' mi infastidisce è che diremo "tarocchi" il mio sorgente e poi dici che non funziona... e basta... e non aggiungi altro... ed io sto li 3 gg a pensare ma... porca eva sono 2 if... deve funzionare... e poi mi accorgo che non hai messo l'else... o non hai messo il tone come ti ho detto...infatti il bitonale funziona se applichi quello che ti ho detto qualche messaggio fa... ben detto questo continuiamo con il sorgente tanto ormai siamo agli sgoccioli... prossimo messaggio... ...ah... poi pensiamo all'isteresi della temperatura... non hai notato nulla di strano?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 7
Posts: 293
|
 |
« Reply #39 on: December 08, 2012, 06:09:54 am » |
#include <Servo.h> #include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); float tempC; int sensore = A1; int val = 0; int vecchio_val = 0; int stato = 0; int valore; int angolo = 0; Servo mioservo;
const byte tempOttima = 0; const byte tempOttimaMax = 20; const byte tempCritica = 25; const byte ledgreen = 10; const byte ledyellow = 9; const byte ledred = 8;
bool green=false; bool yellow=false; bool red=false; bool buzzer=false; bool servo=false; void setup() { lcd.begin(16, 2); pinMode(13, INPUT); pinMode(10, OUTPUT); pinMode(9, OUTPUT); pinMode(8, OUTPUT); mioservo.attach(6); pinMode(7, OUTPUT); } void loop() { lcdlm35(); if ((tempC >= tempOttima) && (tempC <= tempOttimaMax)) {green = true;} else { green = false;}; if ((tempC >tempOttimaMax) && (tempC <= tempCritica)) {yellow = true; } else { yellow = false; }; if (tempC > tempCritica) {red = true;} else {red = false;}
//********************************************************************* // via tutta 'sta roba.... // if (tempC > tempCritica) // {buzzer = true;} //else {buzzer = false;} // if (tempC > tempCritica) // {servo = true;} // else {servo = false;} //********************************************************************* aggiornacolori(); }
void lcdlm35() { lcd.clear(); lcd.print( "Temperatura..."); tempC = analogRead(sensore); tempC = (5.0 * tempC * 100.0)/1024.0; lcd.setCursor(0, 1); lcd.print(tempC); lcd.print( (char) 223); lcd.print(" Celsius "); delay(1500);//delay(750); lcd.clear(); }
void aggiornacolori() { if (green == true) { digitalWrite(ledgreen, HIGH); } else { digitalWrite(ledgreen, LOW); }; if (yellow == true) { if(( millis() % 1000) > 500) { digitalWrite(ledyellow, HIGH); } else { digitalWrite(ledyellow, LOW); } } else { digitalWrite(ledyellow, LOW); } if (red == true) { //tone(7, 1000); <-----questo lo spostiamo poi come ti ho detto prima // apriamo il servo; mioservo.write(90); //il mio servo si apre massimo di 90 gradi... vedi col tuo che movimento fa...
if(( millis() % 1000) > 500) { tone(7, 1000); // <----------aggiunto 1000hz digitalWrite(ledred, HIGH); } else { tone(7, 2000); // <-------------aggiunto: occhio la frequenza è diversa 2000hz digitalWrite(ledred, LOW); } } else { noTone(7); digitalWrite(ledred, LOW); mioservo.write(0); //riporta il servo in posizione chiusa. }
// via questo // if (servo == true) { // servo1();}
}
//void servo1() //{ /// via tutta questa procedura non ti serve //} } ecco... speriamo vada... prima però vedi di aprire il programma esempio dei servo e verificare che il motore si muova come uno si auspicherebbe... il programma esempio sweep si muove di 180 gradi avanti e poi 180 indietro molto lentamente perchè lo fa a step di 1 grado aspettanto il movimento... nel mio servo dopo i 90gradi il motore prende a grattare indi per cui mi sono fermato a 90 gradi ed ho lasciato che lo facesse la libreria servo senza attese e delay a tutta birra.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 26
|
 |
« Reply #40 on: December 08, 2012, 06:12:26 am » |
Non funzionava il tuo non perchè fosse sbagliato, ma perchè non avevo cancellato una parte del vecchio e non l'avevo notato prima...poi ieri sera guardando bene avevo notato la mia caxxata...Credevo di essermi spiegato ieri sera, forse ho scritto qualcosa di equivoco...scusami!!! 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 26
|
 |
« Reply #41 on: December 08, 2012, 08:33:44 am » |
Il programma funziona come volevo finalmente!!! Grazie!!! Solo che adesso ho riscontrato un nuovo problema... Quando si attivano il led,il servo e il buzzer la temperatura sale da 25° a 35°.... Questo è un problema dovuto all'alimentazione oppure a qualcos'altro??? (all'alimentazione intendo adesso perchè devo comprare una batteria che sia utile solo al buzzer e al servo, adesso sono alimentati con arduino)
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 7
Posts: 293
|
 |
« Reply #42 on: December 08, 2012, 09:59:32 am » |
Il programma funziona come volevo finalmente!!! Grazie!!! Solo che adesso ho riscontrato un nuovo problema... Quando si attivano il led,il servo e il buzzer la temperatura sale da 25° a 35°.... Questo è un problema dovuto all'alimentazione oppure a qualcos'altro??? (all'alimentazione intendo adesso perchè devo comprare una batteria che sia utile solo al buzzer e al servo, adesso sono alimentati con arduino)
...guarda che non ci hai detto come hai collegato le cose... in particolare si alza la temperatura di che? del nocciolo? dell'incubatrice? cosa è che fa abbassare ed alzare la temperatura di questa cosa? barre di uranio arricchito?  ... e soprattutto quando hai testato il tuo display e l'lm35 li hai testati approfonditamente per verificare che la temperatura fosse corretta e stabile? ... comunque devi stare all'occhio alle isteresi che non hai gestito per nulla.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 7
Posts: 293
|
 |
« Reply #43 on: December 08, 2012, 10:04:23 am » |
altra cosa: void lcdlm35() { lcd.clear(); lcd.print( "Temperatura..."); tempC = analogRead(sensore); tempC = (5.0 * tempC * 100.0)/1024.0; lcd.setCursor(0, 1); lcd.print(tempC); lcd.print( (char) 223); // <-------------------- perchè??? lcd.print(" Celsius "); delay(1500);//delay(750) ; // <--------------------QUI DIREI PERCHE' PERCHE' PERCHE'??? lcd.clear(); // <-------------------- perchè??? }
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 26
|
 |
« Reply #44 on: December 08, 2012, 11:41:40 am » |
Ma quanti perchè!!!  Allora...quando ho testato lcd e lm35 soli la temperatura la calcolava bene!!! Ora come ora sono tutte collegate(lm35, lcd, i 3 led, buzzer e servo) tramite i 5V di arduino, quindi ho comprato una batteria da 9V per alimentare a parte servo e buzzer. La temperatura che si alza è quella dell' lcd, per esempio se la temperatura è di 22°, basta che si accenda il led giallo che la temperatura sale di 2 gradi. I led sono collegati ai 5V di arduino tramite resistori. Cosa non ho gestito??? Ripeto sono alle prime armi con Arduino...quindi non ti sorprenderà sapere che io non sappia cosa siano le isteresi!!!! lcd.print( (char) 223); // <-------------------- perchè??? lcd.print(" Celsius "); delay(1500);//delay(750) ; // <--------------------QUI DIREI PERCHE' PERCHE' PERCHE'??? lcd.clear(); // <-------------------- perchè??? Il primo perchè è quello legato al simbolo °; il secondo perchè il mio intento era quello di rilevare la temperatura ogni tot di tempo e non continuamente; il terzo perchè il prof mi aveva consigliato di mettere lcd.clear() all'inizio e alla fine per pulire l' lcd..... Spero di aver risposto ai tanti perche  !!!
|
|
|
|
|
Logged
|
|
|
|
|
|