pin, without using the delay() function. This means that other code
can run at the same time without being interrupted by the LED code.
-
Schema: https://lab.piffa.net/schemi/circuito_led_bb.png
-
http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/
-// constants won't change. Used here to
-// set pin numbers:
const int led = 13; // Primo LED
-
-unsigned long previousMillis = 0; // will store last time LED was updated
-unsigned long interval = 1000; // interval at which to blink (milliseconds)
+unsigned long previousMillis = 0; // Ultimo agiornamento
+unsigned long interval = 1000; // Pausa tra i lampeggi
void setup() {
- // set the digital pin as output:
pinMode(led, OUTPUT);
}
void loop()
{
if (millis() - previousMillis >= interval) {
- // Timestamp + timestamp = delta temporale
previousMillis += interval ;
digitalWrite(led, !digitalRead(led));
--- /dev/null
+/* Simple Motor
+
+Gestione di un motore DC tramite Arduino.
+Elementi richiesti:
+
+- motore DC a 5v per ~300ma
+- transistor NPN 2N2222
+- diodo 1N4001
+
+ Schemi:
+ - Breadboard: http://lab.piffa.net/schemi/motor_transistor_diode_bb.png
+ - Schema circuito: http://lab.piffa.net/schemi/motor_transistor_diode_schem.png
+
+ */
+
+int motorPin = 9; // Pin tramite cui Arduino controlla il motore
+void setup() {
+ pinMode(motorPin, OUTPUT);
+}
+
+void loop() {
+ digitalWrite(motorPin, HIGH); // Accende il motore a tutta potenza
+ delay(1000);
+ digitalWrite(motorPin, LOW); // Spegne il motore
+ delay(5000);
+}
+
+
+
--- /dev/null
+/* Simple Motor: PWM
+ Gestine di un motore DC utilizzando il PWM
+ per modificarne la velocita': ciclo ascendente e discendente
+
+ Schemi:
+ - Breadboard: http://lab.piffa.net/schemi/motor_transistor_diode_bb.png
+ - Schema circuito: http://lab.piffa.net/schemi/motor_transistor_diode_schem.png
+
+ */
+
+int motorPin = 9; // Pin tramite cui Arduino controlla il motore
+void setup() {
+ pinMode(motorPin, OUTPUT);
+}
+void loop() {
+ for(int motorValue = 0 ; motorValue <= 255; motorValue +=5){ // PWM up
+ analogWrite(motorPin, motorValue);
+ delay(60);
+ }
+ for(int motorValue = 255 ; motorValue >= 0; motorValue -=5){ // PWM down
+ analogWrite(motorPin, motorValue);
+ delay(30);
+ }
+delay(900); // Pause
+}
+
+/* Domande
+1. Il motore si muove con i valori di corrente molto bassi?
+2. A quali valori comincia a muoversi effettivamente?
+2.1 E per fermarsi, il valore e' diverso?
+3. Impostare un valore minimo per la partenza del motore.
+4. Come fare per invertire la direzione di rotazione del motore?
+*/
--- /dev/null
+/* Simple Motor: PWM Soluzione
+
+ Motore DC con variazione della velocita' tramite PWM
+
+ Schemi:
+ - Breadboard: http://lab.piffa.net/schemi/motor_transistor_diode_bb.png
+ - Schema circuito: http://lab.piffa.net/schemi/motor_transistor_diode_schem.png
+
+ */
+
+int motorPin = 9;
+int minValue = 60; // Valore minimo per far partire il motore da fermo
+void setup() {
+ pinMode(motorPin, OUTPUT);
+}
+void loop() {
+ for(int motorValue = minValue ; motorValue <= 255; motorValue +=5){ // PWM up
+ analogWrite(motorPin, motorValue);
+ delay(60);
+ }
+ for(int motorValue = 255 ; motorValue >= 30; motorValue -=5){ //
+ // Quando il motore e' in movimento puo' muoversi fino a un valore piu' basso
+ // di minVal
+ analogWrite(motorPin, motorValue);
+ delay(30);
+ }
+analogWrite(motorPin, 0); // Fermiamo il motore per sicurezza
+delay(900); // Pause
+}
+
+/* Domande
+1. Il motore si muove con i valori di corrente molto bassi?
+2. A quali valori comincia a muoversi effettivamente?
+2.1 E per fermarsi, il valore e' diverso?
+3. Impostare un valore minimo per la partenza del motore.
+4. Come fare per invertire la direzione di rotazione del motore?
+
+ Risposte:
+4. Basta invertire la polarita' dei cavi che vanno al motore
+*/
+
--- /dev/null
+/*
+ Simple Motor : Potenziometro
+
+ Motore DC con variazione della velocita' impostata
+ tramite un potenziometro 10k ohms
+
+ Schema: http://lab.piffa.net/schemi/motor_pot_bb.png
+ */
+
+const int analogInPin = A0; // Pin a cui e' collegato il potenziometro
+const int motorPin = 9;
+
+int potValue = 0;
+int motValue = 0;
+
+void setup() {
+ pinMode(motorPin, OUTPUT);
+ Serial.begin(9600); // Debuggin
+
+}
+void loop() {
+ potValue = analogRead(analogInPin);
+ motValue = potValue / 4 ; //mappatura 1024 -> 255
+
+ analogWrite(motorPin,motValue); // Imposta la velocita' del motore
+
+ Serial.print("Pot value = " );
+ Serial.print(potValue);
+ Serial.print("\t Motore velocita' = ");
+ Serial.println(motValue);
+ delay(3); // Pausa, aiuta a stabilizzare l'input
+
+}
+
+/* Domande
+
+1. Cosa succede quando il motore riceve poca corrente?
+2. Impostare un valore minimo per la partenza del motore,
+ sotto al quale il motore non parta.
+*/
+
+
+
--- /dev/null
+/*
+ Simple Motor: Pot - Soluzione
+
+ Motore DC con variazione della velocita' tramite PWM
+ pilotata da un potenziometro
+
+ Impostare una mappatura in modo che il motore parta
+ da un valore minimo adeguato.
+
+ */
+
+const int analogInPin = A0;
+const int motorPin = 9;
+
+int potValue = 0;
+int motValue = 0;
+
+void setup() {
+ pinMode(motorPin, OUTPUT);
+ Serial.begin(9600); // Debuggin
+
+}
+void loop() {
+ potValue = analogRead(analogInPin) ;
+ motValue = potValue / 4 ;// Mappatura semplificata da 1024 -> 255
+
+// Debug
+ Serial.print("Pot value = " );
+ Serial.print(potValue);
+ Serial.print("\t Motor speed = ");
+ Serial.println(motValue);
+
+ if (motValue > 60) { // Valore minimo per far partire il motore
+ analogWrite(motorPin,motValue); //
+ }
+ else analogWrite(motorPin,0); // Se non supera il valore minimo
+ // deve restare fermo
+
+ delay(3); // Pause, stabilizza la lettura del Pot
+}
+
+/* Domande:
+ 1. Rifare questo esercizio utilizzando la funzione map().
+
+ */
--- /dev/null
+/*
+ Simple Motor : Potenziometro con minimo
+
+ Motore DC con variazione della velocita' impostata
+ tramite un potenziometro 10k ohms,
+ settato un valore minimo sotto il quale il motore
+ non viene attivato.
+
+ Schema: http://lab.piffa.net/schemi/motor_pot_bb.png
+
+ */
+
+const int analogInPin = A0; // Pin a cui e' collegato il potenziometro
+const int motorPin = 9;
+
+int potValue = 0;
+int motValue = 0;
+const int minMotValue = 50 ; // Valore minimo per il motore,
+ // questo variera' in base ai motori
+
+void setup() {
+ pinMode(motorPin, OUTPUT);
+ Serial.begin(9600); // Debuggin
+
+}
+void loop() {
+ potValue = analogRead(analogInPin);
+ motValue = potValue / 4 ; // mappatura 1024 -> 255
+
+if (motValue > minMotValue) { // Minimum motor spped check
+ analogWrite(motorPin,motValue); // Imposta la velocita' del motore
+} else {
+analogWrite(motorPin,LOW) ;
+}
+
+
+ Serial.print("Pot value = " );
+ Serial.print(potValue);
+ Serial.print("\t Motore velocita' = ");
+ Serial.println(motValue);
+ delay(3); // Pausa, aiuta a stabilizzare l'input
+
+}
--- /dev/null
+/*
+ Simple Motor: Seriale
+
+ Motore DC con variazione della velocita' impostata da connessione seriale
+
+ */
+
+const int motorPin = 9;
+int motValue ;
+
+void setup() {
+ pinMode(motorPin, OUTPUT);
+ Serial.begin(9600); // Input
+ Serial.println("\t Usare valori da 0-255");
+// Serial.setTimeout(2000); // Imposta il tempo di time out per la lettura
+ // del buffer seriale, default = 1000ms
+}
+
+void loop() {
+ if (Serial.available()) {
+ motValue = Serial.parseInt(); // leggiamo un valore da seriale
+ motValue = constrain(motValue,0,255); // Limitiamo l'input dell'utente
+
+ analogWrite(motorPin,motValue); // Change the PWM speed of the motor
+ Serial.print("Velocita' motore = ");
+ Serial.println(motValue);
+ }
+}
+
+/* Domande
+1. Perche' il motore si resetta a zero dopo una breve pausa?
+2. Come e' possibile fare in modo che il motore resti attivo
+ al valore dato?
+3. Da cosa e' dovuto e come e' possibile rendere il circuito piu' responsivo
+ all'input dell'utente.
+- Risposte a fondo pagina
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1. Perche' vede il valore di terminazione riga
+ e lo scarta facendolo passare per zero
+2. Impostare il monitor seriale per "Nessun fine riga"
+2.1 impostare un ciclo condizionale che controlli che l'input sia composto solo da numeri
+3. Impostare Serial.setTimeout per definire il tempo di lettura del buffer seriale
+*/
- /*
- Adafruit Arduino - Lesson 15. Bi-directional Motor
-
- Pilotare un motore DC brushed con un H-bridge mediante
- un integrato L293D
-
-
- Schemi e istruzioni:
- - https://learn.adafruit.com/adafruit-arduino-lesson-15-dc-motor-reversing/overview
-
- */
-
- int enablePin = 11;
- int in1Pin = 10;
- int in2Pin = 9;
- int switchPin = 7;
- int potPin = 0;
-
- void setup()
- {
- pinMode(in1Pin, OUTPUT);
- pinMode(in2Pin, OUTPUT);
- pinMode(enablePin, OUTPUT);
- pinMode(switchPin, INPUT_PULLUP);
- }
-
- void loop()
- {
- int speed = analogRead(potPin) / 4;
- boolean reverse = digitalRead(switchPin);
- setMotor(speed, reverse);
- }
-
- void setMotor(int speed, boolean reverse)
- {
- analogWrite(enablePin, speed);
- digitalWrite(in1Pin, ! reverse);
- digitalWrite(in2Pin, reverse);
- }
+/*
+Adafruit Arduino - Lesson 15. Bi-directional Motor
+
+Pilotare un motore DC brushed con un H-bridge mediante
+un integrato L293D
+
+Schemi e istruzioni:
+- https://learn.adafruit.com/adafruit-arduino-lesson-15-dc-motor-reversing/overview
+*/
+
+int enablePin = 11;
+int in1Pin = 10;
+int in2Pin = 9;
+int switchPin = 7;
+int potPin = 0;
+
+void setup()
+{
+ pinMode(in1Pin, OUTPUT);
+ pinMode(in2Pin, OUTPUT);
+ pinMode(enablePin, OUTPUT);
+ pinMode(switchPin, INPUT_PULLUP);
+}
+
+void loop()
+{
+ int speed = analogRead(potPin) / 4;
+ boolean reverse = digitalRead(switchPin);
+ setMotor(speed, reverse);
+}
+
+void setMotor(int speed, boolean reverse)
+{
+ analogWrite(enablePin, speed);
+ digitalWrite(in1Pin, !reverse);
+ digitalWrite(in2Pin, reverse);
+}
// Controlling a servo position using a potentiometer (variable resistor)
// by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
+// Schema: https://lab.piffa.net/schemi/potenziometro_bb.png
+
#include <Servo.h>
Servo myservo; // create servo object to control a servo
-int potpin = 0; // analog pin used to connect the potentiometer
+const int potpin = A0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup()
void loop()
{
- for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees
+ for (pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
- for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees
+ for (pos = 180; pos >= 1; pos -= 1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
+++ /dev/null
-/*
- Simple Motor: Seriale
-
- Motore DC con variazione della velocita' impostata da connessione seriale
-
- */
-
-const int motorPin = 9;
-int motValue ;
-
-void setup() {
- pinMode(motorPin, OUTPUT);
- Serial.begin(9600); // Input
- Serial.println("\t Usare valori da 0-255");
- // Serial.setTimeout(2000); // Imposta il tempo di time out per la lettura
- // del buffer seriale, default = 1000ms
-
-}
-void loop() {
-if (Serial.available())
- {
- motValue = Serial.parseInt(); // leggiamo un valore da seriale
- motValue = constrain(motValue,0,255); // Limitiamo l'input dell'utente
-
- analogWrite(motorPin,motValue); // Change the PWM speed of the motor
- Serial.print("Velocita' motore = ");
- Serial.println(motValue);
- }
-
-
-
-}
-
-/* Domande
-1. Perche' il motore si resetta a zero dopo una breve pausa?
-2. Come e' possibile fare in modo che il motore resti attivo
- al valore dato?
-3. Da cosa e' dovuto e come e' possibile rendere il circuito piu' responsivo
- all'input dell'utente.
-- Risposte a fondo pagina
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1. Perche' vede il valore di terminazione riga
- e lo scarta facendolo passare per zero
-2. Impostare il monitor seriale per "Nessun fine riga"
-2.1 impostare un ciclo condizionale che controlli che l'input sia composto solo da numeri
-3. Impostare Serial.setTimeout che definisce il tempo di lettura del buffer seriale
-*/
-
-
-
-
-
-
+++ /dev/null
-/*
- Simple Motor : Potenziometro con minimo
-
- Motore DC con variazione della velocita' impostata
- tramite un potenziometro 10k ohms,
- settato un valore minimo sotto il quale il motore
- non viene attivato.
-
- Schema: http://lab.piffa.net/schemi/motor_pot_bb.png
-
- */
-
-const int analogInPin = A0; // Pin a cui e' collegato il potenziometro
-const int motorPin = 9;
-
-int potValue = 0;
-int motValue = 0;
-const int minMotValue = 50 ; // Valore minimo per il motore,
- // questo variera' in base ai motori
-
-void setup() {
- pinMode(motorPin, OUTPUT);
- Serial.begin(9600); // Debuggin
-
-}
-void loop() {
- potValue = analogRead(analogInPin);
- motValue = potValue / 4 ; // mappatura 1024 -> 255
-
-if (motValue > minMotValue) { // Minimum motor spped check
- analogWrite(motorPin,motValue); // Imposta la velocita' del motore
-} else {
-analogWrite(motorPin,LOW) ;
-}
-
-
- Serial.print("Pot value = " );
- Serial.print(potValue);
- Serial.print("\t Motore velocita' = ");
- Serial.println(motValue);
- delay(3); // Pausa, aiuta a stabilizzare l'input
-
-}
-
-
-
-
-
-
+++ /dev/null
-/*
- Simple Motor : Potenziometro
-
- Motore DC con variazione della velocita' impostata
- tramite un potenziometro 10k ohms
-
- Schema: http://lab.piffa.net/schemi/motor_pot_bb.png
- */
-
-const int analogInPin = A0; // Pin a cui e' collegato il potenziometro
-const int motorPin = 9;
-
-int potValue = 0;
-int motValue = 0;
-
-void setup() {
- pinMode(motorPin, OUTPUT);
- Serial.begin(9600); // Debuggin
-
-}
-void loop() {
- potValue = analogRead(analogInPin);
- motValue = potValue / 4 ; //mappatura 1024 -> 255
-
- analogWrite(motorPin,motValue); // Imposta la velocita' del motore
-
- Serial.print("Pot value = " );
- Serial.print(potValue);
- Serial.print("\t Motore velocita' = ");
- Serial.println(motValue);
- delay(3); // Pausa, aiuta a stabilizzare l'input
-
-}
-
-/* Domande
-
-1. Cosa succede quando il motore riceve poca corrente?
-2. Impostare un valore minimo per la partenza del motore,
- sotto al quale il motore non parte.
-*/
-
-
-
+++ /dev/null
-/*
- Simple Motor: Pot - Soluzione
-
- Motore DC con variazione della velocita' tramite PWM
- pilotata da un potenziometro
-
- Impostare una mappatura in modo che il motore parta
- da un valore minimo adeguato.
-
- */
-
-const int analogInPin = A0;
-const int motorPin = 9;
-
-int potValue = 0;
-int motValue = 0;
-
-void setup() {
- pinMode(motorPin, OUTPUT);
- Serial.begin(9600); // Debuggin
-
-}
-void loop() {
- potValue = analogRead(analogInPin) ;
- motValue = potValue / 4 ;// Mappatura semplificata da 1024 -> 255
-
-// Debug
- Serial.print("Pot value = " );
- Serial.print(potValue);
- Serial.print("\t Motor speed = ");
- Serial.println(motValue);
-
- if (motValue > 60) { // Valore minimo per far partire il motore
- analogWrite(motorPin,motValue); //
- }
- else analogWrite(motorPin,0); // Se non supera il valore minimo
- // deve restare fermo
-
- delay(3); // Pause, stabilizza la lettura del Pot
-}
-
-
-
-
-
-
-
+++ /dev/null
-/* Simple Motor: PWM
- Gestine di un motore DC utilizzando il PWM
- per modificarne la velocita': ciclo ascendente e discendente
-
- Schemi:
- - Breadboard: http://lab.piffa.net/schemi/motor_transistor_diode_bb.png
- - Schema circuito: http://lab.piffa.net/schemi/motor_transistor_diode_schem.png
-
- */
-
-int motorPin = 9; // Pin tramite cui Arduino controlla il motore
-void setup() {
- pinMode(motorPin, OUTPUT);
-}
-void loop() {
- for(int motorValue = 0 ; motorValue <= 255; motorValue +=5){ // PWM up
- analogWrite(motorPin, motorValue);
- delay(60);
- }
- for(int motorValue = 255 ; motorValue >= 0; motorValue -=5){ // PWM down
- analogWrite(motorPin, motorValue);
- delay(30);
- }
-delay(900); // Pause
-}
-
-/* Domande
-1. Il motore si muove con i valori di corrente molto bassi?
-2. A quali valori comincia a muoversi effettivamente?
-2.1 E per fermarsi, il valore e' diverso?
-3. Impostare un valore minimo per la partenza del motore.
-4. Come fare per invertire la direzione di rotazione del motore?
-*/
+++ /dev/null
-/* Simple Motor: PWM Soluzione
-
- Motore DC con variazione della velocita' tramite PWM
-
- Schemi:
- - Breadboard: http://lab.piffa.net/schemi/motor_transistor_diode_bb.png
- - Schema circuito: http://lab.piffa.net/schemi/motor_transistor_diode_schem.png
-
- */
-
-int motorPin = 9;
-int minValue = 60; // Valore minimo per far partire il motore da fermo
-void setup() {
- pinMode(motorPin, OUTPUT);
-}
-void loop() {
- for(int motorValue = minValue ; motorValue <= 255; motorValue +=5){ // PWM up
- analogWrite(motorPin, motorValue);
- delay(60);
- }
- for(int motorValue = 255 ; motorValue >= 30; motorValue -=5){ //
- // Quando il motore e' in movimento puo' muoversi fino a un valore piu' basso
- // di minVal
- analogWrite(motorPin, motorValue);
- delay(30);
- }
-analogWrite(motorPin, 0); // Fermiamo il motore per sicurezza
-delay(900); // Pause
-}
-
-/* Domande
-1. Il motore si muove con i valori di corrente molto bassi?
-2. A quali valori comincia a muoversi effettivamente?
-2.1 E per fermarsi, il valore e' diverso?
-3. Impostare un valore minimo per la partenza del motore.
-4. Come fare per invertire la direzione di rotazione del motore?
-
- Risposte:
-4. Basta invertire la polarita' dei cavi che vanno al motore
-
-*/
-
+++ /dev/null
-/* Simple Motor
-
-Gestione di un motore DC tramite Arduino.
-Elementi richiesti:
-
-- motore DC a 5v per ~300ma
-- transistor NPN 2N2222
-- diodo 1N4001
-
- Schemi:
- - Breadboard: http://lab.piffa.net/schemi/motor_transistor_diode_bb.png
- - Schema circuito: http://lab.piffa.net/schemi/motor_transistor_diode_schem.png
-
- */
-
-int motorPin = 9; // Pin tramite cui Arduino controlla il motore
-void setup() {
- pinMode(motorPin, OUTPUT);
-}
-
-void loop() {
- digitalWrite(motorPin, HIGH); // Accende il motore a tutta potenza
- delay(1000);
- digitalWrite(motorPin, LOW); // Spegne il motore
- delay(5000);
-}
-
-
-