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 digitalClockDisplay(){
// digital clock display of the time
LCD.print(hour());
printDigits(minute());
printDigits(second());
LCD.print(" ");
LCD.setCursor(0,1);
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);
}
#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.
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?
Dandovino:
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.
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?
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.
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.
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(" ");
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);
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