Go Down

Topic: Valori di input sbagliati (Read 89 times) previous topic - next topic

Massimiliano_Dolcini

Salve qualche giorno fa avevo aperto un topic simile(forse), ma specifico per quel caso, che successivamente ho compreso ma non adatto alla situazione attuale.
Il problema è che ho un robot alphabot della whaveshare, voglio far si che dei pin (13,12,11,10), siano impostati come input e quando ricevono un segnale positivo da un esp32, muovano il robot in una direzione.
Il problema è che se stampo i valori presi in input, il risultato che dovrebbe essere 0000 è invece 0110 oppure 1000, ecc.(Continua a variare).
All'inizio ho pensato che fossero dei pin utilizzati dal robot, ma staccando i pezzi che andavano a funzionare con quei pin l'errore c'era ancora(ho anche provato a cambiare pin utilizzati come input).
Pensavo che ci volesse input_pullup ma non se sono sicuro, qualcuno potrebbe aiutarmi?
Grazie

gpb01

Premesso che quei pin, almeno su Arduino UNO, sono quelli de bus SPI (non so sul robot che Arduino ci sia), comunque, SE non li usi come SPI, ma li usi come INPUT è obbligatorio che NON vengano lasciati flottanti o, causa l'alta impedenza, possono oscillare in continuazione tra LOW ed HIGH.

Quindi, o usi l'opzione INPUT_PULLUP di Arduino (che li tiene normalmente HIGH) o metti tu esternamente delle resistenze di pull-up o di pull-down, come ti servono.

Guglielmo
Search is Your friend ... or I am Your enemy !

Massimiliano_Dolcini

Sul robot ho arduino uno, le resistenze non so come si debbano mettere, però avevo già provato a mettere INPUT_PULLUP, e riprovandoci seppur li dica di avviare tutte e due le ruote, mi avvia solo quella sinistra e i valori letti sono comunque sbagliati
Code: [Select]

#include "AlphaBot.h"

const int Forward = 13;


AlphaBot bot = AlphaBot();


void setup() {
  pinMode(Forward,INPUT_PULLUP);
  bot.SetSpeed(200);
  Serial.begin(9600);
}

void loop(){  

  Serial.print(digitalRead(Forward));
  
  if(digitalRead(Forward)==HIGH){
    bot.Forward();
  }
  else{
    bot.Brake();
  }
  
}

gpb01

Ripeto che NON conosco quel robot e, senza schemi e senza conoscere quella libreria (Alphabot), non è possibile capire ciò che chiedi.

Quello che ti posso dire è che, come già ti ho scritto, NON puoi lasciare pin flottanti, quindi, un INPUT DEVE avere qualche cosa che gli impone un livello.  Questo qualche cosa può essere:  un segnale digitale che arriva da un'altra MCU, o un valore forzato con una resistenza (va bene una resistenza da 4.7K), verso il positivo (pull-up) per tenere normalmente il pin a livello HIGH, verso il GND (pull-down) per tenere normalmemte il pin a livello LOW.

Guglielmo
Search is Your friend ... or I am Your enemy !

gpb01

Ho visto che, SE parliamo dello stesso oggetto, QUI ci sono gli schemi la documentazione ed una serie di programmi di esempio, sia per Arduino che per Raspberry ...

... segui il Wiki, controlla i vari ponticelli e prova l'esempio Arduino/Alphabot e vedi se va.

Guglielmo
Search is Your friend ... or I am Your enemy !

Datman

Se usi le resistenze interne di pull-up, devi mettere le chiusure verso massa. Dico chiusure perché le resistenze di pull-up o pull-down servono se il comando è solo un interruttore che si chiude e, se non è chiuso, il circuito rimane aperto. Nel tuo caso, però, immagino che il segnale provenga da un'uscita CMOS in push-pull: in tal caso, il circuito non rimane mai aperto...
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

Go Up