Como hago que el ultrasónico mande los datos al Arduino y este los lea para mover unos motores sin tener que yo poner el valor, me pide que mande a mano el texto y nose como hacer que la lectura del ultrasoco se mande directamente y sea leído , 覆盆子上的 mi código
import time
import serial
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
pulse_start = 0
comando = "0"
TRIG = 23
ECHO = 24
ser = serial.Serial("/dev/ttyACM0", baudrate=9600) #Modificar el puerto serie de ser necesario
GPIO.setup(TRIG,GPIO.OUT)
GPIO.setup(ECHO,GPIO.IN)
GPIO.output(TRIG, False)
try:
while True:
GPIO.output(TRIG, False)
print ("Waiting For Sensor To Settle")
time.sleep(2)
GPIO.output(TRIG, True)
time.sleep(0.00001)
GPIO.output(TRIG, False)
while GPIO.input(ECHO)==0:
pulse_start = time.time()
while GPIO.input(ECHO)==1:
pulse_end = time.time()
pulse_duration = pulse_end - pulse_start
distance = pulse_duration * 17150
distance = round(distance, 2)
print (distance)
if (distance <= 4):
comando = comando + "\n"
comandoBytes = comando.encode()
ser.write(comandoBytes)
time.sleep(0.1)
read = ser.write('4')
print(read)
except KeyboardInterrupt:
print("\nInterrupcion por teclado")
except ValueError as ve:
print(ve)
print("Otra interrupcion")
finally:
ser.close()
我在 Arduino 上的代码
char a;
String inputString = "";
bool stringComplete = false;
#include <AFMotor.h>
AF_DCMotor motorda(1);
AF_DCMotor motord(2);
AF_DCMotor motori(3);
AF_DCMotor motoria(4);
void setup(){
motorda.run(RELEASE);
motord.run(RELEASE);
motori.run(RELEASE);
motoria.run(RELEASE);
inputString.reserve(200);
Serial.begin(9600);
}
void loop(){
if (stringComplete){
if(inputString.equals("off")){
motorda.setSpeed(0);
motord.setSpeed(0);
motoria.setSpeed(0);
motori.setSpeed(0);
Serial.println("Apagado");
}
else if (inputString.equals("on")){
avanzar();
Serial.println("Encendido");
}
inputString = "";
stringComplete = false;
}
}
void giroder(){
motorda.run(BACKWARD);
motorda.setSpeed(80);
motord.run(BACKWARD);
motord.setSpeed(150);
motoria.run(FORWARD);
motoria.setSpeed(150);
motori.run(FORWARD);
motori.setSpeed(90);
}
void giroizq(){
motorda.run(FORWARD);
motorda.setSpeed(180);
motord.run(FORWARD);
motord.setSpeed(180);
motoria.run(BACKWARD);
motoria.setSpeed(180);
motori.run(BACKWARD);
motori.setSpeed(180);
}
void avanzar(){
motorda.run(FORWARD);
motorda.setSpeed(80);
motord.run(FORWARD);
motord.setSpeed(150);
motori.run(FORWARD);
motori.setSpeed(150);
motoria.run(FORWARD);
motoria.setSpeed(150);
}
void retroseder(){
motorda.run(BACKWARD);
motorda.setSpeed(180);
motord.run(BACKWARD);
motord.setSpeed(180);
motori.run(BACKWARD);
motori.setSpeed(180);
motoria.run(BACKWARD);
motoria.setSpeed(180);
}
void serialEvent(){
while (Serial.available()) {
char inChar = (char)Serial.read();
if (inChar == '\n'){
stringComplete = true;
}
else{
inputString += inChar;
}
}
}
que el valor que lea el ultrasoco haga que funcionen los codigos del arduino