Chiedo scusa,sono un principiante e anche pensionato, arduino mi serve per diletto e a tenermi impegnato.Di programmazione ne so poco.Andiamo ai problemi:avevo scaricato tanti sketch dai vari siti tutti funzionanti e con nessun problema.Adesso che devo attuare il progetto, quando li compilo alcuni mi dicono:include avr/pgsmspace..,altri srw_atomic_write_low.Ripeto funzionavano alla grande.Ho pure disistallato 2 volte arduino e riestallandoli dalla cartella dovevo fu salvato quando lo installai.Uso la versione 1.8.4 e win 10.Come posso risolvere il problema?Non ho toccato nulla e arduino mi serve per tenermi su. Uso un clone di arduino.Grazie molte .
Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.
Guglielmo
P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili
Potresti mettere un esempio di programma che ti da il problema così cerchiamo di capire ? Se è un qualche cosa che hai copiato da qualche parte, basta che metti il link di dove possiamo prenderlo …
Guglielmo
uno dei tanti sketch:
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <DS3232RTC.h> //http://github.com/JChristensen/DS3232RTC
#include <TimeLib.h> //http://playground.arduino.cc/Code/Time (presente in gestione
// librerie, ma da installare – already present in ide library managere, but not yet installed
#include <Wire.h> //http://arduino.cc/en/Reference/Wire (vedi sopra – see above)
#include <LiquidCrystal_I2C.h> // libreria di gestione del display lcd
//--------------------addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
//
time_t t;
tmElements_t tm;
//
float temperatura = 0; // zona di memorizzazione della temperatura fornito da DS3231
float temp1 = 0; // zona di memorizzazione della temperatura in gradi celsius
int digits = 0; // zona di memorizzazione dei minuti e dei secondi da esporre
// sul display lcd
char tabmesi [37] = "genfebmaraprmaggiulugagosetottnovdic"; // tabella descrizione mesi
// above: italian month description, on three digits
int mese = 0; // zona di memorizzazione del mese corrente
int lavoro = 0; // zona di lavoro, utilizzata per calcoli intermedi
//
//********* routine di esposizione di data, ora e temperatura sul display lcd
//*************** time and temperature on lcd display **********************
//
void esponidati(void)
{
// esposizione dei dati rilevati sul timer di arduino
lcd.clear();
lcd.print(" ");
lcd.print(day());
lcd.print(' ');
//Arduino: modulo RTC DS3231 orologio digitale – digital clock
// doppio utilizzo SDA SCL, Real Time Clock, I2C, lcd 1620, orologio digitale, digital clock
mese = month(); // memorizza il mese
mese = mese - 1; // diminuisce di 1 il valore del mese poiche'
// la descrizione del primo mese (gen) inizia
// all'indirizzo zero della tabella mesi
lcd.print (tabmesi [(mese * 3)]); // espone la prima lettera del mese
lcd.print (tabmesi [(mese * 3 + 1)]); // espone la seconda lettera del mese
lcd.print (tabmesi [(mese * 3 + 2)]); // espone la terza lettera del mese
lcd.print(' ');
lcd.print(year());
lcd.setCursor(0, 1);
lcd.print(hour());
digits = (minute());
printDigits(); // routine esposizione zeri non significativi
digits = (second());
printDigits(); // routine esposizione zeri non significativi
lcd.print (" t:");
lcd.print (temp1);
}
//
//****routine visualizzazione minuti e secondi comprensivi di zeri non significativi*****
// ************* displays minutes and seconds, including non significant zeroes ***********
//
void printDigits()
{
lcd.print(':');
if (digits < 10)
lcd.print('0');
lcd.print(digits);
}
void setup(void)
{
Serial.begin (9600); // inizializza il monitor seriale
lcd.begin(16, 2); // inizializza il display e accende
lcd.backlight(); // lo sfondo
lcd.print (" buongiorno"); // goodday
delay (1500);
lcd.clear ();
setSyncProvider(RTC.get); // sincronizza il timer di Arduino con i dati presenti
// sul modulo RTC
lcd. clear ();
if (timeStatus() != timeSet) // verifica se la sincronizzazione e' ok
lcd.print(" orologio non"); // “clock not”
else
lcd.print(" orologio"); // “clock”
lcd.setCursor (0, 1);
lcd.print (" sincronizzato"); // “ syncronized”
delay (1500);
temperatura = RTC.temperature(); // rileva per la prima volta
}
void loop(void)
{
if (Serial.available() == 17) // controlla se e' in arrivo una stringa da 17
// caratteri (aa,mm,gg,hh,mm,ss)
{ // acquisisce la stringa con data ed ora
int y = Serial.parseInt();
tm.Year = y2kYearToTm(y);
tm.Month = Serial.parseInt();
tm.Day = Serial.parseInt();
tm.Hour = Serial.parseInt();
tm.Minute = Serial.parseInt();
tm.Second = Serial.parseInt();
t = makeTime(tm);
RTC.set(t); // aggiorna (setta) il modulo RTC
setTime(t); // aggiorna (setta) il modulo RTC
}
// fine del ciclo di acquisizione data ed ora
digits = (second()); // verifica se sono passati 10 secondi dal precedente
// rilevamento della temperatura
lavoro = digits % 10; // calcola il resto del secondo corrente diviso 10
if (lavoro == 9) // se si e' al nono secondo di ogni decade di minuto (se si e'
// al secondo 9, 19, 29, 39, 49 o 59 di ogni minuto)
// if we are at the 9,19,29... secondo of each minutes,
temperatura = RTC.temperature(); // rileva la temperatura – catch temperature
temp1 = temperatura / 4.0; // trasforma la temperatura in gradi celsius
esponidati(); // lancia la routine di esposizione dei dati
//Arduino: modulo RTC DS3231 orologio digitale – digital clock
// doppio utilizzo SDA SCL, Real Time Clock, I2C, lcd 1620, orologio digitale, digital clock
delay (1000); // aspetta un secondo prima di andare ad esporre
// nuovi dati, al fine di consentire al display
// una visualizzazione stabile
}
L’altro e’ questo:
#include <Wire.h>
#include "TSL2561.h"
#define relePin 5 //Pin collegamento relè
TSL2561 tsl(TSL2561_ADDR_FLOAT);
void setup(void) {
Serial.begin(9600); // Impostazione porta per monitor seriale
pinMode(relePin, OUTPUT); // Impostazione della porta come uscita
if (tsl.begin()) {
Serial.println("Trovato Sensore");
} else {
Serial.println("Sensore assente?");
while (1);
}
tsl.setGain(TSL2561_GAIN_0X); // Nessun guadagno
tsl.setTiming(TSL2561_INTEGRATIONTIME_13MS); // Tempo di integrazione per luce luminosa.
}
void loop(void) {
// Lettura del sensore luce visibile
uint16_t x = tsl.getLuminosity(TSL2561_VISIBLE);
Serial.println(x, DEC);
uint32_t lum = tsl.getFullLuminosity();
uint16_t ir, full;
ir = lum >> 16;
full = lum & 0xFFFF;
//Stampa valori su monitor seriale
Serial.print("Valore IR : "); Serial.print(ir); Serial.print("\t\t");
Serial.print("Valore totale : "); Serial.print(full); Serial.print("\t");
Serial.print("Valore visibile: "); Serial.print(full - ir); Serial.print("\t");
Serial.print("Valore in Lux : "); Serial.print(tsl.calculateLux(full, ir)); Serial.print("\t");
// Controllo attivazione del relè in base al valore di luminosità letto
int luxSense = tsl.calculateLux(full, ir);
if (luxSense < 200)
{
digitalWrite(relePin, HIGH); //Attiva l'uscita che eccita il relè
Serial.println("ATTIVO USCITA RELE'");
} else {
digitalWrite(relePin, LOW); //Disattiva l'uscita che diseccita il relè
Serial.println("DISATTIVO USCITA RELE'");
}
delay(1000); //Pausa tra le letture del sensore
}
Beh, nel primo … hai un’infinità di #include duplicati e alcuni triplicati …
Pulendo un po’ il codice :
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <DS3232RTC.h> //http://github.com/JChristensen/DS3232RTC
#include <TimeLib.h> //http://playground.arduino.cc/Code/Time (presente in gestione
// librerie, ma da installare - already present in ide library managere, but not yet installed
//--------------------addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
//
time_t t;
tmElements_t tm;
//
float temperatura = 0; // zona di memorizzazione della temperatura fornito da DS3231
float temp1 = 0; // zona di memorizzazione della temperatura in gradi celsius
int digits = 0; // zona di memorizzazione dei minuti e dei secondi da esporre
// sul display lcd
char tabmesi [37] = "genfebmaraprmaggiulugagosetottnovdic"; // tabella descrizione mesi
// above: italian month description, on three digits
int mese = 0; // zona di memorizzazione del mese corrente
int lavoro = 0; // zona di lavoro, utilizzata per calcoli intermedi
//
//********* routine di esposizione di data, ora e temperatura sul display lcd
//*************** time and temperature on lcd display **********************
//
void esponidati(void)
{
// esposizione dei dati rilevati sul timer di arduino
lcd.clear();
lcd.print(" ");
lcd.print(day());
lcd.print(' ');
//Arduino: modulo RTC DS3231 orologio digitale - digital clock
// doppio utilizzo SDA SCL, Real Time Clock, I2C, lcd 1620, orologio digitale, digital clock
mese = month(); // memorizza il mese
mese = mese - 1; // diminuisce di 1 il valore del mese poiche'
// la descrizione del primo mese (gen) inizia
// all'indirizzo zero della tabella mesi
lcd.print (tabmesi [(mese * 3)]); // espone la prima lettera del mese
lcd.print (tabmesi [(mese * 3 + 1)]); // espone la seconda lettera del mese
lcd.print (tabmesi [(mese * 3 + 2)]); // espone la terza lettera del mese
lcd.print(' ');
lcd.print(year());
lcd.setCursor(0, 1);
lcd.print(hour());
digits = (minute());
printDigits(); // routine esposizione zeri non significativi
digits = (second());
printDigits(); // routine esposizione zeri non significativi
lcd.print (" t:");
lcd.print (temp1);
}
//
//****routine visualizzazione minuti e secondi comprensivi di zeri non significativi*****
// ************* displays minutes and seconds, including non significant zeroes ***********
//
void printDigits()
{
lcd.print(':');
if (digits < 10)
lcd.print('0');
lcd.print(digits);
}
void setup(void)
{
Serial.begin (9600); // inizializza il monitor seriale
lcd.begin(16, 2); // inizializza il display e accende
lcd.backlight(); // lo sfondo
lcd.print (" buongiorno"); // goodday
delay (1500);
lcd.clear ();
setSyncProvider(RTC.get); // sincronizza il timer di Arduino con i dati presenti
// sul modulo RTC
lcd. clear ();
if (timeStatus() != timeSet) // verifica se la sincronizzazione e' ok
lcd.print(" orologio non"); // "clock not"
else
lcd.print(" orologio"); // "clock"
lcd.setCursor (0, 1);
lcd.print (" sincronizzato"); // " syncronized"
delay (1500);
temperatura = RTC.temperature(); // rileva per la prima volta
}
void loop(void)
{
if (Serial.available() == 17) // controlla se e' in arrivo una stringa da 17
// caratteri (aa,mm,gg,hh,mm,ss)
{ // acquisisce la stringa con data ed ora
int y = Serial.parseInt();
tm.Year = y2kYearToTm(y);
tm.Month = Serial.parseInt();
tm.Day = Serial.parseInt();
tm.Hour = Serial.parseInt();
tm.Minute = Serial.parseInt();
tm.Second = Serial.parseInt();
t = makeTime(tm);
RTC.set(t); // aggiorna (setta) il modulo RTC
setTime(t); // aggiorna (setta) il modulo RTC
}
// fine del ciclo di acquisizione data ed ora
digits = (second()); // verifica se sono passati 10 secondi dal precedente
// rilevamento della temperatura
lavoro = digits % 10; // calcola il resto del secondo corrente diviso 10
if (lavoro == 9) // se si e' al nono secondo di ogni decade di minuto (se si e'
// al secondo 9, 19, 29, 39, 49 o 59 di ogni minuto)
// if we are at the 9,19,29... secondo of each minutes,
temperatura = RTC.temperature(); // rileva la temperatura - catch temperature
temp1 = temperatura / 4.0; // trasforma la temperatura in gradi celsius
esponidati(); // lancia la routine di esposizione dei dati
//Arduino: modulo RTC DS3231 orologio digitale - digital clock
// doppio utilizzo SDA SCL, Real Time Clock, I2C, lcd 1620, orologio digitale, digital clock
delay (1000); // aspetta un secondo prima di andare ad esporre
// nuovi dati, al fine di consentire al display
// una visualizzazione stabile
}
a me, con l’IDE 1.8.5, compila senza alcun errore.
Guglielmo
Del secondo esempi, NON ho la libreria TSL2561 e non ha messo quale stai usando ... ma immagino che non mi darebbe alcun problema neanche quello ... :
Guglielmo
Ho il sospetto che tu abbia fatto una serie di installazioni di Arduino che hanno creato dei problemi ...
-
disinstalla TUTTO quello che hai installato e cancella eventuali directory temporanee
-
scarica la versione di Arduino 1.8.5 in formato .zip ... NON usare la versione .exe che si installa da sola.
-
scompatta lo .zip in una cartella dove puoi leggere/scrivere ... es, la tua home
-
per sicurezza, nella cartella di Arduino, crea una cartella di nome "portable". In questo modo avari creato una versione "isolata" dal tutto il resto (sandboxed) dove tutte le librerie ed i "core" saranno contenuti in detta cartella e non verranno creati files all'esterno.
-
lancia questa versione dell'IDE, installa le librerie dal "Library Manager" (... così sei sicuro che sono all'ultima versione) e riprova.
Guglielmo
grazie provero' e vi faro' sapere
Ho provato il primo sketch ed e’ venuto fuori:Define SR1W_Write_high(reg,mask);atomic block (atomic_Restorate)(*reg|=mask).Ripeto ancora che alcuni giorni or sono giravano benissimo.
Hai fatto quanto al mio post #7 ? ? ?
Guglielmo
non ancora
Ok tutto risolto.Grazie per il vostro aiuto