Ciao,
Sono nuovo del forum, mi servirebbe un aiuto su un progetto che sto realizzando.
Sto costruendo una macchina 4WD con la lego tecnics l'hardware è composto da arduino uno - BotBoarDuino - 1 sensore ultrasuoni - 4 motori in corrente continua e 2 sensori infrarossi per lettura linea nera su pavimento.
ho un listato che vorrei modificare inserendo la lettura degli infrarossi ma non so come fare. qualcuno mi puo aiutare ? posso inserire il listato ? se si come faccio copia incolla ?
Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento
- qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- qui le pinout delle varie schede by xxxPighi: Pinout
- qui una serie di link generali utili: Link Utili
Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare.
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.
Ciao, grazie della risposta.
Spero di aver capito per il codice.
Devo modificarlo e inserire un controllo infrarossi già inserito in parte per avere una lettura nel monitor seriale.
vorrei che quando il valore della lettura e al di sotto di 10cm sia del sx che del dx la macchina torna indietro.
#include <AFMotor.h>
#include <Servo.h>
#include <NewPing.h>
#define TRIG_PIN A4
#define ECHO_PIN A5
#define MAX_DISTANCE 200
#define MAX_SPEED 180
#define MAX_SPEED_OFFSET 20
#define COLL_DIST 10
#define TURN_DIST COLL_DIST+10
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
AF_DCMotor motor1(1, MOTOR12_1KHZ);
AF_DCMotor motor2(4, MOTOR12_1KHZ);
AF_DCMotor motor3(2, MOTOR34_1KHZ);
AF_DCMotor motor4(3, MOTOR34_1KHZ);
Servo myservo;
int pos = 0;
int maxDist = 0;
int maxAngle = 0;
int maxRight = 0;
int maxLeft = 0;
int maxFront = 0;
int course = 0;
int curDist = 0;
String motorSet = "";
int speedSet = 0;
[color=red]int IRpindx =A3; // SENSORE DESTRO[/color]
int IRpinsx =A2; // SENSORE SINISTRO
//-------------------------------------------- SETUP LOOP ---------------------------------------------------------------
void setup() {
Serial.begin(9600);
myservo.attach(9);
myservo.write(90);
delay(2000);
checkPath();
motorSet = "FORWARD";
myservo.write(90);
moveForward();
}
//----------------------------------------------------------------------------------------------------------------------
//---------------------------------------------MAIN LOOP ------------------------------------------------------------
void loop() {
checkForward();
checkPath();
//*****************LETTURE SENSORI SU MONITOR SERIALE************************************
float voltsdx = analogRead(IRpindx)*0.0048828125;
float distancedx = 65*pow(voltsdx, -1.10);
Serial.println(distancedx);
delay(100);
float voltssx = analogRead(IRpinsx)*0.0048828125;
float distancesx = 65*pow(voltssx, -1.10);
Serial.println(distancesx);
delay(100);
//********************************************************************************************
}
//-----------------------------------------------------------------------------------------------------------------------
void checkPath() {
int curLeft = 0;
int curFront = 0;
int curRight = 0;
int curDist = 0;
myservo.write(144);
delay(120);
for(pos = 144; pos >= 36; pos-=18)
{
myservo.write(pos);
delay(90);
checkForward();
curDist = readPing();
if (curDist < COLL_DIST) {
checkCourse();
break;
}
if (curDist < TURN_DIST) {
changePath();
}
if (curDist > curDist) {maxAngle = pos;}
if (pos > 90 && curDist > curLeft) { curLeft = curDist;}
if (pos == 90 && curDist > curFront) {curFront = curDist;}
if (pos < 90 && curDist > curRight) {curRight = curDist;}
}
maxLeft = curLeft;
maxRight = curRight;
maxFront = curFront;
}
//----------------------------------------------------------------------------------------------------------------------------
void setCourse() {
if (maxAngle < 90) {turnRight();}
if (maxAngle > 90) {turnLeft();}
maxLeft = 0;
maxRight = 0;
maxFront = 0;
}
//----------------------------------------------------------------------------------------------------------------------------
void checkCourse() {
moveBackward();
delay(500);
moveStop();
setCourse();
}
//----------------------------------------------------------------------------------------------------------------------------
void changePath() {
if (pos < 90) {veerLeft();}
if (pos > 90) {veerRight();}
}
//----------------------------------------------------------------------------------------------------------------------------
int readPing() {
delay(70);
unsigned int uS = sonar.ping();
int cm = uS/US_ROUNDTRIP_CM;
return cm;
}
//----------------------------------------------------------------------------------------------------------------------------
void checkForward() { if (motorSet=="FORWARD") {motor1.run(FORWARD); motor2.run(FORWARD);motor3.run(FORWARD); motor4.run(FORWARD); } }
//----------------------------------------------------------------------------------------------------------------------------
void checkBackward() { if (motorSet=="BACKWARD") {motor1.run(BACKWARD); motor2.run(BACKWARD);motor3.run(BACKWARD); motor4.run(BACKWARD); } }
//----------------------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------------------
void moveStop() {motor1.run(RELEASE); motor2.run(RELEASE);motor3.run(RELEASE); motor4.run(RELEASE);}
//----------------------------------------------------------------------------------------------------------------------------
void moveForward() {
motorSet = "FORWARD";
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2)
{
motor1.setSpeed(speedSet);
motor3.setSpeed(speedSet);
motor2.setSpeed(speedSet+MAX_SPEED_OFFSET);
motor4.setSpeed(speedSet+MAX_SPEED_OFFSET);
delay(5);
}
}
//----------------------------------------------------------------------------------------------------------------------------
void moveBackward() {
motorSet = "BACKWARD";
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2)
{
motor1.setSpeed(speedSet);
motor3.setSpeed(speedSet);
motor2.setSpeed(speedSet+MAX_SPEED_OFFSET);
motor4.setSpeed(speedSet+MAX_SPEED_OFFSET);
delay(5);
}
}
//-----------------------------------------------------------------------------------------------------------------------
void turnRight() {
motorSet = "RIGHT";
motor1.run(FORWARD);
motor3.run(BACKWARD);
motor2.run(BACKWARD);
motor4.run(FORWARD);
delay(400);
motorSet = "FORWARD";
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
//------------------------------------------------------------------------------------------------------------------------
void turnLeft() {
motorSet = "LEFT";
motor1.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(BACKWARD);
motor2.run(FORWARD);
delay(400);
motorSet = "FORWARD";
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
//-------------------------------------------------------------------------------------------------------------------------
void veerRight() {motor2.run(BACKWARD); delay(400); motor2.run(FORWARD);motor4.run(BACKWARD); delay(400); motor4.run(FORWARD);}
//------------------------------------------------------------------------------------------------------------------------
void veerLeft() {motor1.run(BACKWARD); delay(400); motor1.run(FORWARD);motor3.run(BACKWARD); delay(400); motor3.run(FORWARD);}
//--------------------------------------------------------------------------------------------------------------------------
Nel software non so quale variabile contiene la distanza da te citata.
Comunque puoi usare un struttura condizionale if (condizione) { codice da eseguire se la condizione risulta vera }.
Nel tuo caso supponiamo che le variabili sia:maxDist
if (maxDist <= 10) {
// scrivi qui il codice per fare tornare indietro l'auto
}
Ciao.
ok grazie provo
ciao