problema motore - 2 bottoni - sensore

avrei un problema con un programma relativamente semplice…
ho un motore in DC collegato ad un driver L293D in uscita; in entrata ho un sensore analogico (quindi ho valori da 0 a 1023), e due bottoni (in realtà sono finecorsa).

se il sensore legge un valore maggiora a X(es. 200) allora il motore deve girare in una direzione, solo se il bottone1 è spento (indipendentemente dall’altro), mentre se è inferiore a 200 allora deve girare in direzione opposta, solo se il bottone2 è spento (anche questo indipendentemente dall’altro).
se invece almeno 1 dei due bottoni è attivo, allora il motore deve rimanere spento

inizialmente con 1 solo bottone e una direzione di marcia funzionava, ora sfarfalla e va a scatti il motore, vi incollo il codice (ditemi pure se fa schifo o meno, non sono molto pratico)

#define motore 3
#define SensoreMio A3
#define BottoneAv 7
#define BottoneDi 6
int RotDx = 10;
int RotSx = 11;

void setup() {
  pinMode(motore, OUTPUT);
  pinMode(SensoreMio,INPUT);
  pinMode(BottoneAv,INPUT);
  pinMode(BottoneDi,INPUT);
  pinMode(RotDx,OUTPUT);
  pinMode(RotSx,OUTPUT);
  Serial.begin(9600);
  }

void loop() {

int BotAv= digitalRead(BottoneAv);
int BotDi= digitalRead(BottoneDi);
int Myo = analogRead(SensoreMio); 
Serial.println(Myo);
 if (Myo >200 and BotDi == LOW)
   {digitalWrite(motore, HIGH);
    digitalWrite(RotDx, HIGH);
    digitalWrite(RotSx, LOW);}
  else if (Myo<70 and BotAv == LOW)
   {digitalWrite(motore, HIGH);
    digitalWrite(RotDx, LOW);
    digitalWrite(RotSx, HIGH);}
   else
   {digitalWrite(motore, LOW);}
}

Buonasera,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Beh, prima domanda: dato che i pulsanti li definisci come INPUT e testi se sono HIGH o LOW, come li hai collegati esattamente? Hai messo una resistenza di pull-down esterna? Perché se non l'hai fatto e quindi li lasci fluttuanti, la digitalRead() leggerà disturbi e quindi potrebbe essere LOW come HIGH (tipo la mano che "po' esse piuma o po' esse fero" :wink: ).

Devi mettere una resistenza o di pull-down o di pull-up su ognuno dei tasti, oppure, più semplicemente, li definisci INPUT_PULLUP per usare la resistenza interna di pull-up di Arduino (iun tal caso però ricorda che tasto premuto = LOW, e tasto non premuto = HIGH).

non ho la minima idea di cosa sia una resistenza esterna di pull-down...(scusa l'ingnoranza)

ho collegato ad 1 piedino la +5V, all'opposto la GRN (con resistenza da 200 ohm circa), e a 1 dei due rimanenti l'input.

pull-up e pull-down resistor

Superchinotto:
non ho la minima idea di cosa sia una resistenza esterna di pull-down...(scusa l'ingnoranza)

Vedi i link che ti ha postato Maurotec, trovi le spiegazioni.
Comunque sia, se nel setup() le definisci INPUT_PULLUP usi la resistenza interna di Arduino, ed eviti di mettere le resistenze esterne. Così facendo però hai una logica invertita, come ti ho scritto prima, ossia col tasto premuto avrai LOW mentre quando non lo è sarà HIGH (ossia devi modificare LOW in HIGH nelle due of).

ho collegato ad 1 piedino la +5V, all'opposto la GRN (con resistenza da 200 ohm circa), e a 1 dei due rimanenti l'input.

Non ho capito. I pulsanti hanno in genere 2 o 4 piedini, visto che parli dei "rimanenti" immagino sia il classico pulsante a 4 piedini, ma questi sono connessi tra loro due a due sugli opposti lati!! Per farmi capire:

    1   2
   |   |
 +-------+
 | |_/_| |
 | |   | |
 +-------+
   |   |
   3   4

Quindi i piedini 1 e 3 sono collegati tra loro, così come 2 e 4, ed il pulsante quando premuto li mette tutti in comunicazione. Quindi per usare il pullup interno, se colleghi il piedino 1 (o il 3) al pin di Arduino, metterai a GND il piedino 2 (o 4). Quando non premi il pulsante la resistenza interna lo porterà a HIGH, mentre quando lo premi metterai in connessione i piedini quindi il pin di Arduino andrà a GND

Se tu dici di aver messo un piedino a +5V e l'altro opposto a GND, rischi seriamente di fare un corto circuito e danneggiare Arduino e/o l'alimentatore!