sto cercando di creare un sistema di selezione tramite un contatore.
il mio problema e che quando premo il pulsante il contatore va in avanti di continuo, non incrementando di una sola unita per ogni pressione (vi chiedo aiuto)
qui sotto il mio listato
//RETROMARCIA
int pinR=A2;
byte Rsel;
int z;
//FRIZIONE
int pinF=A1;
int posF;
int posFm;
byte stopxF;
byte stopyF;
//LED
int pinLedV=A7;
int pinLedR=A0;
//LCD
char selp;
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//MOTORE
int pinDirA=8; //MOTORE A/A
int pinPwmA=9; //MOTORE A/B
int pinDirB=13; //MOTORE B/A
int pinPwmB=10; //MOTORE B/B
int pinposa=A6; //PIN POTENZIONETRO X
int pinposb=A4; //PIN POTEZIOMETRO Y
int posa; // POSIZIONE EFFETTIVA X
int posb; // POSIZIONE EFFETTIVA Y
int sel=2;//SELEZIONE POSIZIONE
int posam; //VALORE EFFETTIVO X VISUALIZZATO
int posbm; //VALORE EFFETTIVO Y VISUALIZZATO
int x; //POSIZIONE OBBIETTIVO X-POSIZIONE RICHIESTA
int y; //POSIZIONE OBBIETTIVO Y-POSIZIONE RICHIESTA
byte stopx; //FERMA IL MOTORE A
byte stopy; //FERMA IL MOTORE B ("HIGH" GIRA)
//SELEZIONE CONTATORE
int pinup=6; // PULSANTE SU
int pindown=7; //PULSANTE GIU
byte up=0; //BYTE SU
byte down=0; //BYTE GIU
byte oldup=0; // BYTE PRECEDENTE SU
byte olddown=0; // BYTE PRECEDENTE GIU
void setup()
{
//RETOMARCIA
pinMode(pinR,INPUT);
//FRIZIONE
pinMode( pinF,INPUT);
//LCD
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);//LCD NUMERO COLONNA,RIGA
// SCRIVI SULL' LCD.
lcd.print("PITRU84 GEAR");
delay (50);
lcd.clear();
//LED
pinMode( pinLedV,OUTPUT);//IMPOSTO IL PIN COME USCITA
pinMode( pinLedR,OUTPUT);
//MOTORE
pinMode( pinDirA,OUTPUT ); //IMPOSTO IL PIN COME USCITA
pinMode( pinPwmA,OUTPUT ); //**************************
pinMode( pinDirB,OUTPUT );
pinMode( pinPwmB,OUTPUT );
pinMode( posb,INPUT); //*************INGRESSO
pinMode( posa,INPUT ); //*************INGRESSO
pinMode (pinup, INPUT); //**************INGRESSO
pinMode (pindown,INPUT); //**************INGRESSO
}
void loop()
{
////////////RETROMARCIA//////////
Rsel= digitalRead(pinR);
if (Rsel==HIGH)
{(delay (50));z=1;}
if (Rsel==LOW)
{z=2;}
//FRIZIONE///////////////
lcd.setCursor(0,0);
lcd.print(posFm);
posF=analogRead( pinF);
posFm=(posF=map(posF, 0, 1023, 0, 100));
//FRIZIONE
/if (posFm<90)
{(stopxF=LOW);
(stopyF=LOW);}
if (posFm>90)
{(stopxF=stopx);
(stopyF=stopy);}/
/if(posFm<80)
{(stopx==LOW)&&(stopy==LOW);}
if(posFm>=80){(stopx==HIGH)&&(stopy==HIGH);}/
//LED
if ((posam==x)&&(posbm==y)) //SE LE DUE POSIZIONI CORRISPONDONO
digitalWrite (pinLedV,HIGH);//IL LED E ACCESO
if ((posbm!=y)||(posam!=x)) //SE LE DUE POSIZIONI NON CORRISPONDONO
digitalWrite (pinLedV,LOW); //IL LED E SPENTO
//////////////////// CONTATORE ////////////////////
////////////////RICHIESTA FOLLE///////////////
up= digitalRead (pinup ); //LETTURA DEL PIN UP
down= digitalRead (pindown);//LETTURA DEL PIN DOWN
if ((up==HIGH)&&(down==HIGH))
{
sel=2;}
else
{
//CONTROLLO PULSANTE UP
if ((down!= HIGH) && (up == HIGH) && (sel<7)) //CONDIZIONI PER LO STATO DI UP
{
delay(50); //TEMPO MINIMO PULSANTE
{
lcd.clear();//PULISCI LO SCERMO A OGNI CAMBIAMENTO
sel=(sel+1); //OPERAZIONE DI ADDIZIONE
}
}
//CONTROLLO PULSANTE DOWN
if ((up!=HIGH) && (down==HIGH) && (sel>z)) //CONDIZIONI PER LO STATO DI DOWN
{
delay(50); //TEMPO MINIMO PULSANTE
{
lcd.clear();
sel=(sel-1);}
}}