Motor non si muovono

Voglio creare una specie di ping pong. Nel senso che ci sono due pulsanti e un servomotore, questo servo deve toccare i due pulsanti, quando tocca uno dei due si deve spostare dall’altra parte.
ho utilizzato, prima, millis e poi delay e penso di averlo utilizzato nel modo sbagliato. Potete aiutarmi controllando questo sketch?

#include <Servo.h>

Servo myservo;
int End3 = A0;
int End2 = A1;
int ON = A2;
int grado;
void setup() 
{ 
  myservo.attach(9);
  myservo.write( grado );
  pinMode(End3, INPUT);
  pinMode(End2, INPUT);
  pinMode(ON, INPUT);
} 

void loop() 
{  


if(ON == HIGH)
      {
      grado == 100;
      delay(100);
      } 

if(End3 == HIGH)
     {
     grado == 0;
     delay(100);
     }
if(End2 == HIGH)
 { 
  grado = 179;
  delay(100);
 }

  myservo.write( grado );
}

Benvenuto. :) Ti invitiamo a presentarti qui: http://forum.arduino.cc/index.php?topic=113640.0 e a leggere il regolamento: http://forum.arduino.cc/index.php?topic=149082.0 - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: http://forum.arduino.cc/index.php?topic=146152.0 - qui le pinout delle varie schede by xxxPighi: http://forum.arduino.cc/index.php?topic=151646.0 - qui una serie di link generali ma utili: http://forum.arduino.cc/index.php?topic=126861.0

bluffLUCYFERO: if(ON == HIGH)

Questo è l'errore fondamentale, tu stai chiedendo ad Arduino se ON(che è il numero del pin A2 che dovrebbe essere 16) è uguale a HIGH (cioè 1) ovvero mai ! Devi chiedere di leggere il pin ON, quindi usare la digitalRead(ON)

if( digitalRead(ON) == HIGH)

Grazie per i link, molto utili :slight_smile:
Ho quasi risolto, se clicco il pulsante per far andare da 100° a 180 e clicco su 0, subito torna a 0. Se faccio il contrario, sto andando a 0 e clicco su 180 inizia a rallentare, arriva a 0 e poi va a 180.

#include <Servo.h>

Servo myservo;
int End3 = A0;
int End2 = A1;
int ON = A2;
int grado;

void setup() 
{ 
  myservo.attach(9);
  pinMode(End3, INPUT);
  pinMode(End2, INPUT);
  pinMode(ON, INPUT);
} 

void loop() 
{  
grado = 23;
while(true)
{
if( digitalRead(ON) == HIGH) //BIANCO
      {
      grado = 100;
      } 

if(digitalRead(End3) == HIGH) //ARANCIONE
     {
     grado = 0;
     }
if(digitalRead(End2) == HIGH) //ROSSO
     { 
    grado = 179;
     }

  myservo.write( grado );
}
}

grado == 100;

grado = 100;

= Assegnazione == Confronto

@Lucyfero un’altra cosa.
Questo while(true) è inutile, tieni conto che la loop() in realtà è già eseguita di continuo.
Quello che non si vede (è semi-nascosto) è che la loop() è contenuta in un ciclo infinito tipo:

while(true) 
{ loop();
}

Ho modificato in questo modo, continua a darmi problemi quando lo sto per portare a 0° e clicco su 180 per cambiare direzione prima che arrivi a 0. Rallenta, arriva a 0 e poi 180, ancora :confused:

#include <Servo.h>

Servo myservo;
int End3 = A0;
int End2 = A1;
int ON = A2;
int grado;

void setup() 
{ 
  myservo.attach(9);
  pinMode(End3, INPUT);
  pinMode(End2, INPUT);
  pinMode(ON, INPUT);
} 

void loop() 
{  
{
if( digitalRead(ON) == HIGH) //BIANCO
      {
      grado = 100;
      } 

if(digitalRead(End3) == HIGH) //ARANCIONE
     {
     grado = 0;
     }
if(digitalRead(End2) == HIGH) //ROSSO
     { 
    grado = 180;
     }

  myservo.write( grado );
}
}

Un dubbio. ma come sono questi pulsanti? Li potrei premere con un dito? Tieni conto che, anche con un dito, quando premi un pulsante ci possono essere falsi contatti. Cerca debounce come problematica. Poi, seconda domanda, sei sicurissssimo che quel servo arriva a 180° ? Alcuni di scarsa qualità non ci arrivano.

Ho risolto il problema, non ho capito se il servo o Arduino odia il grado 0° infatti impostando a 1° è tutto perfetto XD Funziona correttamente. Ho utilizzato i pulsanti dello starter kit e il servo dello starter kit. Problema risolto, adesso posso andare a dormire contento, grazie a tutti per l'aiuto, ci vediamo domani all'arduino day :grin:

2 cose: Hai messo delle resistenze pulldown sui pulsanti? Devi dare un valore alla variabile grado prima di utilizzarla. per esempio quando la definisci: int grado = 5; Per il debounce aggiungi una delay(19) prima di muovere il Servo.

Ciao Uwe