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
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
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
#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();
}
}
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
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
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...