Hola a todos, tengo un pequeño problema al leer datos en mi raspberry desde un arduino. Tengo instalado un sensor de movimiento y un led en el arduino, de modo que cuando se active el sensor se encienda la luz automáticamente. El código que tengo en arduino es el siguiente:
int led = 13;
int pir = 2;
int estado = 0;
void setup() {
pinMode(led, OUTPUT);
pinMode(pir, INPUT);
Serial.begin(9600);
}
void loop() {
estado = digitalRead(pir);
if (estado == HIGH){
digitalWrite(led, HIGH);
Serial.println(estado);
}
else{
digitalWrite(led, LOW);
Serial.println(estado);
}
delay(3000);
}
Cuando lo ejecuto en el IDE de arduino me imprime un 0 cuando no detecta movimiento y un 1 cuando detecta y enciende la luz, hasta ahí todo bien. En la raspberry creé el siguiente archivo en python:
import serial
import time
ser = serial.Serial('/dev/ttyACM0', 9600)
dato = ser.readline()
while True:
print (dato)
time.sleep(3)
El problema que tengo es que cuando ejecuto el archivo python solo me arroja puros 0, cuando se enciende la luz me muestra un 0 y no se porque está ocurriendo eso. Quizás es algo muy básico que tengo malo pero estoy recién comenzando en esto... Agradecería si alguien me puede indicar que estoy haciendo mal... muchas gracias!
Muchas gracias, lo solucioné pero me surgió otro problema. Cuando quiero hacer un if con el dato que estoy leyendo no me lee el 1. Este es el código:
import serial
import time
ser = serial.Serial('/dev/ttyACM0', 9600)
while True:
dato = ser.readline()
if dato == 1:
print ("Hola")
time.sleep(1)
else:
print ("Chao")
time.sleep(1)
Hola, lo que pasa que cuando haces la comparación comparas un entero, entonces para que funcione tiene que convertir el dato leído a un dato tipo entero, bueno te dejo el código.
import serial
import time
ser = serial.Serial('/dev/ttyACM1', 9600)
while True:
dato = ser.readline()
print (dato)
if (int(dato)==1):
print "UNO"
else:
print "CERO"
time.sleep(1)
Te recomiendo que hagas ese curso de python: http://www.codecademy.com/es/tracks/python
Los problemas que tienen son básicos, y que se aplican en la mayoría de los lenguajes.
Sólo te falta convertir la información recibida a entero:
import serial
import time
ser = serial.Serial('/dev/ttyACM0', 9600)
while True:
dato = ser.readline()
if int(dato) == 1:
print ("Hola")
time.sleep(1)
else:
print ("Chao")
time.sleep(1)