Pages: [1]   Go Down
Author Topic: Codice arduino rc-car ?  (Read 382 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 50
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao a tutti sto facendo un progetto in cui con un pc controllo la mia rc car che ha due motori in continua e così per gestirli  ho utilizzato un driver motore (fatto da me) , una shield ethernet , un router ,arduino e due servo motori per controllare la webcam ( uno gira destra- sinistra e l'altro alto-basso) .
ora io ho provato a creare un programma ma non vuole funzionare.
mi potete dire dove è che ho sbagliato ?
grazie mille a tutti quanti voi smiley

code :

Code:
// Terzo programma di trasmissione seriale con Ethernet
int ena =2;         // driver motore
int a = 3;           // driver motore
int b = 4;         // driver motore
int enb = 5;   // driver motore
int c = 6;      // driver motore
int d = 7;     // driver motore
#include <Servo.h>
Servo myservo3; // servo webcam 1 (destra - sinistra)
Servo myservo4; // servo webcam 2 (alto-basso)
int lettura;
int stato1;
int stato2;
int pos_o = 100;
//unsigned long int currentMillis;
//unsigned long int previousMillis;
int interval = 500;
 
void setup()
{
 myservo3.attach(11); // 1° servo telecamera
 myservo4.attach(6);  // 2° servo telecamera
 //pinMode(2, OUTPUT);
 //pinMode(12, OUTPUT);
 
 Serial.begin(9600);
}

void loop()
{  

 // currentMillis = millis();
  
  if (Serial.available()>0)   // Se c'è un dato disponibile sulla seriale
  {
    lettura = Serial.read();
  }
  
  if(lettura =='8')
  {
    digitalWrite(ena,HIGH);    // con queste 3 istruzioni il motore 1 va avanti
    digitalWrite(a,HIGH);
   digitalWrite(b,LOW);
    
 //   lampeggio();
  }
  
  if(lettura =='5')
  {
    digitalWrite(ena,HIGH);            
    digitalWrite(a,HIGH);               // motore 1 fermo
    digitalWrite(b,HIGH);
  
          
  }
  
  if(lettura =='2')
  {
    digitalWrite(ena,HIGH);              
    digitalWrite(a,LOW);             // motore 1 indietro
   digitalWrite(b,HIGH);
 
   // lampeggio();
  }
  
  if(lettura =='6')
  {
    digitalWrite(enb,HIGH);              
    digitalWrite(c,HIGH);         // motore 2 gira destra
    digitalWrite(d,LOW);
  
  }
  
  if(lettura =='4')
  {
    digitalWrite(enb,HIGH);              
    digitalWrite(c,HIGH);         // motore 2 gira sinitra
   digitalWrite(d,HIGH);
  
  }
 
 // MODIFICA
 
  if(lettura =='1')
  {
    digitalWrite(ena,HIGH);
     digitalWrite(a,HIGH);
      digitalWrite(b,HIGH);
    
    pos_o = pos_o - 5;    
    if ( pos_o >= 0 && pos_o <= 180 )
    {
      myservo3.write( pos_o );
      lettura = 0;  
    }
    
 }
 
 
 if(lettura =='3')
 {
      digitalWrite(ena,HIGH);
     digitalWrite(a,HIGH);
      digitalWrite(b,HIGH);
  
      pos_o = pos_o + 5;
      if ( pos_o >= 0 && pos_o <= 180 )
    {
      myservo3.write( pos_o );
      lettura = 0;
    }
      
  }
 
 // MODIFICA
 
  if(lettura =='7')
 {
     digitalWrite(enb,HIGH);
     digitalWrite(c,HIGH);
      digitalWrite(d,HIGH);
  
      pos_o = pos_o + 5;
      if ( pos_o >= 0 && pos_o <= 180 )
    {
      myservo4.write( pos_o );
      lettura = 0;
    }
      
  }
 
 
   if(lettura =='9')
 {
     digitalWrite(enb,HIGH);
     digitalWrite(c,HIGH);
      digitalWrite(d,HIGH);
  
      pos_o = pos_o -5;
      if ( pos_o >= 0 && pos_o <= 180 )
    {
      myservo4.write( pos_o );
      lettura = 0;
    }
      
  }
 
 
 
  Serial.flush();
  
}
 
« Last Edit: March 06, 2014, 12:02:23 pm by danielspc » Logged

ivrea (to)
Online Online
Faraday Member
**
Karma: 86
Posts: 4954
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

1. il codice, da regolamento, deve essere racchiuso nei tag code. Vedi regolamento, sezione 7, ti spiega come si fa.
2. cosa vuol dire che non vuole funzionare?   smiley-eek-blue
Quando compili ti da errore? Il programma parte ma i motori non si muovono?
3. nella setup() non fai pinMode(x, OUTPUT);  dei pin ena,a,b,enb,etc.

P.S. per snellire un pò il programma potresti usare switch invece di innumerevoli if
Code:
switch(lettura)
{ case '8':   //   lampeggio();
    digitalWrite(ena,HIGH);    // con queste 3 istruzioni il motore 1 va avanti
    digitalWrite(a,HIGH);
    digitalWrite(b,LOW);
    break;
  case '5':
    digital....
    break;
 }
 
« Last Edit: March 06, 2014, 10:21:28 am by nid69ita » Logged

my name is IGOR, not AIGOR

Offline Offline
Jr. Member
**
Karma: 0
Posts: 50
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

guarda il compilatore non mi da errori smiley
quando lo carico su arduino poi i motori non si muovono non fa nulla in pratica.
l'uso di switch non lo conosco molto e preferirei usare if smiley
 sapresti magari darmi una dritta su cosa potrebbe esserci in questo codice di sbagliato ?
grazie smiley
Logged

ivrea (to)
Online Online
Faraday Member
**
Karma: 86
Posts: 4954
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

3. nella setup() non fai pinMode(x, OUTPUT);  dei pin ena,a,b,enb,etc.
vedi sopra
Logged

my name is IGOR, not AIGOR

Offline Offline
Jr. Member
**
Karma: 0
Posts: 50
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

si scusami mi ero scordato di dirti comunque anche ora che ho messo i pinMode e non funziona.
è così giusto ? smiley

Code:
//Terzo programma di trasmissione seriale con Ethernet
int ena =2;
int a = 3;
int b = 4;
int enb = 5;
int c = 6;
int d = 7;
#include <Servo.h>
Servo myservo3;
Servo myservo4;
int lettura;
int stato1;
int stato2;
int pos_o = 100;
//unsigned long int currentMillis;
//unsigned long int previousMillis;
int interval = 500;
 
void setup()
{
 myservo3.attach(11); // 1° servo telecamera
 myservo4.attach(6);  // 2° servo telecamera
 pinMode (2,OUTPUT);
 pinMode (3,OUTPUT);
 pinMode (4,OUTPUT);
 pinMode (5,OUTPUT);
 pinMode (6,OUTPUT);
 pinMode (7,OUTPUT);
 
 Serial.begin(9600);
}

void loop()


 // currentMillis = millis();
 
  if (Serial.available()>0)   // Se c'è un dato disponibile sulla seriale
  {
    lettura = Serial.read();
  }
 
  if(lettura =='8')
  {
    digitalWrite(ena,HIGH);             
    digitalWrite(a,HIGH);
   digitalWrite(b,LOW);
   
 //   lampeggio();
  }
 
  if(lettura =='5')
  {
    digitalWrite(ena,HIGH);             
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
   
  //  digitalWrite(2, LOW);
  //  digitalWrite(12, LOW);
       
  }
 
  if(lettura =='2')
  {
    digitalWrite(ena,HIGH);             
    digitalWrite(a,LOW);
   digitalWrite(b,HIGH);
 
   // lampeggio();
  }
 
  if(lettura =='6')
  {
    digitalWrite(enb,HIGH);             
    digitalWrite(c,HIGH);
    digitalWrite(d,LOW);
   // lampeggio();
  }
 
  if(lettura =='4')
  {
    digitalWrite(enb,HIGH);             
    digitalWrite(c,HIGH);
   digitalWrite(d,HIGH);
  //  lampeggio();
  }
 
 // MODIFICA
 
  if(lettura =='1')
  {
    digitalWrite(ena,HIGH);
     digitalWrite(a,HIGH);
      digitalWrite(b,HIGH);
   
    pos_o = pos_o - 5;   
    if ( pos_o >= 0 && pos_o <= 180 )
    {
      myservo3.write( pos_o );
      lettura = 0;   
    }
   
 }
 
 
 if(lettura =='3')
 {
      digitalWrite(ena,HIGH);
     digitalWrite(a,HIGH);
      digitalWrite(b,HIGH);
   
      pos_o = pos_o + 5;
      if ( pos_o >= 0 && pos_o <= 180 )
    {
      myservo3.write( pos_o );
      lettura = 0;
    }
       
  }
 
 // MODIFICA
 
  if(lettura =='7')
 {
     digitalWrite(enb,HIGH);
     digitalWrite(c,HIGH);
      digitalWrite(d,HIGH);
   
      pos_o = pos_o + 5;
      if ( pos_o >= 0 && pos_o <= 180 )
    {
      myservo4.write( pos_o );
      lettura = 0;
    }
       
  }
 
 
   if(lettura =='9')
 {
     digitalWrite(enb,HIGH);
     digitalWrite(c,HIGH);
      digitalWrite(d,HIGH);
   
      pos_o = pos_o -5;
      if ( pos_o >= 0 && pos_o <= 180 )
    {
      myservo4.write( pos_o );
      lettura = 0;
    }
       
  }
 
 
 
  Serial.flush();
 
}

Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 50
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

secondo te il problema dove può trovarsi ? smiley
Logged

ivrea (to)
Online Online
Faraday Member
**
Karma: 86
Posts: 4954
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Qui un problema:
Code:
myservo4.attach(6);  // 2° servo telecamera
...
pinMode (6,OUTPUT);
usi lo stesso pin
Logged

my name is IGOR, not AIGOR

ivrea (to)
Online Online
Faraday Member
**
Karma: 86
Posts: 4954
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

... così per gestirli  ho utilizzato un driver motore (fatto da me)
Sei sicuro questo hardware funzioni?

..., una shield ethernet
Ma per ora non la usi, vero?

Ma se hai driver, motori, servi, ethernet. Tutto assieme, come alimenti il tutto? Basta la corrente?
Logged

my name is IGOR, not AIGOR

Offline Offline
Jr. Member
**
Karma: 0
Posts: 50
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok per il pin ho risolto e ho cambiato mettendo 10.
l'hardware funziona in quanto l'ho provato con il digital lab e va alla grande smiley
si la shield la uso infatti è collegata sopra l'arduino .
per l'alimentazione il driver motore è collegato ad arduino ed anche la shield ed ho una batteria da 9v per alimentare arduino.
per il resto invece ho acquistato una batteria a lipo da 11.4 v e 1300 mah.

per me comunqe il problema rimane nella shield in quanto ho sentito dire che usa dei pin per la comunicazione con arduino non ricordo però quali.. può essere questo il problema ? smiley
Logged

Switzerland
Online Online
Faraday Member
**
Karma: 114
Posts: 5958
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

per me comunqe il problema rimane nella shield in quanto ho sentito dire che usa dei pin per la comunicazione con arduino non ricordo però quali.. può essere questo il problema ? smiley

Leggere il reference .. si fa fatica ???  smiley-twist smiley-twist smiley-twist

"Arduino communicates with both the W5100 and SD card using the SPI bus (through the ICSP header). This is on digital pins 10, 11, 12, and 13 on the Uno and pins 50, 51, and 52 on the Mega. On both boards, pin 10 is used to select the W5100 and pin 4 for the SD card. These pins cannot be used for general I/O. On the Mega, the hardware SS pin, 53, is not used to select either the W5100 or the SD card, but it must be kept as an output or the SPI interface won't work."

Guglielmo
Logged

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

Offline Offline
Jr. Member
**
Karma: 0
Posts: 50
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok  grazie e scusami .. quindi arduino uno utilizza i pin 10, 11 , 12, 13 per comunicare con la shield giusto ? smiley
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 50
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ho provato a fare anche questo altro tipo di codice ma niente smiley-sad

Code:

#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,239);
EthernetServer server(272);

int ena =2;
int a = 3;
int b = 4;
int enb = 5;
int c = 6;
int d = 7;
#include <Servo.h>
Servo myservo3;
Servo myservo4;
int lettura;
int stato1;
int stato2;
int pos_o = 100;
//unsigned long int currentMillis;
//unsigned long int previousMillis;
int interval = 500;
 
void setup()
{
 myservo3.attach(11); // 1° servo telecamera
 myservo4.attach(10);  // 2° servo telecamera
 pinMode (2,OUTPUT);
 pinMode (3,OUTPUT);
 pinMode (4,OUTPUT);
 pinMode (5,OUTPUT);
 pinMode (6,OUTPUT);
 pinMode (7,OUTPUT);
//Serial.begin(9600);
 
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop()
 {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    // an http request ends with a blank line
  //  boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (c == '8') {
        digitalWrite(ena,HIGH);             
    digitalWrite(a,HIGH);
   digitalWrite(b,LOW);
    }
       if(c=='5') {
     digitalWrite(ena,HIGH);             
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    }
       if(c=='2') {
       digitalWrite(ena,HIGH);             
    digitalWrite(a,LOW);
   digitalWrite(b,HIGH);
      }
    if(c='6') {
      digitalWrite(enb,HIGH);             
    digitalWrite(c,HIGH);
    digitalWrite(d,LOW);
    }
    if(c='4'){
      digitalWrite(enb,HIGH);             
    digitalWrite(c,HIGH);
   digitalWrite(d,HIGH);
    }
  if(c='1'){
    digitalWrite(ena,HIGH);
     digitalWrite(a,HIGH);
      digitalWrite(b,HIGH);
   
    pos_o = pos_o - 5;   
    if ( pos_o >= 0 && pos_o <= 180 )
    {
      myservo3.write( pos_o );
      lettura = 0;   
    }
  }
   
 if(lettura =='3')
 {
      digitalWrite(ena,HIGH);
     digitalWrite(a,HIGH);
      digitalWrite(b,HIGH);
   
      pos_o = pos_o + 5;
      if ( pos_o >= 0 && pos_o <= 180 )
    {
      myservo3.write( pos_o );
      lettura = 0;
    }
       
  }
 
   if(lettura =='7')
 {
     digitalWrite(enb,HIGH);
     digitalWrite(c,HIGH);
      digitalWrite(d,HIGH);
   
      pos_o = pos_o + 5;
      if ( pos_o >= 0 && pos_o <= 180 )
    {
      myservo4.write( pos_o );
      lettura = 0;
    }
       
  }
 
   if(lettura =='9')
 {
     digitalWrite(enb,HIGH);
     digitalWrite(c,HIGH);
      digitalWrite(d,HIGH);
   
      pos_o = pos_o -5;
      if ( pos_o >= 0 && pos_o <= 180 )
    {
      myservo4.write( pos_o );
      lettura = 0;
    }
       
  }

}
}
}
      delay(1);
     // close the connection:
     client.stop();
       Serial.flush();
 

 }

Logged

Switzerland
Online Online
Faraday Member
**
Karma: 114
Posts: 5958
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok  grazie e scusami .. quindi arduino uno utilizza i pin 10, 11 , 12, 13 per comunicare con la shield giusto ? smiley

... leggi bene ! Anche il pin 4 è riservato ...

Guglielmo
Logged

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

Offline Offline
Jr. Member
**
Karma: 0
Posts: 50
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

un altra cosa che mi sta venendo in mente è :
se io creo una pagina in html che gestisca la macchinetta è possibile poi collegarsi e comandarla da li ? smiley
Logged

Pages: [1]   Go Up
Jump to: