Ragazzi, Help!!
Vi spiego nel dettaglio:
Ho costruito una piccola scheda per comandare un motore Passo-Passo con 2 tasti, il tutto comandato dal micro arduino 1 (atm328p pu) standalone e il driver SN754410NE; collegato al corrispondente del Pin13 un led; volevo che mi segnalasse semplicemente che i tasti vengono premuti.
Con lo Sketch compilato (copiando qua e là) funziona tutto, tranne uno dei 2 tasti; quando lo premo, il led emette un lampeggio appena percettibile (con l'altro tasto luce fissa regolare).
Premetto che ho fatto tutte le prove per verificare il funzionamento di tutto l'hardware, come caricarre sketch solo Blink o accensione Led con tasti, anche differenziando il numero di lampeggi per tasto.
Lo Sketch caricato è questo:
#define LED 13
#define ORARIO 2
#define ANTIOR 3
const int buttonPin1 = 2;
const int buttonPin2 = 3;
int motorPinx[] = {8, 9, 10, 11};
int sequenzaO[] = {0,2,1,3};
int sequenzaA[] = {3,1,2,0};
int countX = 0;
int countY = 0;
int ora = 0;
int ant = 0;
int delayTime = 50;
int pinPot = 0;
int buttonState1 = 0;
int buttonState2 = 0;
void setup() {
pinMode(LED, OUTPUT);
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(ORARIO, INPUT);
pinMode(ANTIOR, INPUT);
for (countX=0; countX<4; countX++)
{
pinMode(motorPinx[countX], OUTPUT);
}
pinMode(pinPot, INPUT);
}
void loop() {
buttonState1 = digitalRead(buttonPin1);[b]//Legge lo stato del bottone1[/b]
buttonState2 = digitalRead(buttonPin2);[b]//Legge lo stato del bottone2[/b]
ora = digitalRead(ORARIO);
ant = digitalRead(ANTIOR);
int readPot = analogRead( pinPot );
int delayTime = map(readPot,0,1024,10,500);
if (buttonState1 == HIGH) { [b] //se è premuto (HIGH)[/b]
digitalWrite(LED, HIGH); [b]//accendi il led[/b]
}
if (buttonState2 == HIGH) { [b] //se è premuto (HIGH)[/b]
digitalWrite(LED, HIGH); [b]//accendi il led[/b]
}
else { //altrimenti
digitalWrite(LED, LOW); [b]//spegnilo[/b]
}
if (ora == HIGH)
{orario();}
if (ant == HIGH)
{antiorario();}
delay(delayTime);
}
void orario(){
//int sequenzaO[] = {0,2,1,3};
int val = LOW;
for (countX=0; countX<4; countX++){
if (countX == countY){val = HIGH;}
else{val = LOW;}
digitalWrite(motorPinx[sequenzaO[countX]], val);
}
countY++;
if (countY == 4){
countY = 0;
//delay(delayTime);
}
}
void antiorario(){
//int sequenzaA[] = {3,1,2,0};
int val = LOW;
for (countX=0; countX<4; countX++){
if (countX == countY){val = HIGH;}
else{val = LOW;}
digitalWrite(motorPinx[sequenzaA[countX]], val);
}
countY++;
if (countY == 4){
countY = 0;
//delay(delayTime);
}
Secondo voi cosa non fa accendere il led con uno dei 2 tasti e come risolverlo.
Io avevo pensato ad un doppio stato di Low, essendo due tasti, ma dovrebbe valere per tutti e 2 e non per uno solo ![]()