Offline
Full Member
Karma: 0
Posts: 113
|
 |
« on: October 31, 2012, 11:18:28 am » |
ho compilato due sketch, entrambe funzionanti, uno per comandare i led da potenziometri (ancora) e uno per indicare data e ora sull'LCD, ma come faccio per farli eseguire entrambe contemporaneamente? C'ho provato ma mi da sempre degli errori, ecco gli skethc: CONTROLLO LED int ledPin3 = 8; // pin led lunare int ledPin = 9; // LED prima fila connessi al pin 9 int ledPin4 = 6; // pin led uv, red, gree, blu int ledPin2 = 10; // LED seconda fila connessi al pin 10 int analogPin = 2; // potentiometer connected to analog pin A2 int analogPin2 = 1; //secondo potenziometro connesso al pin A1 int val = 0; // variable to store the read value int val2 = 0; // variabile per il secondo potenziometro void setup() { Serial.begin(9600); //inizializza la comunicazione seriale tra Arduino e pc per trasferire i dati da 'stampare' sul monitor pinMode(analogPin, INPUT); // setta il pin come ingresso pinMode(ledPin, OUTPUT); // sets the pin as output pinMode(ledPin2, OUTPUT); // output pin 2 pinMode(ledPin3, OUTPUT); // uscita led lunare }
void loop() { int pinState = analogRead(analogPin); val = analogRead(analogPin); // read the input pin Serial.println(100 - pinState / 10); //scrive la percentuale di potenza utilizzata dai led delay(1); // intervallo di un ms dopo la scrittura if (val >= 980) { digitalWrite (ledPin, HIGH); } else { analogWrite(ledPin, val / 4); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255 } if (val >= 980) { digitalWrite (ledPin2, HIGH); } else { analogWrite(ledPin2, val / 4); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255 } if (val >= 980) { digitalWrite (ledPin4, HIGH); } if (val <= 979 or val >= 650) { analogWrite (ledPin4, val / 4); } else { analogWrite(ledPin4, val / 4 + 10); //per avere un pò meno potenza nella fila dei led colorati faccio passare un pò meno corrente //quindi se agli altri arriverà 100 quiverà fatto passare 90 cioè 100-10 }
{ val2 = analogRead(analogPin2); } val = analogRead(analogPin); if (val >= 800) { digitalWrite (ledPin3,HIGH); } else { digitalWrite (ledPin3, LOW); }
} OROLOGIO RTC #include <LiquidCrystal.h> #include <Time.h> #include <Wire.h> #include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t LiquidCrystal LCD(12,11,5,4,3,2); void setup() { LCD.begin (16,2); setSyncProvider(RTC.get); // the function to get the time from the RTC if(timeStatus()!= timeSet) Serial.println("Unable to sync with the RTC"); else Serial.println("RTC has set the system time"); }
void loop() { LCD.setCursor(0,0); digitalClockDisplay(); delay(1000); }
void digitalClockDisplay(){ // digital clock display of the time LCD.print(hour()); printDigits(minute()); printDigits(second()); LCD.print(" "); LCD.setCursor(0,1); LCD.print(day()); LCD.print(" "); LCD.print(month()); LCD.print(" "); LCD.print(year()); LCD.println(); }
void printDigits(int digits){ // utility function for digital clock display: prints preceding colon and leading 0 LCD.print(":"); if(digits < 10) LCD.print('0'); LCD.print(digits); }
|
|
|
|
|
Logged
|
|
|
|
|
Cagliari
Online
Faraday Member
Karma: 51
Posts: 3164
|
 |
« Reply #1 on: October 31, 2012, 01:45:02 pm » |
#include <LiquidCrystal.h> #include <Time.h> #include <Wire.h> #include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t
int ledPin3 = 8; // pin led lunare int ledPin = 9; // LED prima fila connessi al pin 9 int ledPin4 = 6; // pin led uv, red, gree, blu int ledPin2 = 10; // LED seconda fila connessi al pin 10 int analogPin = 2; // potentiometer connected to analog pin A2 int analogPin2 = 1; //secondo potenziometro connesso al pin A1 int val = 0; // variable to store the read value int val2 = 0; // variabile per il secondo potenziometro
LiquidCrystal LCD(12,11,5,4,3,2);
void setup() { Serial.begin(9600); //inizializza la comunicazione seriale tra Arduino e pc per trasferire i dati da 'stampare' sul monitor pinMode(analogPin, INPUT); // setta il pin come ingresso pinMode(ledPin, OUTPUT); // sets the pin as output pinMode(ledPin2, OUTPUT); // output pin 2 pinMode(ledPin3, OUTPUT); // uscita led lunare LCD.begin (16,2); setSyncProvider(RTC.get); // the function to get the time from the RTC if(timeStatus()!= timeSet) Serial.println("Unable to sync with the RTC"); else Serial.println("RTC has set the system time"); }
void loop() { LCD.setCursor(0,0); digitalClockDisplay(); delay(1000);
int pinState = analogRead(analogPin); val = analogRead(analogPin); // read the input pin Serial.println(100 - pinState / 10); //scrive la percentuale di potenza utilizzata dai led delay(1); // intervallo di un ms dopo la scrittura if (val >= 980) { digitalWrite (ledPin, HIGH); } else { analogWrite(ledPin, val / 4); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255 } if (val >= 980) { digitalWrite (ledPin2, HIGH); } else { analogWrite(ledPin2, val / 4); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255 } if (val >= 980) { digitalWrite (ledPin4, HIGH); } if (val <= 979 or val >= 650) { analogWrite (ledPin4, val / 4); } else { analogWrite(ledPin4, val / 4 + 10); //per avere un pò meno potenza nella fila dei led colorati faccio passare un pò meno corrente //quindi se agli altri arriverà 100 quiverà fatto passare 90 cioè 100-10 }
{ val2 = analogRead(analogPin2);
} val = analogRead(analogPin); if (val >= 800) { digitalWrite (ledPin3,HIGH); } else { digitalWrite (ledPin3, LOW); }
}
void digitalClockDisplay(){ // digital clock display of the time LCD.print(hour()); printDigits(minute()); printDigits(second()); LCD.print(" "); LCD.setCursor(0,1);
LCD.print(day()); LCD.print(" "); LCD.print(month()); LCD.print(" "); LCD.print(year()); LCD.println(); }
void printDigits(int digits){ // utility function for digital clock display: prints preceding colon and leading 0 LCD.print(":"); if(digits < 10) LCD.print('0'); LCD.print(digits); }
Mancandomi le librerie non posso controllare se compila e se funziona. Ho semplicemente unito i due sketch e le funzioni setup e loop che devono essere uniche.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 113
|
 |
« Reply #2 on: October 31, 2012, 07:40:54 pm » |
Ho provato anche io ad unirle così, ma mi da errori, appena ci rimetto mano scrivo anche esattamente cosa mi dice, ma visto che le librerie vanno bene per gli sketch a sé stanti, perché unendoli vanno a dare degli errori?
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 16973
Don't know what I do
|
 |
« Reply #3 on: November 01, 2012, 01:14:02 am » |
Ho provato anche io ad unirle così, ma mi da errori, appena ci rimetto mano scrivo anche esattamente cosa mi dice, ma visto che le librerie vanno bene per gli sketch a sé stanti, perché unendoli vanno a dare degli errori?
Non puoi mica pensare di prendere 2 cose, unirle insieme e sperare che non vadano in conflitto  Devi eliminare eventuali parti in comune e strutturare poi il codice in modo da amalgamare insieme le funzioni secondarie dei 2 sketch.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 113
|
 |
« Reply #4 on: November 01, 2012, 01:34:57 pm » |
se volessi invece aggiugere dei comandi al secondo per accendere dei led ad un certo orario, del tipo if (setTime == hr,min,sec...... digitalWrite(led, HIGH); come posso fare?
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 16973
Don't know what I do
|
 |
« Reply #5 on: November 01, 2012, 05:24:44 pm » |
Struttura il loop in blocchi di codice demandando ad ogni blocco una specifica funzione da eseguire. Ordina i blocchi in base alla sequenza con cui devono essere ordinati. Inserisci il controllo dell'ora nel punto più appropriato del loop.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 113
|
 |
« Reply #6 on: November 01, 2012, 06:37:56 pm » |
Ok, ma che nome dò all'orario? Nel senso, io ho provato con If (timeSet (10hr, 22min, 28sec, etc... oppure if (RTC (etc. mi da sempre errore, non so come scrivere a che ora deve eseguire il comando dell'if.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 113
|
 |
« Reply #7 on: November 01, 2012, 09:43:57 pm » |
ragazzi, vista la mia ignoranza ci sono stato due ore... ma ho trovato la soluzione, naturalmente qui è impostato per vedere l'orario sul monitor seriale, ma basta aggiugere la libreria del display e mettere LCD al posto di Serial Ecco il nuovo sketch funzionante... e un'altro passetto è fatto /* * TimeRTC.pde * example code illustrating Time library with Real Time Clock. * */
#include <Time.h> #include <Wire.h> #include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t
void setup() { Serial.begin (9600); setSyncProvider(RTC.get); // the function to get the time from the RTC if(timeStatus()!= timeSet) Serial.println("Unable to sync with the RTC"); else Serial.println("RTC has set the system time"); }
void loop() { digitalClockDisplay(); delay(1000); }
void digitalClockDisplay(){ // digital clock display of the time Serial.print(hour()); printDigits(minute()); printDigits(second()); Serial.print(" ");
Serial.print(day()); Serial.print(" "); Serial.print(month()); Serial.print(" "); Serial.print(year()); Serial.println(); }
void printDigits(int digits){ // utility function for digital clock display: prints preceding colon and leading 0 Serial.print(":"); if(digits < 10) Serial.print('0'); Serial.print(digits);
int led=8; pinMode (8,OUTPUT); if (minute()==40 && second()==30)//immissione dell'orario di accensione del led digitalWrite (led,HIGH); if (minute()==40 && second() == 40)//immissione dell'orariodi spegnimento del led digitalWrite (led, LOW); }
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 113
|
 |
« Reply #8 on: November 01, 2012, 09:47:36 pm » |
avrei solo (per ora) un'altra domanda, durante le varie prove fatte col led 13, quello incorporato su Arduino, ad un certo punto utilizzando questo sketch (ne ho provati altri e non succede) rimane costantemente accesoappunto il suddetto led, sapreste dirmi come mai? Nello sketch non ho aggiunto nulla che si riferisse a quel led,ovvero, dopo aver provato ho cambiato il led 13 con l'8, che appunto funziona, ma l'altro non si spegne. Grazie
|
|
|
|
|
Logged
|
|
|
|
|
|