Go Down

Topic: Finalmente sono arrivato a due, ma... (Read 758 times) previous topic - next topic

Dandovino

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:
Quote
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);
}

}

Quote
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);
}




PaoloP

Code: [Select]
#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.

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?

leo72


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.

Dandovino

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?

leo72

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.

Dandovino

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.

Dandovino

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
Quote
/*
* 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);
 
 
}

Dandovino

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

Go Up