<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arduino Archives - Esperimenti con logiche programmabili</title>
	<atom:link href="https://logicaprogrammabile.it/tag/arduino/feed/" rel="self" type="application/rss+xml" />
	<link>https://logicaprogrammabile.it/tag/arduino/</link>
	<description>Tutorial in italiano per imparare a programmare usando Arduino, Raspberry PI, Netduino</description>
	<lastBuildDate>Fri, 26 Aug 2022 13:29:39 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>

<image>
	<url>https://logicaprogrammabile.it/wp-content/uploads/2017/11/cropped-logicaprogrammabile-logo-02-32x32.png</url>
	<title>Arduino Archives - Esperimenti con logiche programmabili</title>
	<link>https://logicaprogrammabile.it/tag/arduino/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Datalogger con Raspberry SQLite e Arduino</title>
		<link>https://logicaprogrammabile.it/datalogger-remoto-raspberry-sqlite-arduino/</link>
					<comments>https://logicaprogrammabile.it/datalogger-remoto-raspberry-sqlite-arduino/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Sun, 28 Aug 2022 06:00:30 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Tutorial Raspberry PI]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[DataLogger]]></category>
		<category><![CDATA[dht11]]></category>
		<category><![CDATA[Ethernet Shield]]></category>
		<category><![CDATA[raspberry]]></category>
		<category><![CDATA[Sqlite]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6691</guid>

					<description><![CDATA[<p>Costruire un datalogger remoto con Raspberry e Arduino Codice Python sul Raspberry SQLite Codice sull&#8217;Arduino MKR Zero Il progetto che ho realizzato riguarda il monitoraggio di temperatura e umidità all&#8217;interno di un locale tecnico. I dati rilevati da un sensore DHT22 vengono acquisti da una...</p>
<p>The post <a href="https://logicaprogrammabile.it/datalogger-remoto-raspberry-sqlite-arduino/">Datalogger con Raspberry SQLite e Arduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Costruire un datalogger remoto con Raspberry e Arduino</h1>
<ul>
<li><a href="#Raspberry_Sqlite">Codice Python sul Raspberry SQLite</a></li>
<li><a href="#Arduino_MKR_Zero">Codice sull&#8217;Arduino MKR Zero</a></li>
</ul>
<p>Il progetto che ho realizzato riguarda il monitoraggio di temperatura e umidità all&#8217;interno di un locale tecnico. I dati rilevati da un <a href="https://amzn.to/3q5qLpr" target="_blank" rel="noopener">sensore DHT22</a> vengono acquisti da una <a href="https://amzn.to/3cpgcu0" target="_blank" rel="noopener">Arduino MKR Zero</a> e tramite una <a href="https://amzn.to/3ArbPGB" target="_blank" rel="noopener">shield MKR ETH</a> inviati a un computer <a href="https://amzn.to/3R8XhSU" target="_blank" rel="noopener">Raspberry PI 4</a> che dopo averli acquisiti li memorizza all&#8217;interno di una tabella <a href="https://sqlite.org/index.html" target="_blank" rel="noopener">SQLite</a>.</p>
<p>Il protocollo utilizzato per l&#8217;invio dei dati si basa su UDP come abbiamo <a href="https://logicaprogrammabile.it/comunicazione-python-udp-computer-raspberry/" target="_blank" rel="noopener">visto in questo articolo</a>.</p>
<p><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-6740" src="https://logicaprogrammabile.it/wp-content/uploads/2022/08/Ardu_Raspi.png" alt="Arduino Raspberry sqlite" width="458" height="451" srcset="https://logicaprogrammabile.it/wp-content/uploads/2022/08/Ardu_Raspi.png 458w, https://logicaprogrammabile.it/wp-content/uploads/2022/08/Ardu_Raspi-300x295.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2022/08/Ardu_Raspi-150x148.png 150w, https://logicaprogrammabile.it/wp-content/uploads/2022/08/Ardu_Raspi-80x80.png 80w" sizes="(max-width: 458px) 100vw, 458px" /></p>
<p>I dati sarebbero potuti essere memorizzati in un semplice file di testo ma ho preferito usare un database in modo tale da estrarli in modo rapido utilizzando semplici query. Il database contiene per ora una tabella contenente i seguenti campi:</p>
<table align="center">
<tbody>
<tr>
<th>Nome Campo</th>
<th>Tipo Campo</th>
</tr>
<tr>
<td>ID</td>
<td>
<div>
<div>INTEGER PRIMARY KEY AUTOINCREMENT</div>
</div>
</td>
</tr>
<tr>
<td>Data</td>
<td>
<div>
<div>TIMESTAMP DEFAULT CURRENT_TIMESTAMP</div>
</div>
</td>
</tr>
<tr>
<td>
<div>
<div>Temperatura</div>
</div>
</td>
<td>
<div>
<div>VARCHAR(50) NOT NULL</div>
</div>
</td>
</tr>
<tr>
<td>
<div>
<div>Umidita</div>
</div>
</td>
<td>
<div>
<div>VARCHAR(50) NOT NULL</div>
</div>
</td>
</tr>
</tbody>
</table>
<p id="Raspberry_Sqlite">Il codice seguente gira sul Raspberry Pi 4; ho inserito diversi commenti che spiegano le varie istruzioni contenute nel programma:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import sqlite3
import socket
import threading
import time

#IP computer locale
UDP_IP_ADDR = "192.168.178.50"
#Porta computer locale
UDP_PORT_NUMBER = 20002

ip_port_Data = (UDP_IP_ADDR, UDP_PORT_NUMBER)
   
def client_Receive_Data():
    print("Avvio THREAD Receive Data...")
    serversocket1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    serversocket1.bind(("192.168.178.30", 20001))
    msgToSend = str.encode("DB_OK")
    
    #crea connessione al database
    connection = sqlite3.connect('lopro.db')
    cursor = connection.cursor()
        
    try:            
        while True:            
            data, address = serversocket1.recvfrom(1024)
            strData = bytes.decode(data).split(":")
         
            sql = """ INSERT INTO tbl_log(Temperatura, Umidita) VALUES ('{}', '{}');""".format(strData[0], strData[1])
            
            print(sql)
            
            cursor.execute(sql)
            connection.commit()

            #invia al device una risposta
            serversocket1.sendto(msgToSend, ip_port_Data)
            time.sleep(1)
    except:
        print("errore")
        msgToSend = str.encode("ERRORE")
        serversocket1.sendto(msgToSend, ip_port_Data)
        connection.close()

def crea_tabella():
    #una volta creata la tabella possiamo evitare di chiamare
    #questa funzione ad ogni esecuzione del programma
    #crea connessione al database
    connection = sqlite3.connect('lopro.db')
    cursor = connection.cursor()
 
    #Se esiste la tabella cancellala
    #cursor.execute("DROP TABLE IF EXISTS tbl_log")
 
    # Crea la tabella se non esiste
    table = """ CREATE TABLE IF NOT EXISTS tbl_log (
            ID INTEGER PRIMARY KEY AUTOINCREMENT,
            Data TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
            Temperatura VARCHAR(50) NOT NULL,
            Umidita VARCHAR(50) NOT NULL      
        ); """
 
    cursor.execute(table)
    cursor.close()
    connection.close()

 
def list_rows():
    print("list rows..")
    #crea connessione al database
    connection = sqlite3.connect('lopro.db')

    sql = """ SELECT * FROM tbl_log;"""

    cursor = connection.cursor()
    cursor.execute(sql)
    rows = cursor.fetchall()

    for row in rows:
        print(row)

    # Close the connection
    connection.close()

if __name__=="__main__":
    #Rimuovere il commento per creare la tabella
    #crea_tabella()
    #list_rows()
    #Avvio un thred
    print("Start program")
    t1 = threading.Thread(target=client_Receive_Data)
    t1.start()</pre>
<p id="Arduino_MKR_Zero">Questo è invece il codice che gira sulla Arduino MKR Zero; ho inserito diversi commenti che spiegano le varie istruzioni contenute nel programma:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="cpp">#include &lt;SPI.h&gt;
#include &lt;Ethernet.h&gt;
#include &lt;EthernetUdp.h&gt;
#include &lt;DHT.h&gt;

#define DHTPIN 6
#define DHTTYPE DHT22

// creo un MAC address e un IP address per la scheda Arduino
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 178, 50);

//creo un ip address per il raspberry
IPAddress ip_remote(192, 168, 178, 30);
//creo una porta per la scheda Arduino
unsigned int localPort = 20002; 

//creo degli array di char per la ricezione e l'invio dei
//dati via udp
char packetBuffer[UDP_TX_PACKET_MAX_SIZE];
char chrBuffer[11];

//altre variabili 
String strTempUmid = "";
byte ciclo = 0;

// Creo degli oggetti per l'utilizzo di udp e del 
//sensore dht
EthernetUDP Udp;
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  //inizializzo lo shield mkr eth
  Ethernet.init(5);

  //inizializzo la scheda di rete
  Ethernet.begin(mac, ip);

  //inizializzo la seriale
  Serial.begin(9600);
  
  // verifico la ethernet shield
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    Serial.println("MKR ETH non presente o configurata in modo errato!");
    while (true) {
      delay(1);
    }
  }

  //inizializzo l'oggetto udp
  Udp.begin(localPort);
  //inizializzo l'oggetto dht
  dht.begin();
}

void loop() {

  //verifico presenza pacchetti udp in arrivo
  int packetSize = Udp.parsePacket();
  
  //se coi sono pacchetti
  if (packetSize) {
    //Serial.println(packetSize);
    //leggo i pacchetti e gli inserisco nell'array di char
    Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
    //printo i dati ricevuti
    Serial.println(packetBuffer);
  }

  //leggo umidità e temperatura dal sensore dht
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  //creo una stringa del tipo temp:umid
  strTempUmid = "";
  strTempUmid.concat(t);
  strTempUmid.concat(":");
  strTempUmid.concat(h);
  //printo la stringa sul ser mon
  Serial.println(strTempUmid);
  //converto la stringa in un array di char
  strTempUmid.toCharArray(chrBuffer, strTempUmid.length());

  //inizializzo la connessione con ip e porta del Raspberry
  Udp.beginPacket(ip_remote, 20001);
  //Scrivo i dati nel buffer
  Udp.write(chrBuffer);
  //invio i dati
  Udp.endPacket();

  //attendo un minuto prima del prossimo invio
  for (ciclo = 0; ciclo &lt; 60; ciclo++)
    delay(1000);

}</pre>
<p>Ogni minuto viene inviata una unica stringa contenente i dati di temperatura e umidita che il codice python provvederà a separate in due dati distinti per essere caricati sul database.</p>
<h2>Memorizzare solo le variazioni significative su Raspberry SQLite</h2>
<p>Possiamo ottimizzare lo spazio sulla tabella (e di conseguenza sul filesystem del Raspberry) memorizzando solo i dati che hanno una variazione significativa. In questo modo il monitoraggio rimane costante perché comunque l&#8217;Arduino legge e invia i dati ogni minuto ma posso risparmiare spazio sul database salvando solo le variazioni significative. Sulla tabella memorizzo anche il timestamp e quindi posso ricostruire l&#8217;andamento di temperatura e umidità interpolando i dati.</p>
<p>Il codice seguente mostra la modifica alla funzione client_Receive_Data() in modo tale da memorizzare solo i dati che hanno una variazione di 0.5 rispetto ai dati della lettura precedente rilevata dalla scheda Arduino:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">def client_Receive_Data():
    print("Avvio THREAD Receive Data...")
    serversocket1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    serversocket1.bind(("192.168.178.30", 20001))
        
    # crea connessione al database
    connection = sqlite3.connect('lopro.db')
    cursor = connection.cursor()
    #creo due variabili per memorizzare i dati delle 
    #letture di temp e umid
    temp_prec = 0
    umid_prec = 0
    
    try:
        while True:
            data, address = serversocket1.recvfrom(1024)
            strData = bytes.decode(data).split(":")

            #verifico se i dati appena letti differiscono di 0.5 dai valori della lettuare precedente
            if (abs(temp_prec - float(strData[0])) &gt; 0.5) or (abs(umid_prec - float(strData[1])) &gt; 0.5) :
                print("Variazione di Temp e Hum")  
                sql = """ INSERT INTO tbl_log(Temperatura, Umidita) VALUES ('{}', '{}');""".format(strData[0], strData[1])

                #memorizzo i dati per poterli confrontare con quelli
                #che arrivano dalla scheda arduino
                temp_prec = float(strData[0])
                umid_prec = float(strData[1])
                #visualizzo la stringa sql
                print(sql)
                #eseguo la stringa sql insert avviando una transazione
                cursor.execute(sql)
                #confermo la transazione
                connection.commit()
                
                # invia al device una risposta
                msgToSend = str.encode("DB_OK")
                serversocket1.sendto(msgToSend, ip_port_Data)
            else:
                print("Nessuna variazione di Temp e Hum")  
                # invia al device una risposta
                msgToSend = str.encode("DB_NOK")
                serversocket1.sendto(msgToSend, ip_port_Data)
            
            time.sleep(1)
    except:
        print("errore")
        msgToSend = str.encode("ERRORE")
        serversocket1.sendto(msgToSend, ip_port_Data)
        connection.close()</pre>
<p>L&#8217;utilizzo congiunto di Raspberry e Arduino ci permette di realizzare progetti che superano i limiti dati dalle singole schede.</p>
<p>&nbsp;</p>
<p>The post <a href="https://logicaprogrammabile.it/datalogger-remoto-raspberry-sqlite-arduino/">Datalogger con Raspberry SQLite e Arduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/datalogger-remoto-raspberry-sqlite-arduino/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Il miglior modo per iniziare a programmare Arduino</title>
		<link>https://logicaprogrammabile.it/arduino-sensor-kit-miglior-modo-programmare-arduino/</link>
					<comments>https://logicaprogrammabile.it/arduino-sensor-kit-miglior-modo-programmare-arduino/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Fri, 11 Jun 2021 17:45:41 +0000</pubDate>
				<category><![CDATA[CorsoArduino]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[grove]]></category>
		<category><![CDATA[kit]]></category>
		<category><![CDATA[sensori]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6639</guid>

					<description><![CDATA[<p>Arduino Sensor Kit per imparare a programmare Arduino Se hai intenzione di imparare a programmare Arduino e non hai tante nozioni di elettronica puoi acquistare l&#8217;Arduino Sensor Kit. Questo kit permette i dedicarsi totalmente alla stesura del codice senza preoccuparsi di conoscere il modo corretto...</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-sensor-kit-miglior-modo-programmare-arduino/">Il miglior modo per iniziare a programmare Arduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Arduino Sensor Kit per imparare a programmare Arduino</h1>
<p>Se hai intenzione di imparare a programmare <strong>Arduino</strong> e non hai tante nozioni di elettronica puoi acquistare l&#8217;<strong>Arduino Sensor Kit</strong>.</p>
<p>Questo kit permette i dedicarsi totalmente alla stesura del codice senza preoccuparsi di conoscere il modo corretto per collegare i componenti e i sensori alla Arduino UNO.</p>
<p>Un vantaggio enorme che permette di abbassare la curva di apprendimento.</p>
<p>Molte persone hanno il <strong>desiderio di programmare</strong> una scheda Arduino, ma dopo aver comprato l&#8217;hardware necessario, iniziano ben presto a trovare difficoltà nella realizzazione dei collegamenti, per poi finire di abbandonare tutto nel cassetto della propria scrivania.</p>
<p><span id="more-6639"></span></p>
<p><img decoding="async" class="aligncenter size-full wp-image-6648" src="https://logicaprogrammabile.it/wp-content/uploads/2021/06/seeed-bundle_00.default.jpg" alt="Seed Studio Arduino Sensor Kit" width="520" height="330" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/06/seeed-bundle_00.default.jpg 520w, https://logicaprogrammabile.it/wp-content/uploads/2021/06/seeed-bundle_00.default-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/06/seeed-bundle_00.default-150x95.jpg 150w" sizes="(max-width: 520px) 100vw, 520px" /></p>
<p>Con l&#8217;<strong>Arduino Sensor Kit</strong> invece, devi dedicarti solamente ad acquisire esperienza nella programmazione e questo permette di avere delle piccole soddisfazioni che non fanno spegnere la voglia di imparare a utilizzare una scheda Arduino.</p>
<p>Il kit sviluppato in collaborazione con <a href="https://www.seeedstudio.com/">Seed Studio</a> viene venduto in <a href="https://store.arduino.cc/sensor-kit-base">versione base al costo di circa 28€</a> e in <a href="https://store.arduino.cc/sensor-kit-bundle">versione bundle con una  scheda Arduino UNO</a> per una spesa di poco inferiore ai 50€. </p>
<p>La Sensor Kit è compatibile con i sistema <a href="https://www.seeedstudio.com/category/Grove-c-1003.html?cat=890">Grove</a> ideato da Seed Studio, rendendola quindi espandibile con centinaia di moduli pre-assemblati pronti all&#8217;uso dandoti così la possibilità di provare ad utilizzare nuovi sensori o attuatori.</p>
<p>Per semplificare ulteriormente l&#8217;uso è stata sviluppata una libreria che con poche righe di codice puoi scrivere subito i primi programmi e se ancora non bastasse puoi trovare tutte le risorse sul sito <a href="https://sensorkit.arduino.cc/">dedicato (Sensor Kit arduino.cc)</a> con tutti gli esempi di codice da utilizzare immediatamente!</p>
<p>Buon divertimento e buon codice!!</p>
<p>&nbsp;</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-sensor-kit-miglior-modo-programmare-arduino/">Il miglior modo per iniziare a programmare Arduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/arduino-sensor-kit-miglior-modo-programmare-arduino/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Installare Arduino sul Raspberry PI</title>
		<link>https://logicaprogrammabile.it/installare-arduino-sul-raspberry-pi/</link>
					<comments>https://logicaprogrammabile.it/installare-arduino-sul-raspberry-pi/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 11 Feb 2019 07:00:38 +0000</pubDate>
				<category><![CDATA[Tutorial Raspberry PI]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Installazione]]></category>
		<category><![CDATA[raspberry]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=5953</guid>

					<description><![CDATA[<p>Come programmare schede Arduino usando un Raspberry PI E&#8217; da diverso tempo che uso un Raspberry Pi come computer per navigare su internet e per imparare a programmare in Python. Con poche decine di euro è possibile creare il proprio desktop replacement. Anche se le...</p>
<p>The post <a href="https://logicaprogrammabile.it/installare-arduino-sul-raspberry-pi/">Installare Arduino sul Raspberry PI</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Come programmare schede Arduino usando un Raspberry PI</h1>
<p>E&#8217; da diverso tempo che uso un <strong>Raspberry Pi</strong> come computer per navigare su internet e per imparare a programmare in <a href="https://www.python.org/"><strong>Python</strong></a>. Con poche decine di euro è possibile creare il proprio desktop replacement.</p>
<p>Anche se le prestazioni non sono entusiasmanti possiamo utilizzare questa scheda come piccolo laboratorio di sviluppo. Nonostante la presenza di diverse linee gpio potremmo avere comunque l&#8217;esigenza di continuare ad utilizzare le schede <strong>Arduino</strong>, quindi perchè non utilizzare il <strong>Raspberry Pi</strong> per programmarle?</p>
<p><span id="more-5953"></span></p>
<h3>Installare l&#8217;Arduino IDE</h3>
<p>La prima cosa da effettuare è quella di scaricare dal sito ufficiale <a href="http://www.arduino.cc/">Arduino</a> il software dell&#8217;ide per piattaforma linux arm. Una volta ottenuto il pacchetto in formato compresso dobbiamo scompattarlo eseguendo il commando seguente</p>
<pre>tar Jxvf arduino-1.8.8-linuxarm.tar.xz</pre>
<p>Verrà creata automaticamente la cartella <strong>arduino-1.8.8</strong> nella stessa directory dove abbiamo salvato il file <strong>arduino-1.8.8-linuxarm.tar.xz</strong></p>
<p>[the_ad id=&#8221;6199&#8243;]</p>
<p>Ora dentro la cartella <strong>arduino-1.8.8</strong> ci sarà il file di installazione install.sh. per eseguirlo dovremmo digitare quanto segue:</p>
<pre>./arduino-linux-setup.sh pi</pre>
<p>Attendiamo qualche istante finché il pacchetto software non viene installato correttamente sul nostro Raspberry Pi.</p>
<p>Ultimata l&#8217;installazione viene richiesto il riavvio del sistema operativo.</p>
<p><img decoding="async" class="aligncenter size-full wp-image-6040" src="https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoInstalling.png" alt="Installazione di arduino su raspberrry pi" width="787" height="676" srcset="https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoInstalling.png 787w, https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoInstalling-300x258.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoInstalling-768x660.png 768w, https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoInstalling-585x502.png 585w" sizes="(max-width: 787px) 100vw, 787px" /></p>
<p>Durante l&#8217;installazione viene creata una voce di menu come potete osservare dalla figura seguente.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6041" src="https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoMenu.png" alt="Menu arduino su raspberry pi" width="552" height="742" srcset="https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoMenu.png 552w, https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoMenu-223x300.png 223w, https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoMenu-110x147.png 110w" sizes="auto, (max-width: 552px) 100vw, 552px" /></p>
<h3>Collaudo</h3>
<p>Ora che tutto è stato installato possiamo esegure subito una prova per  verificare se le nostre schede Arduino possano essere programmata attraverso il Raspberry pi.</p>
<p>Colleghiamo alla porta usb del Raspberry Pi una <strong>Arduino UNO</strong>. Avviamo ora l&#8217;Arduino IDE.<br />
Se tutto funziona correttamente nella voce di menu Strumenti-&gt;Porta dovremmo osservare la presenza della scheda Arduino UNO e della relativa porta di comunicazione, come nella figura seguente:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6042" src="https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoPort.png" alt="Arduino porta di comunicazione" width="619" height="602" srcset="https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoPort.png 619w, https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoPort-300x292.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoPort-585x569.png 585w" sizes="auto, (max-width: 619px) 100vw, 619px" /></p>
<p>Dal menu <strong>file-&gt;esempi-&gt;01 Basics</strong> carichiamo il classico sckecth <strong>Blink</strong>, ora dal menu <strong>Sketch</strong> clicchiamo sulla voce <strong>Carica</strong>. Se tutto è andato a buon fine lo sketch verrà caricato correttamente sulla scheda <strong>UNO</strong>.</p>
<p>The post <a href="https://logicaprogrammabile.it/installare-arduino-sul-raspberry-pi/">Installare Arduino sul Raspberry PI</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/installare-arduino-sul-raspberry-pi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Come programmare l&#8217;Arduino Mini 05</title>
		<link>https://logicaprogrammabile.it/programmare-arduino-mini/</link>
					<comments>https://logicaprogrammabile.it/programmare-arduino-mini/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Wed, 09 Jan 2013 11:00:53 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Mini]]></category>
		<category><![CDATA[USB serial]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=3223</guid>

					<description><![CDATA[<p>Utilizzare un convertitore Usb Seriale per programmare l&#8217;Arduino Mini La famiglia di schede Arduino è composta da vari formati. A seconda del tipo di progetto che stiamo realizzando potremo scegliere un dispositivo che ci permetta di ottimizzare gli spazi. Una scheda che reputo molto utile...</p>
<p>The post <a href="https://logicaprogrammabile.it/programmare-arduino-mini/">Come programmare l&#8217;Arduino Mini 05</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Utilizzare un convertitore Usb Seriale per programmare l&#8217;Arduino Mini</h3>
<p>La famiglia di schede Arduino è composta da vari formati. A seconda del tipo di progetto che stiamo realizzando potremo scegliere un dispositivo che ci permetta di ottimizzare gli spazi. Una scheda che reputo molto utile è l&#8217;<strong>Arduino Mini</strong>, giunto alla quinta revisione, poiché le sue dimensioni sono davvero contenute (3 cm x 1.8 cm) ed il suo costo è attualmente di 15€ (sullo <a href="http://store.arduino.cc/it/index.php?main_page=product_info&amp;cPath=11&amp;products_id=218" target="_blank">store ufficiale</a>).</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3225" alt="Arduino Mini 05" src="https://logicaprogrammabile.it/wp-content/uploads/2013/01/Arduino_MINI_05.jpg" width="450" height="269" srcset="https://logicaprogrammabile.it/wp-content/uploads/2013/01/Arduino_MINI_05.jpg 450w, https://logicaprogrammabile.it/wp-content/uploads/2013/01/Arduino_MINI_05-300x179.jpg 300w" sizes="auto, (max-width: 450px) 100vw, 450px" /></p>
<p><span id="more-3223"></span></p>
<p>Essendo cosi compatto per poterlo programmare abbiamo bisogno di un convertitore usb seriale esterno, infatti non è disponibile sulla scheda un convertitore integrato.<br />
Per questo tutorial ho utilizzato il convertitore ufficiale <a href="http://arduino.cc/en/Main/USBSerial" target="_blank">Arduino USB2Serial Light</a> ed un convertitore <a href="http://www.dfrobot.com/index.php?route=product/product&amp;product_id=147" target="_blank">DFrobot</a> basato sul chip FTDI FT232RL.</p>
<p>Questo lo schema usando l&#8217;USB2Serial:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3237" alt="Arduino Mini USB serial" src="https://logicaprogrammabile.it/wp-content/uploads/2013/01/ArduinoMiniUsbSerial.png" width="622" height="334" srcset="https://logicaprogrammabile.it/wp-content/uploads/2013/01/ArduinoMiniUsbSerial.png 622w, https://logicaprogrammabile.it/wp-content/uploads/2013/01/ArduinoMiniUsbSerial-300x161.png 300w" sizes="auto, (max-width: 622px) 100vw, 622px" /></p>
<h3></h3>
<p>Il circuito è molto banale ma bisogna assicurarsi di inserire il condensatore C da 100nF per poter resettare il Mini e caricare il nuovo sketch.<br />
Da notare anche che il<span style="text-decoration: underline;"> TX del convertitore</span> è collegato all&#8217;RX del Mini mentre l&#8217;<span style="text-decoration: underline;">RX del convertitore</span> è collegato all&#8217;TX del Mini.</p>
<p>Lo schema elettrico utilizzando il convertitore della DFrobot è identico, tranne che nella serigrafia del convertitore non è presente la dicitura reset ma DTR:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3240" alt="FTDI FT232 RL converter USB to Serial" src="https://logicaprogrammabile.it/wp-content/uploads/2013/01/ArduinoMiniUsbSerial2.png" width="622" height="334" srcset="https://logicaprogrammabile.it/wp-content/uploads/2013/01/ArduinoMiniUsbSerial2.png 622w, https://logicaprogrammabile.it/wp-content/uploads/2013/01/ArduinoMiniUsbSerial2-300x161.png 300w" sizes="auto, (max-width: 622px) 100vw, 622px" />La compilazione dello sketch e del caricamento sul Mini è identica ad un Arduino UNO, bisogna selezionare dall&#8217;IDE la board corretta (Arduino MINI /w ATmega328) e la porta COM dove è collegato il convertitore.</p>
<p>The post <a href="https://logicaprogrammabile.it/programmare-arduino-mini/">Come programmare l&#8217;Arduino Mini 05</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/programmare-arduino-mini/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino Leonardo speed test</title>
		<link>https://logicaprogrammabile.it/arduino-leonardo-speed-test/</link>
					<comments>https://logicaprogrammabile.it/arduino-leonardo-speed-test/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Wed, 30 May 2012 15:20:48 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Leonardo]]></category>
		<category><![CDATA[Speed Test]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=2810</guid>

					<description><![CDATA[<p>Test di commutazione su pin digitale Ho acquistato di recente la nuova scheda Arduino Leonardo basata sul chip Atmel Mega32U4. Questo microcontrollore possiede un modulo usb integrato che sostituisce il modulo di conversione usb-ttl presente nella Arduino UNO, rendendo la scheda molto &#8216;snella&#8217; visto l&#8217;esiguo...</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-leonardo-speed-test/">Arduino Leonardo speed test</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Test di commutazione su pin digitale</h3>
<p>Ho acquistato di recente la nuova scheda <strong>Arduino Leonardo</strong> basata sul chip <strong>Atmel Mega32U4</strong>. Questo microcontrollore possiede un modulo usb integrato che sostituisce il modulo di conversione usb-ttl presente nella <strong>Arduino UNO</strong>, rendendo la scheda molto &#8216;snella&#8217; visto l&#8217;esiguo numero di componenti che ospita.</p>
<p>La prima prova che voglio effettuare è il classico speed test che ho realizzato anche per le altre schede. Questa verifica consiste nel commutare un pin digitale in modo ripetitivo, utilizzando solamente le istruzioni che permettono di porre il pin digitale a livello alto e a livello basso e, avvalendomi di un oscilloscopio ,misurare la frequenza di commutazione.</p>
<p>Lo sketch caricato sulla <strong>Leonardo</strong> è il seguente:</p>
<p><span id="more-2810"></span></p>
<pre class="lang:arduino decode:true  ">void setup()
{
  //pin0 in uscita
  pinMode(0, OUTPUT);
}

void loop()
{
  //ciclo infinito
  while(true)
  {
    //metto il pin0 alto
    digitalWrite(0, HIGH);
    //metto il pin0 basso
    digitalWrite(0, LOW);
  }
}</pre>
<p>&nbsp;</p>
<p>mentre lo schema elettrico del test è il seguente</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2012/05/Leonardo.gif"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2815" title="Leonardo" src="https://logicaprogrammabile.it/wp-content/uploads/2012/05/Leonardo.gif" alt="" width="437" height="229" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/05/Leonardo.gif 437w, https://logicaprogrammabile.it/wp-content/uploads/2012/05/Leonardo-300x157.gif 300w" sizes="auto, (max-width: 437px) 100vw, 437px" /></a></p>
<p>la frequenza misurata risulta pari a <strong>106 Khz</strong> leggermente inferiore a quella ottenuta con la Arduino UNO(125Khz). Ho realizzato una semplice tabella riepilogativa con le varie frequenze delle diverse schede che ho sottoposto al test.</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><strong>Tipo Scheda</strong></td>
<td style="text-align: center;"><strong>Frequenza di commutazione</strong></td>
</tr>
<tr>
<td style="text-align: left;">Arduino UNO</td>
<td style="text-align: left;"> 125  Khz</td>
</tr>
<tr>
<td style="text-align: left;">Arduino LEONARDO</td>
<td style="text-align: left;"> 106  Khz</td>
</tr>
<tr>
<td style="text-align: left;">Netduino standard</td>
<td style="text-align: left;"> 8.4   Khz</td>
</tr>
<tr>
<td style="text-align: left;">Fez Panda II</td>
<td style="text-align: left;"> 12.7 Khz</td>
</tr>
</tbody>
</table>
<p>The post <a href="https://logicaprogrammabile.it/arduino-leonardo-speed-test/">Arduino Leonardo speed test</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/arduino-leonardo-speed-test/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino day 2012 una giornata con Arduino</title>
		<link>https://logicaprogrammabile.it/arduino-day-giornata-arduino/</link>
					<comments>https://logicaprogrammabile.it/arduino-day-giornata-arduino/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Fri, 13 Apr 2012 21:07:02 +0000</pubDate>
				<category><![CDATA[Notizie]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Conferenze]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=2719</guid>

					<description><![CDATA[<p>Arduino day 2012 a Roma DiScienza sta organizzando a Roma per il 20 Aprile l&#8217;edizione 2012 dell&#8217;Arduino Day, una giornata dedicata alla community Arduino. L&#8217;evento darà spazio alle presentazioni delle ultime novità riguardanti Arduino ed ospiterà, grazie ad un capiente open spaces, i migliori progetti...</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-day-giornata-arduino/">Arduino day 2012 una giornata con Arduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Arduino day 2012 a Roma</h3>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2012/04/pin-blue.png"><img loading="lazy" decoding="async" class="alignleft wp-image-4823 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2012/04/pin-blue.png" alt="Arduino Day" width="38" height="53" /></a> <a href="https://logicaprogrammabile.it/wp-content/uploads/2012/04/pin-orange.png"><img loading="lazy" decoding="async" class="alignleft wp-image-4824 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2012/04/pin-orange.png" alt="Arduino Day" width="38" height="53" /></a></p>
<p><a href="http://www.discienza.org" target="_blank">DiScienza </a>sta organizzando a Roma per il 20 Aprile l&#8217;edizione 2012 dell&#8217;<a href="https://day.arduino.cc/" target="_blank"><strong>Arduino Day</strong></a>, una giornata dedicata alla community Arduino. L&#8217;evento darà spazio alle presentazioni delle ultime novità riguardanti Arduino ed ospiterà, grazie ad un capiente open spaces, i migliori progetti di professionisti e appassionati.</p>
<p>La giornata sarà caratterizzata da una serie di Mini conferenze di circa 15 minuti nelle quali verranno presentati progetti basati su Arduino.</p>
<p>Ulteriori informazioni e il modulo di registrazione per partecipare all&#8217;evento disponibili su <a href="http://www.discienza.org/arduinoday" target="_blank"><strong>http://www.discienza.org/arduinoday</strong></a></p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-day-giornata-arduino/">Arduino day 2012 una giornata con Arduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/arduino-day-giornata-arduino/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Promemoria alternativo con Arduino e RTC</title>
		<link>https://logicaprogrammabile.it/promemoria-arduino-rtc/</link>
					<comments>https://logicaprogrammabile.it/promemoria-arduino-rtc/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Tue, 03 Apr 2012 08:48:33 +0000</pubDate>
				<category><![CDATA[Elettronica]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Gadget]]></category>
		<category><![CDATA[Promemoria]]></category>
		<category><![CDATA[RTC]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=2650</guid>

					<description><![CDATA[<p>Come realizzare un simpatico gadget per ricordarci delle date importanti Se anche tu hai difficoltà a ricordare le date degli appuntamenti e sei un tipo creativo e non ti accontenti dei classici promemoria via cellulare, tablet o computer, ma vuoi realizzare qualcosa di insolito, puoi...</p>
<p>The post <a href="https://logicaprogrammabile.it/promemoria-arduino-rtc/">Promemoria alternativo con Arduino e RTC</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Come realizzare un simpatico gadget per ricordarci delle date importanti</h3>
<p>Se anche tu hai difficoltà a ricordare le date degli appuntamenti e sei un tipo creativo e non ti accontenti dei classici promemoria via cellulare, tablet o computer, ma vuoi realizzare qualcosa di insolito, puoi sfruttare la tua passione per l&#8217;elettronica e la tua voglia di costruire per realizzare questo progetto di promemoria con Arduino.</p>
<p>Avendo già le basi per poter<a title="Usare il modulo RTC DS1307 con Arduino" href="https://logicaprogrammabile.it/usare-modulo-rtc-ds1307-arduino/"> lavorare con l&#8217;integrato RTC DS1307</a> puoi sfruttare la ram non volatile di questo chip per memorizzare circa 18 date e permettere, ad Arduino, di avvisarti tramite display, led rgb, twitter o quello che ti viene in mente!!</p>
<p>L&#8217;idea è quella di utilizzare l&#8217;RTC per memorizzare il dato di tempo e sfruttare i 56 byte di flash ram aggiuntive per memorizzare le date degli avvenimenti. Arduino ha il compito di comparare le date e di agire di conseguenza pilotando le uscite digitali.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2681" title="PromemDate" src="https://logicaprogrammabile.it/wp-content/uploads/2012/04/PromemDate.gif" alt="" width="617" height="245" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/04/PromemDate.gif 617w, https://logicaprogrammabile.it/wp-content/uploads/2012/04/PromemDate-300x119.gif 300w" sizes="auto, (max-width: 617px) 100vw, 617px" /></p>
<p>Parto dal presupposto che la data e l&#8217;ora del RTC sia già stata impostata come spiegato nel precedente tutorial.<span id="more-2650"></span><br />
Per memorizzare le date degli avvenimenti possiamo usare un array di 3 byte (Giorno Mese ed Anno), il codice è il seguente:</p>
<p>[c]<br />
//inserisco la libreria per il bus I2C<br />
#include &lt;Wire.h&gt;</p>
<p>//Variabile per memorizzare l&#8217;indirizzo della ram del DS1307<br />
byte IndRam = 0x00;<br />
//array per la data (G M A)<br />
byte Data[3];</p>
<p>void setup()<br />
{<br />
  //init bus I2C<br />
  Wire.begin();<br />
  //init seriale<br />
  Serial.begin(9600);</p>
<p>  //imposto l&#8217;indirizzo iniziale della user ram<br />
  IndRam = 0x08;</p>
<p>  //avvio la comunicazione con il DS1307<br />
  //indirizzo 0x68<br />
  Wire.beginTransmission(0x68);<br />
  //specifico l&#8217;indirizzo a cui voglio accedere<br />
  Wire.write(IndRam);</p>
<p>  //imposto la data 25/04/12 in esadecimale<br />
  Data[0] = 0x19;  //giorno 25<br />
  Data[1] = 0x04;  //mese   04<br />
  Data[2] = 0x0C;  //anno   12</p>
<p>  //scrivo i 3 byte negli indirizzi 0x08 0x09 0x0A<br />
  Wire.write(Data,3);</p>
<p>  //chiudo la comunicazione<br />
  Wire.endTransmission();</p>
<p>}</p>
<p>void loop()<br />
{}</p>
<p>[/c]</p>
<p>Nel datasheet del <strong>DS1307</strong> la ram aggiuntiva inizia all&#8217;indirizzo <strong>0x08</strong> e finisce all&#8217;indirizzo <strong>0x3F</strong> e, sapendo che per memorizzare una data servono 3 byte (G M A), devi sommare alla variabile <strong>IndRam</strong> valori multipli di 3.<br />
Ad esempio per memorizzare la seconda data <strong>IndRam</strong> varrà <strong>0x08 + 3</strong> per la terza data<strong> 0x08+6</strong> e cosi via fino a <strong>0x08+51</strong>, ottenendo così 18 date memorizzabili.</p>
<table style="width: 300px;" border="0" cellspacing="3" cellpadding="3" align="center">
<tbody>
<tr>
<td>Locazione</td>
<td>Valore variabile IndRam</td>
</tr>
<tr>
<td>1</td>
<td>0x08 (8)</td>
</tr>
<tr>
<td>2</td>
<td>0x0B (11)</td>
</tr>
<tr>
<td>3</td>
<td>0x0E (14)</td>
</tr>
<tr>
<td>4</td>
<td>0x11 (17)</td>
</tr>
<tr>
<td>5</td>
<td>0x14 (20)</td>
</tr>
<tr>
<td>6</td>
<td>0x17 (23)</td>
</tr>
<tr>
<td>7</td>
<td>0x1A (26)</td>
</tr>
<tr>
<td>8</td>
<td>0x1D (29)</td>
</tr>
<tr>
<td>9</td>
<td>0x20 (32)</td>
</tr>
<tr>
<td>10</td>
<td>0x23 (35)</td>
</tr>
<tr>
<td>11</td>
<td>0x26 (38)</td>
</tr>
<tr>
<td>12</td>
<td>0x29 (41)</td>
</tr>
<tr>
<td>13</td>
<td>0x2C (44)</td>
</tr>
<tr>
<td>14</td>
<td>0x2F (47)</td>
</tr>
<tr>
<td>15</td>
<td>0x32 (50)</td>
</tr>
<tr>
<td>16</td>
<td>0x35 (53)</td>
</tr>
<tr>
<td>17</td>
<td>0x38 (56)</td>
</tr>
<tr>
<td>18</td>
<td>0x3B (59)</td>
</tr>
</tbody>
</table>
<p>Una volta memorizzate le date che ci interessano, è necessario scrivere del codice che confronti questi valori con quelli dell&#8217;RTC e di conseguenza eseguire delle operazioni di output.</p>
<p>Per primo recupero il giorno, mese e anno dell&#8217;RTC a partire dall&#8217;indirizzo  0x04</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2689" title="RamDS1307" src="https://logicaprogrammabile.it/wp-content/uploads/2012/04/RamDS1307.gif" alt="RAM ds1307" width="263" height="269" /></p>
<p>e poi recupero i dati della user ram per eseguire il confronto quindi:</p>
<p>[c]</p>
<p>void loop()<br />
{<br />
  IndRam = 0x04;</p>
<p>  //setto l&#8217;indirizzo da ddove iniziare<br />
  //a leggere<br />
  Wire.beginTransmission(0x68);<br />
  Wire.write(IndRam);<br />
  Wire.endTransmission();</p>
<p>  //recupero 3 byte G M A<br />
  Wire.requestFrom(0x68, 3);<br />
  byte Giorno = Wire.read();<br />
  byte Mese = Wire.read();<br />
  byte Anno = Wire.read();</p>
<p>  Serial.print(Giorno, DEC);<br />
  Serial.print(&quot;/&quot;);<br />
  Serial.print(Mese,DEC);<br />
  Serial.print(&quot;/&quot;);<br />
  Serial.println(Anno, DEC);</p>
<p>  //recupero tutte le date memorizzate nella user ram<br />
  //e le confronto con quella attuale dell&#8217;RTC</p>
<p>  for( byte Ciclo = 0; Ciclo &lt; 54; Ciclo += 3)<br />
  {<br />
    IndRam = 0x08 + Ciclo;<br />
    //Serial.println(IndRam, HEX);</p>
<p>    Wire.beginTransmission(0x68);<br />
    Wire.write(IndRam);<br />
    Wire.endTransmission();</p>
<p>    Wire.requestFrom(0x68, 3);<br />
    byte memGiorno = Wire.read();<br />
    byte memMese = Wire.read();<br />
    byte memAnno = Wire.read();</p>
<p>    //confronta i dati</p>
<p>    if(Giorno == memGiorno &amp;&amp; Mese == memMese &amp;&amp; Anno == memAnno)<br />
    {<br />
      //trovata data<br />
      //fai qualcosa<br />
      Serial.println(&quot;Data OK&quot;);<br />
    }</p>
<p>    delay(10);<br />
  }</p>
<p>  delay(1000);<br />
}<br />
[/c]</p>
<p>Il codice controlla ciclicamente se la data impostata nell&#8217;RTC è presente nella user ram in caso affermativo viene printata la stringa <strong>Data OK</strong>.<br />
Il codice ha un problema, non tiene conto dell&#8217;andamento temporale, infatti viene fatto un controllo di valori che non permette di verificare se una data è precedente o successiva a quella impostata.<br />
Il compito del codice dovrebbe essere quello di avvisarci degli avvenimenti futuri mentre dovrebbe escludere quelli passati.</p>
<p>Per poter confrontare le date tra di loro mi sono avvalso della libreria <strong>Time</strong> che tra le varie funzioni permette di restituire il numero di secondi trascorsi tra il 1 gennaio 1970 e una data definita.<br />
Ottenendo un numero progressivo posso confrontare due date e capirne l&#8217;ordine temporale.</p>
<h4>Installare e utilizzare la libreria Time</h4>
<p>Sul sito ufficiale di Arduino, seguendo <a href="http://www.arduino.cc/playground/Code/Time" target="_blank">questo link</a> possiamo scaricare la libreria. Scompattiamo il file zip nella cartella Arduino 1.0-&gt;libraries. Questa operazione produrrà tre cartelle una con nome <strong>Time</strong>, <strong>DS1307RTC</strong> e <strong>TimeAlarms</strong>. <span style="text-decoration: underline;">Riavviamo l&#8217;IDE per aggiornare le lista delle librerie e degli esempi</span>.</p>
<p>Per utilizzare la libreria nello sketch del progetto che stiamo sviluppando, possiamo inserire a mano la clausola</p>
<p>[c]#include &lt;Time.h&gt;[/c]</p>
<p>oppure dal menu dell&#8217;ide eseguiamo <strong>Sketch-&gt;Import Library-&gt;Time</strong></p>
<p>Per ottenere i secondi trascorsi dal 1 gennaio 1970 è disponibile la funzione<strong> now()</strong>, ma prima, giustamente bisogna settare la data di riferimento, per farlo si utilizza la funzione <strong>setTime(ora, minuti, secondi, giorno, mese, anno)</strong> quindi il codice precedente viene modificato così:</p>
<p>[c]<br />
#include &lt;Wire.h&gt;<br />
//includo la libreria Time<br />
#include &lt;Time.h&gt;</p>
<p>byte IndRam = 0x00;<br />
byte Data[3];</p>
<p>byte val = 0x00;</p>
<p>//queste variabili servono per memorizzare<br />
//la data in secondi trascorsi dal 1 gen 1970<br />
unsigned long UnixData = 0;<br />
unsigned long memUnixData = 0;</p>
<p>void setup()<br />
{<br />
  Wire.begin();<br />
  Serial.begin(9600);</p>
<p>  //imposto l&#8217;indirizzo iniziale della user ram<br />
  IndRam = 0x08;</p>
<p>  //carico una data da ricordare nei primi<br />
  //3 byte della user ram<br />
  Wire.beginTransmission(0x68);<br />
  Wire.write(IndRam);<br />
  Data[0] = 0x05; //giorno  05<br />
  Data[1] = 0x04; //mese    04<br />
  Data[2] = 0x0C;  //anno   12<br />
  Wire.write(Data,3);<br />
  Wire.endTransmission();</p>
<p>  delay(100);</p>
<p>  //verifico la data appena impostata<br />
  //nella user ram<br />
  Wire.beginTransmission(0x68);<br />
  Wire.write(IndRam);<br />
  Wire.endTransmission();</p>
<p>  Wire.requestFrom(0x68, 3);<br />
  byte data = Wire.read();<br />
  Serial.print(data);<br />
  Serial.print(&quot;/&quot;);<br />
  data = Wire.read();<br />
  Serial.print(data);<br />
  Serial.print(&quot;/&quot;);<br />
  data = Wire.read();<br />
  Serial.print(data);<br />
  Serial.println(&quot;/&quot;);</p>
<p>  delay(100);<br />
}</p>
<p>void loop()<br />
{<br />
  //setto l&#8217;indirizzo per accedere alla data<br />
  //impostata nell&#8217;RTC<br />
  IndRam = 0x04;<br />
  //setto l&#8217;indirizzo da dove iniziare<br />
  //a leggere<br />
  Wire.beginTransmission(0x68);<br />
  Wire.write(IndRam);<br />
  Wire.endTransmission();</p>
<p>  //recupero 3 byte G M A<br />
  Wire.requestFrom(0x68, 3);<br />
  byte Giorno = Wire.read();<br />
  byte Mese = Wire.read();<br />
  byte Anno = Wire.read();</p>
<p>  //visualizzo la data dell&#8217;RTC<br />
  Serial.print(Giorno, DEC);<br />
  Serial.print(&quot;/&quot;);<br />
  Serial.print(Mese,DEC);<br />
  Serial.print(&quot;/&quot;);<br />
  Serial.println(Anno, DEC);</p>
<p>  //setto la libreria Time con la data dell&#8217;RTC<br />
  setTime(0,0,0, Giorno, Mese, (Anno + 2000));<br />
  //Recupero i secondi trascorsi tra la data 1 Gen 1970<br />
  //e la data dell&#8217;RTC<br />
  UnixData = now();<br />
  //Visualizzo i secondi trascorsi sul Serial Monitor<br />
  Serial.println(now());</p>
<p>  //recupero tutte le date memorizzate nella ram<br />
  //e le confronto con quella attuale dell&#8217;RTC<br />
  //trasformandole in secondi in modo da poter confrontare<br />
  //le date</p>
<p>  for( byte Ciclo = 0; Ciclo &lt; 54; Ciclo += 3)<br />
  {<br />
    //imposto il primo indirizzo della user ram<br />
    //e poi proseguo ciclicamente incrementando di<br />
    //3 posizioni<br />
    IndRam = 0x08 + Ciclo;<br />
    //Serial.println(IndRam, HEX);</p>
<p>    //setto l&#8217;indirizzo<br />
    Wire.beginTransmission(0x68);<br />
    Wire.write(IndRam);<br />
    Wire.endTransmission();</p>
<p>    //recupero i tre byte G M A<br />
    //dalla user RAM<br />
    Wire.requestFrom(0x68, 3);<br />
    byte memGiorno = Wire.read();<br />
    byte memMese = Wire.read();<br />
    byte memAnno = Wire.read();</p>
<p>    //imposto la libreria Time con la data dela user RAM<br />
    // per convertirla in secondi<br />
    setTime(0,0,0, memGiorno, memMese, (memAnno + 2000));<br />
    memUnixData = now();<br />
    //Serial.println(now());</p>
<p>    //confronto la data in secondi dell&#8217;RTC con la data<br />
    //appena recuperata dalla user ram</p>
<p>    if(UnixData == memUnixData)<br />
    {<br />
      //trovata data<br />
      //fai qualcosa<br />
      Serial.println(&quot;TROVATA!!!&quot;);<br />
    }</p>
<p>    delay(10);<br />
  }</p>
<p>  delay(1000);<br />
}<br />
[/c]</p>
<p>Il codice ha lo stesso comportamento di quello iniziale ma adesso c&#8217;è la possibilità di eseguire il confronto numerico grazie alla conversione in secondi. Ad esempio per escludere tutte le date passate possiamo fare questa semplice modifica</p>
<p>[c]</p>
<p>   //escludi le date passate</p>
<p>   if(UnixData &gt;= memUnixData)<br />
   {<br />
     //trovata data<br />
     //fai qualcosa<br />
     Serial.println(&quot;TROVATA!!!&quot;);<br />
   }</p>
<p>[/c]</p>
<p>oppure eseguire del codice per avvisarci una settimana in anticipo:</p>
<p>[c]  //avvisami una settimana prima<br />
  //settimana in secondi 60*60*24*7 = 604800</p>
<p>  if((memUnixData &#8211; UnixData) &lt;= 604800)<br />
  {<br />
    //trovata data<br />
    //fai qualcosa<br />
    Serial.println(&quot;TROVATA!!!&quot;);<br />
  }<br />
[/c]</p>
<p>Avendo il modo di eseguire un confronto numerico tra le date ci offre la possibilità di realizzare ulteriori funzioni, come ad esempio sketch che gestiscono l&#8217;Arduino a seconda delle date impostate nella user ram.</p>
<p>Per le operazioni da eseguire quando viene trovata una data possiamo eseguire tutte le tipiche funzioni di output che può gestire Arduino.</p>
<p>&nbsp;</p>
<p>[c]<br />
   //escludi le date passate<br />
   if(UnixData &gt;= memUnixData)<br />
   {<br />
     //trovata data<br />
     //fai qualcosa<br />
     Serial.println(&quot;TROVATA!!!&quot;);<br />
   }<br />
[/c]</p>
<p>The post <a href="https://logicaprogrammabile.it/promemoria-arduino-rtc/">Promemoria alternativo con Arduino e RTC</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/promemoria-arduino-rtc/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Operatori per spostare i bit (bitwise)</title>
		<link>https://logicaprogrammabile.it/operatori-spostare-bit/</link>
					<comments>https://logicaprogrammabile.it/operatori-spostare-bit/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 06 Feb 2012 22:22:19 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Bit]]></category>
		<category><![CDATA[Bitwise]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=2440</guid>

					<description><![CDATA[<p>Usare Arduino per spostare i bit di una variabile Oltre alle funzioni viste nel precedente articolo, Arduino è capace di eseguirne altre ed in particolare lo spostamento a destra o a sinistra bit a bit. L&#8217;operatore per lo spostamento a destra si esprime con questo...</p>
<p>The post <a href="https://logicaprogrammabile.it/operatori-spostare-bit/">Operatori per spostare i bit (bitwise)</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Usare Arduino per spostare i bit di una variabile</h3>
<p>Oltre alle funzioni viste <a title="Arduino, lavorare con i bit" href="https://logicaprogrammabile.it/arduino-lavorare-con-bit/">nel precedente articolo</a>, Arduino è capace di eseguirne altre ed in particolare lo spostamento a destra o a sinistra bit a bit. L&#8217;operatore per lo spostamento a destra si esprime con questo operatore<strong> &gt;&gt;</strong> mentre per lo spostamento a sinistra viene usato questo operatore <strong>&lt;&lt;</strong>.<br />
Per capire meglio cosa avviene utilizziamo delle immagini che semplificano la spiegazione. In questo caso ho una variabile di tipo byte (8 bit) il cui valore è 255. All&#8217;interno del chip atmega328 viene allocata, nella memoria ram, uno spazio di 8 bit i cui valori sono settati a 1</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2492" title="Var255" src="https://logicaprogrammabile.it/wp-content/uploads/2012/02/Var2551.gif" alt="" width="382" height="79" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/02/Var2551.gif 382w, https://logicaprogrammabile.it/wp-content/uploads/2012/02/Var2551-300x62.gif 300w" sizes="auto, (max-width: 382px) 100vw, 382px" /></p>
<p><span id="more-2440"></span>Eseguendo uno spostamento a sinistra &lt;&lt;, tutti i bit si spostano di una posizione verso sinistra e nel bit meno significativo (LSB) viene scritto uno zero:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2493" title="VarSpostamento" src="https://logicaprogrammabile.it/wp-content/uploads/2012/02/VarSpostamento.gif" alt="Spostamento a sinistra di bit" width="471" height="234" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/02/VarSpostamento.gif 471w, https://logicaprogrammabile.it/wp-content/uploads/2012/02/VarSpostamento-300x149.gif 300w" sizes="auto, (max-width: 471px) 100vw, 471px" /></p>
<p>Quindi il valore della variabile passa da <strong>255</strong> (in binario 11111111) a <strong>254</strong> (in binario 11111110).</p>
<p>Continuando ad eseguire uno spostamento a sinistra, di una posizione, otteniamo i seguenti valori</p>
<table>
<tbody>
<tr>
<td><strong>252  </strong></td>
<td><strong>11111100</strong></td>
</tr>
<tr>
<td><strong>248</strong></td>
<td><strong><strong>11111000</strong></strong></td>
</tr>
<tr>
<td><strong>240</strong></td>
<td><strong><strong>11110000</strong></strong></td>
</tr>
<tr>
<td><strong>224</strong></td>
<td><strong><strong>11100000</strong></strong></td>
</tr>
<tr>
<td><strong>192</strong></td>
<td><strong>11000000</strong></td>
</tr>
<tr>
<td><strong>128</strong></td>
<td><strong>10000000</strong></td>
</tr>
<tr>
<td><strong>0</strong></td>
<td><strong>00000000</strong></td>
</tr>
</tbody>
</table>
<p>Il codice che esegue quanto detto è il seguente</p>
<p>[c]<br />
//Variabile di tipo byte<br />
byte MiaVar;</p>
<p>void setup()<br />
{<br />
 //init seriale<br />
 Serial.begin(9600);<br />
 //init variabile 11111111<br />
 MiaVar= 255;<br />
}</p>
<p>void loop()<br />
{<br />
 //eseguo uno spostamento a sinistra di 1 posizione<br />
 //memorizzo il valore nella stessa variabile<br />
 MiaVar = MiaVar &lt;&lt; 1;</p>
<p> //invio il dato al serial monitor<br />
 Serial.println(MiaVar);</p>
<p> //1 secondo di pausa tra una operazione e l&#8217;altra<br />
 delay (1000);</p>
<p>}</p>
<p>[/c]</p>
<p>Allo stesso modo lo spostamento a destra <strong>&gt;&gt;</strong> esegue un movimento dei bit dal più significativo al meno significativo:</p>
<p><img loading="lazy" decoding="async" class="aligncenter" title="VarSpostamentoDX" src="https://logicaprogrammabile.it/wp-content/uploads/2012/02/VarSpostamentoDX.gif" alt="" width="470" height="236" /></p>
<p>in questo modo otteniamo i seguenti valori:</p>
<table>
<tbody>
<tr>
<td><strong>127</strong></td>
<td><strong><strong>01111111</strong></strong></td>
</tr>
<tr>
<td><strong>63 </strong></td>
<td><strong><strong>00111111</strong></strong></td>
</tr>
<tr>
<td><strong>31</strong></td>
<td><strong><strong><strong>00011111</strong></strong></strong></td>
</tr>
<tr>
<td><strong>15</strong></td>
<td><strong><strong><strong>00001111</strong></strong></strong></td>
</tr>
<tr>
<td><strong>7</strong></td>
<td><strong><strong><strong>00000111</strong></strong></strong></td>
</tr>
<tr>
<td><strong>3</strong></td>
<td><strong><strong>00000011</strong></strong></td>
</tr>
<tr>
<td><strong>1</strong></td>
<td><strong><strong>00000001</strong></strong></td>
</tr>
<tr>
<td><strong>0</strong></td>
<td><strong>00000000</strong></td>
</tr>
</tbody>
</table>
<p>Gli operatori &gt;&gt; e &lt;&lt; possono spostare i bit anche di diverse posizioni a seconda di come gestiamo l&#8217;operatore, ad esempio se voglio spostare i bit di quattro posizioni a sinistra dovrò scrivere:</p>
<p>[c]<br />
    MiaVar = MiaVar &lt;&lt; 4;<br />
[/c]</p>
<p>in questo modo la variabile <strong>MiaVar</strong> passerà dal valore 255 al 240.</p>
<p>Generalmente le operazioni bit a bit vengono usate perché sono eseguite molto velocemente da Arduino. Possono anche essere usate per semplici calcoli matematici, ad esempio moltiplicare o dividere un numero, come di seguito:</p>
<p>[c]<br />
   //Moltiplica * 2<br />
   Risultato = Miavar &lt;&lt; 1;<br />
   //Moltiplica * 4<br />
   Risultato = Miavar &lt;&lt; 2;<br />
   //Moltiplica * 8<br />
   Risultato = Miavar &lt;&lt; 3;<br />
   //divide / 2<br />
   Risultato = Miavar &gt;&gt; 1;<br />
   //divide / 4<br />
   Risultato = Miavar &gt;&gt; 2;<br />
   //divide / 8<br />
   Risultato = Miavar &gt;&gt; 3;<br />
[/c]</p>
<p>Questo metodo non è molto intuitivo ma quando ci troviamo ad ottimizzare il nostro codice per essere eseguito nel minor tempo possibile, lavorare con i bit è sempre una risorsa.</p>
<p>The post <a href="https://logicaprogrammabile.it/operatori-spostare-bit/">Operatori per spostare i bit (bitwise)</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/operatori-spostare-bit/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Tutorial installazione Arduino su Windows 7</title>
		<link>https://logicaprogrammabile.it/installazione-arduino-sistema-windows-7/</link>
					<comments>https://logicaprogrammabile.it/installazione-arduino-sistema-windows-7/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 23 Jan 2012 14:40:51 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Installazione]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=2446</guid>

					<description><![CDATA[<p>Guida per l&#8217;installazione Arduino su sistema Windows 7 Nonostante la semplicità di installazione dell&#8217;IDE e della board Arduino, capita che molti neofiti non riescano ad eseguire l&#8217;installazione Arduino su Windows 7. In effetti con questo sistema operativo l&#8217;installazione dei driver è automatica ma ci sono...</p>
<p>The post <a href="https://logicaprogrammabile.it/installazione-arduino-sistema-windows-7/">Tutorial installazione Arduino su Windows 7</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Guida per l&#8217;installazione Arduino su sistema Windows 7</h3>
<p>Nonostante la semplicità di installazione dell&#8217;IDE e della board Arduino, capita che molti neofiti non riescano ad eseguire l&#8217;installazione Arduino su <strong>Windows 7</strong>. In effetti con questo sistema operativo l&#8217;installazione dei driver è automatica ma ci sono dei casi in cui non si riesce ad installare i driver, soprattutto per le schede che montano l&#8217;integrato Mega8U per convertire il segnale da usb a seriale.</p>
<p>La procedura seguente mostra, passo passo, come installare una <strong>Arduino Ethernet</strong> collegata con la scheda <strong>USB2Serial Light</strong>.</p>
<p>Il primo passo è scaricare la versione 1.0 del software <a href="http://arduino.googlecode.com/files/arduino-1.0-windows.zip" target="_blank">Arduino IDE</a>, che contiene sia i driver sia la il software necessario per lo sviluppo. Dopo la decompressione posizioniamo questa cartella in modo che sia facilmente accessibile. Nel mio caso l&#8217;ho decompressa nella cartella di sistema Documenti.</p>
<p>Colleghiamo il cavo Usb della board<strong> USB2Serial Light</strong> al pc,<strong> Windows 7</strong> avvia automaticamente la ricerca nuovo hardware</p>
<p><span id="more-2446"></span></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2451" title="Rilevato nuovo hardware" src="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura-300x170.png" alt="" width="300" height="170" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura-300x170.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura.png 333w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>cliccando su l&#8217;icona contrassegnata, apriamo la finestra Installazione Driver, dove osserviamo che Windows tenta il download dei driver da Windows Update.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2452" title="Cattura1" src="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura1-300x172.png" alt="" width="300" height="172" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura1-300x172.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura1.png 649w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>Annulliamo questa procedura cliccando sul link &#8220;Ignora download di driver da Windows Update&#8221; e confermando cliccando sul pulsante &#8220;Si&#8221;</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2453" title="Cattura2" src="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura2-300x145.png" alt="" width="300" height="145" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura2-300x145.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura2.png 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2454" title="Cattura3" src="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura3-300x154.png" alt="" width="300" height="154" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura3-300x154.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura3.png 651w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>Attendiamo qualche minuto fino a quando viene visualizzato il messaggio di errore seguente</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2455" title="Arduino installazione driver non riuscita" src="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura8-300x77.png" alt="" width="300" height="77" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura8-300x77.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura8.png 506w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>Adesso andiamo sull&#8217;icona Computer e apriamo il menu contestuale cliccando con il pulsante destro del mouse. Selezioniamo la voce Proprietà</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2456" title="Cattura9" src="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura9-228x300.png" alt="" width="228" height="300" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura9-228x300.png 228w, https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura9.png 285w" sizes="auto, (max-width: 228px) 100vw, 228px" /></p>
<p>Dalla finestra appena visualizzata clicchiamo sulla voce <strong>Gestione Dispositivi</strong>:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2457" title="Gestione dispositivi Arduino Uno " src="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura10-300x192.png" alt="" width="300" height="192" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura10-300x192.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura10.png 408w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>Nella finestra Gestione Dispositivi vengono elencate tutte le periferiche del computer tra le quali appare la voce <strong>Arduino-Serial</strong> anteceduta dalla classica icona gialla con il punto esclamativo</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2458" title="Cattura11" src="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura11-294x300.png" alt="" width="294" height="300" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura11-294x300.png 294w, https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura11.png 332w" sizes="auto, (max-width: 294px) 100vw, 294px" /></p>
<p>Selezioniamo questa voce e cliccando con il pulsante destro del mouse selezioniamo, dal menu contestuale, la voce &#8220;<strong>Aggiornamento Software Driver&#8230;</strong>&#8221;</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2459" title="Cattura12" src="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura12-300x207.png" alt="" width="300" height="207" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura12-300x207.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura12.png 440w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>Viene avviata una semplice procedura guidata che porta all&#8217;installazione dei driver, selezioniamo la voce &#8220;Cerca il software del driver nel computer&#8221;</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2460" title="Cattura13" src="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura13-300x220.png" alt="" width="300" height="220" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura13-300x220.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura13.png 641w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>Nella finestra successiva, potete tentare di far cercare a Windows i driver contenuti nella cartella Arduino, ma e nel caso non viene trovato nessun driver dovete eseguire la procedura manuale come in questo caso, cliccando sulla voce &#8220;<strong>Scegli manualmente da un elenco di driver di dispositivo nel computer</strong>&#8220;:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2461" title="Scegli manualmente da un elenco di driver di dispositivo nel computer" src="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura15-300x218.png" alt="" width="300" height="218" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura15-300x218.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura15.png 632w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>la finestra successiva permette di scegliere il tipo di periferica da installare, cerchiamo la voce &#8220;<strong>Porte (COM e LPT)</strong>&#8221;</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2462" title="Cattura16" src="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura16-300x217.png" alt="" width="300" height="217" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura16-300x217.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura16.png 632w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>Cerchiamo un driver cliccando sul pulsante <strong>&#8220;Disco Driver</strong>&#8221;</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2463" title="Disco Driver" src="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura17-300x219.png" alt="" width="300" height="219" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura17-300x219.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura17.png 630w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>Cerchiamo nel computer, e precisamente all&#8217;interno della cartella contente i driver e l&#8217;ambiente di sviluppo che precedentemente era stata scaricata dal sito Arduino.cc, il file <strong>Arduino UNO.inf</strong> (tipicamente presente nella sottodirectory Drivers del software Arduino 1.0).<br />
Una volta selezionato clicchiamo sul pulsante <strong>Apri</strong></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2464" title="Apri file Arduino UNO.inf" src="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura18-300x248.png" alt="" width="300" height="248" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura18-300x248.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura18.png 632w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>Selezioniamo nel riquadro Produttore la voce<strong> Arduino LLC</strong> e nel riquadro modello la voce <strong>Arduino UNO R3</strong>, ignoriamo l&#8217;avviso che ci ricorda che il driver non possiede una firma digitale, e clicchiamo sul pulsante Avanti. Viene avviata l&#8217;installazione dei driver</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-2465 size-medium" title="Cattura20" src="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura20-300x218.png" alt="Tutorial installazione Arduino" width="300" height="218" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura20-300x218.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura20.png 633w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>una volta terminata l&#8217;installazione la procedura si conclude con una finestra che informa l&#8217;avvenuta installazione dei driver</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2466" title="Cattura21" src="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura21-300x218.png" alt="" width="300" height="218" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura21-300x218.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura21.png 632w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>Ritornando nella finestra &#8220;Gestione dispositivi&#8221; osserviamo che Arduino è stato riconosciuto ed installato corretamente.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2467" title="Cattura22" src="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura22-300x218.png" alt="" width="300" height="218" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura22-300x218.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2012/01/Cattura22.png 796w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>L&#8217;installazione dei driver in modo manuale permette di risolvere quei casi in cui Windows 7 non riesce ad installare Arduino in modo autonomo.</p>
<p>[facebook_ilike]</p>
<p>The post <a href="https://logicaprogrammabile.it/installazione-arduino-sistema-windows-7/">Tutorial installazione Arduino su Windows 7</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/installazione-arduino-sistema-windows-7/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino funzioni matematiche interessanti</title>
		<link>https://logicaprogrammabile.it/arduino-funzioni-matematiche-interessanti/</link>
					<comments>https://logicaprogrammabile.it/arduino-funzioni-matematiche-interessanti/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 09 Jan 2012 10:01:00 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Metodi]]></category>
		<category><![CDATA[Operatori Matematici]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=2390</guid>

					<description><![CDATA[<p>Come utilizzare alcuni operatori e funzioni matematiche nei progetti Nei nostri sketch, quando utilizziamo variabili numeriche, impieghiamo, solitamente, degli operatori matematici per manipolare questi dati. I più semplici, come sappiamo bene, sono l&#8217;addizione, la sottrazione, la moltiplicazione e la divisione. Fortunatamente esistono anche altri metodi...</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-funzioni-matematiche-interessanti/">Arduino funzioni matematiche interessanti</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Come utilizzare alcuni operatori e funzioni matematiche nei progetti</h3>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2403" title="FunzioneMatematiche" src="https://logicaprogrammabile.it/wp-content/uploads/2012/01/FunzioneMatematiche.jpg" alt="Funzioni matematiche con Arduino" width="218" height="216" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/01/FunzioneMatematiche.jpg 218w, https://logicaprogrammabile.it/wp-content/uploads/2012/01/FunzioneMatematiche-150x150.jpg 150w" sizes="auto, (max-width: 218px) 100vw, 218px" /></p>
<p>Nei nostri sketch, quando utilizziamo variabili numeriche, impieghiamo, solitamente, degli operatori matematici per manipolare questi dati. I più semplici, come sappiamo bene, sono l&#8217;addizione, la sottrazione, la moltiplicazione e la divisione. Fortunatamente esistono anche altri metodi che ci permettono di velocizzare e di risolvere diverse situazioni che si presentano durante la scrittura degli sketch.</p>
<p>In questo articolo volevo analizzare alcune funzioni particolari come <strong>constrain</strong>, <strong>min</strong>, <strong>max</strong>, <strong>floor</strong> e <strong>ceil</strong></p>
<h4>Come limitare un valore entro un limite minimo e massimo</h4>
<p>Quando si ha la necessità di ottenere sempre dei valori compresi in un intervallo definito, possiamo usare la funzione <strong>constrain(value, min, max)</strong>. Il codice seguente mostra come impiegarla<span id="more-2390"></span></p>
<p>[c]<br />
int Var = 10;<br />
int Result = 0;</p>
<p>void setup()<br />
{<br />
  Serial.begin(9600);<br />
}</p>
<p>void loop()<br />
{<br />
  //il valore Result sarà uguale a 50<br />
  Var = 50;<br />
  Result = constrain(Var, 10, 100);<br />
  Serial.println(Result);</p>
<p>  //il valore Result sarà uguale a 10<br />
  Var = 5;<br />
  Result = constrain(Var, 10, 100);<br />
  Serial.println(Result);</p>
<p>  //il valore Result sarà uguale a 100<br />
  Var = 500;<br />
  Result = constrain(Var, 10, 100);<br />
  Serial.println(Result);</p>
<p>  //non fa nulla<br />
  while(true)<br />
  ;</p>
<p>}</p>
<p>[/c]</p>
<p>Se la variabile <strong>Valore</strong> è minore di 10 il risultato sarà 10 se il valore è maggiore di 90 il risultato sarà 90, negli altri casi il risultato sarà uguale alla variabile Valore.</p>
<h4>Come trovare il minimo ed il massimo tra due numeri</h4>
<p>la funzione per calcolare il valore minimo tra due numeri è <strong>min(val1, val2);</strong> e viene impiegata in questo modo</p>
<p>[c]</p>
<p>int Var1 = 10;<br />
int Var2 = 50;<br />
int Result = 0;</p>
<p>void setup()<br />
{<br />
  Serial.begin(9600);<br />
}</p>
<p>void loop()<br />
{<br />
  //il valore Result sarà uguale a 10<br />
  Result = min(Var1, Var2);<br />
  Serial.print(Result);</p>
<p>  //non fa nulla<br />
  while(true)<br />
  ;</p>
<p>}<br />
[/c]</p>
<p>mentre la funzione per calcolare il valore massimo tra due numeri è <strong>max(val1, val2);</strong> e viene utilizzata in questo modo</p>
<p>[c]</p>
<p>int Var1 = 10;<br />
int Var2 = 50;<br />
int Result = 0;</p>
<p>void setup()<br />
{<br />
  Serial.begin(9600);<br />
}</p>
<p>void loop()<br />
{<br />
  //il valore Result sarà uguale a 50<br />
  Result = max(Var1, Var2);<br />
  Serial.print(Result);</p>
<p>  //non fa nulla<br />
  while(true)<br />
  ;</p>
<p>}</p>
<p>[/c]</p>
<h4>Come arrotondare un numero per difetto o per eccesso</h4>
<p>Le funzioni <strong>floor(val)</strong> e <strong>ceil(val)</strong> permettono di arrotondare rispettivamente per difetto e per eccesso un numero in virgola mobile. L&#8217;esempio seguente mostra come utilizzarle</p>
<p>[c]</p>
<p>float Var = 10.6598;<br />
int Result = 0;</p>
<p>void setup()<br />
{<br />
  Serial.begin(9600);<br />
}</p>
<p>void loop()<br />
{<br />
  //arrotonda per difetto<br />
  Result = floor(Var);<br />
  Serial.println(Result);</p>
<p>  //arrotonda per accesso<br />
  Result = ceil(Var);<br />
  Serial.println(Result);</p>
<p>  //non fa nulla<br />
  while(true)<br />
  ;</p>
<p>}</p>
<p>[/c]</p>
<h4>Come rimappare un intervallo di valori con un altro</h4>
<p>Quando si rende necessario scalare un intervallo di valori con un altro ci viene incontro la funzione <strong>map</strong>. Ad esempio i valori che possiamo ottenere dalla lettura di un segnale applicato ad un pin analogico di Arduino sono compresi tra 0 e 1023, se volessimo ottenere un intervallo diverso ma equivalente potremmo utilizzare la funzione <strong>map(data,x1,y1,x2,y2);</strong> in questo modo:</p>
<p>[c]</p>
<p>int DataAN0 = 0;<br />
int ValEqu = 0;</p>
<p>void setup()<br />
{<br />
  Serial.begin(9600);<br />
}</p>
<p>void loop()<br />
{<br />
  //leggo dal pin analogico zero<br />
  DataAN0 = analogRead(0);</p>
<p>  //i valoridi Result possono andare da 0 a 1024<br />
  //voglio rimappare questi valori per<br />
  //ottenere un intervallo equivalente che va<br />
  //da 0 a 255<br />
  ValEqu = map(DataAN0, 0, 1023, 0, 255);</p>
<p>  Serial.print(&quot;Valore Originale &quot;);<br />
  Serial.println(DataAN0);<br />
  Serial.print(&quot;Valore rimmapato &quot;);<br />
  Serial.println(ValEqu);<br />
  Serial.println();<br />
  delay(1000);</p>
<p>}<br />
[/c]</p>
<p>Ulteriori informazioni sono presenti nel sito ufficiale <a href="http://arduino.cc/en/Reference/HomePage" target="_blank">Arduino.cc</a>, dove vengono illustrate ulteriori funzioni interessanti.</p>
<p>[facebook_ilike]</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-funzioni-matematiche-interessanti/">Arduino funzioni matematiche interessanti</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/arduino-funzioni-matematiche-interessanti/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
