Go Down

Topic: Bleutooth + Joypad + Map (Read 151 times) previous topic - next topic

pangiagio

Oct 04, 2016, 10:25 pm Last Edit: Oct 06, 2016, 06:05 pm by pangiagio Reason: sempificazione post
Ciao a tutti,

ho costruito un piccolo robot con due motori collegati al motor shield L298N. Lo stesso è comandato tramite Tablet interfacciato ad Arduino con HC-06.
Vorri comandarlo con il joypad (virtuale) per intenderci come quello della playstation (due potenziometri) , quindi :
Joypad su : avanza acellerando progressivamente in base alla posizione del joypad;
Joypad giù : indietreggia acellerando progressivamente in base alla posizione del joypad;
Joypad centro : fermo;
Joypad destra/sinistra :stesso concetto del avanza/indietreggia,

Code: [Select]
// Motore 1
int dir1PinA = 3;
int dir2PinA = 5;

// Motore 2
int dir1PinB = 9;
int dir2PinB = 11;
int velocita = analogRead(dir1PinA);
int speed1;
int speed2;
char BluetoothDataX;
char BluetoothDataY;
void setup() { 
  // initialize serial communication @ 9600 baud:
  Serial.begin(9600);

  //Definisce il pins del L298N Dual H-Bridge Motor Controller

  pinMode(dir1PinA, OUTPUT);
  pinMode(dir2PinA, OUTPUT);
 
  pinMode(dir1PinB, OUTPUT);
  pinMode(dir2PinB, OUTPUT);



}

void loop () {


if (Serial.available()){
    BluetoothDataX=Serial.read();
    switch (BluetoothDataX) {

   

        case 'X': //AVANTI e DIETRO
        BluetoothDataX = Serial.parseInt();
        if (BluetoothDataX >= 120 && BluetoothDataX <= 220 )
        {
          speed1 = map(BluetoothDataX, 120 , 220 , 0 , 255);
           digitalWrite(dir1PinA, LOW);
           analogWrite(dir2PinA, speed1);
           digitalWrite(dir1PinB, LOW);
           analogWrite(dir2PinB, speed1);
         }
        if (BluetoothDataX >=0 && BluetoothDataX <=100 )
        {
          speed1 = map(BluetoothDataX,0 , 100 , 255 , 0);
          digitalWrite(dir2PinA, LOW);
           analogWrite(dir1PinA, speed1);
            digitalWrite(dir2PinB, LOW);
           analogWrite(dir1PinB, speed1);
        }
       
        break;

  //  case 'Y': //SINISTRA DESTRA
 //       digitalWrite(dir1PinA, low);
//        analogWrite(dir2PinA, 120);
//        digitalWrite(dir1PinB, LOW);
//        analogWrite(dir2PinB, 255);
     
  //      break; 
         
       
    }
 
  }
 }



il programma non è ancora completo. Dal codice che ho scritto ho provato a farlo andare e in avanti funziona bene, mentre non indietraggia affatto e non capisco dove sto sbagliando. I valore del Joypad virtuale, che ho poi mappato sui Pin interessati va da 0 a 200.

Spero di essere stato chiaro e vi ringrazio anticipatamente per il prezioso supporto.

pangiagio

#1
Oct 06, 2016, 06:06 pm Last Edit: Oct 07, 2016, 07:49 pm by pangiagio
Nessun aiuto?

Grazie 1000 in anticipo.

gpb01

#2
Oct 07, 2016, 03:43 pm Last Edit: Oct 07, 2016, 03:43 pm by gpb01
Nessun aiuto?
Grazie 1000.
Premesso che qui NESSUNO è obbligato ad aiutarti e che tu NON puoi pretendere aiuto ... lo scrivere "Grazie 1000" indispone solo chi legge e, magari, anche chi ti voleva aiutare non lo fa più.

Detto questo, il consiglio che ti do è mettere delle Serial.print() così da visualizzare cosa veramente è arrivato dentro a BluetoothDataX e mettere un paio di Serial.print() anche nei due IF per verificare se veramente ci entra ...
... insomma, fare un po' di DEBUG per individuare dove è realmente il problema.

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

pangiagio

#3
Oct 07, 2016, 07:21 pm Last Edit: Oct 07, 2016, 07:49 pm by pangiagio
Ti sbagli non volevo indisporre nessuno e non pretendo niente. "Grazie 1000" era solo un modo cordiale rivolto in anticipo a chi mi volesse aiutare.Niente più!
A scanso di equivoci ho corretto il post.

Buona serata

gpb01

#4
Oct 07, 2016, 08:03 pm Last Edit: Oct 07, 2016, 08:03 pm by gpb01
A scanso di equivoci ho corretto il post.
Hai fatto bene ... così il senso è più chiaro e non da adito a cattive interpretazioni.

Fai le Serial.print() che ti ho suggerito e fai sapere i risultati ...

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

Go Up