2015-11-02 2 views
0

Я узнаю о интерфейсах на Python Tkinter. Я тестировал перед отправкой случайных чисел из моего arduino в свой интерфейс Python, он работал (он постоянно обновляется), поэтому я думал, что он будет работать при отправке данных с датчика, но это не так.Невозможно обновить данные датчика в Python (Tkinter) от датчиков arduino

Итак, это тестовый код, если я нажимаю кнопку, мне нужно будет отправить 3 переменных с номером 1, а если нет, я получу 2 переменных с номером 2 и одной случайной переменной ,

Итак, я никогда не получаю значения, которые я должен получить при нажатии кнопки. Я всегда получаю: случайное число, 2 и 2.

Arduino:

void setup() { 
    Serial.begin (9600); 
    pinMode(i_presion, INPUT); 
} 

void loop() 
{ 
if(digitalRead(i_presion) == HIGH) 
    { 
    Serial.print(1); 
    Serial.print(" "); 
    Serial.print(1); 
    Serial.print(" "); 
    Serial.print(1); 
    Serial.print(" "); 
    } 
else 
{ 
    Serial.print(random(3,8)); 
    Serial.print(" "); 
    Serial.print(2); 
    Serial.print(" "); 
    Serial.print(2); 
    Serial.print(" "); 
    } 
} 

Python:

import serial 
import time 
from Tkinter import * 
root = Tk() 
ser = serial.Serial("/dev/cu.usbmodem1411", 9600, timeout=1) 

flagCharacter = 'k' 

canvas = Canvas(root, width=1920, height=1080) 
canvas.pack() 

photo = PhotoImage(file= r"ANDREA-FIORI2.gif") 
label=Label(root, image=photo) 
photo = PhotoImage(file= r"ANDREA-FIORI2.gif") 
canvas.pack(side='top', fill='both', expand='yes') 
canvas.create_image(0, 0, image=photo, anchor='nw') 



def sensores(planeado, producido, alertas): 

    canvas.create_text(390, 430, text=planeado, fill="gray", font="Helvetica 100 bold",tag="T1") 
    canvas.create_text(650, 430, text=producido, fill="gray", font="Helvetica 100 bold",tag="T2") 
    canvas.create_text(900, 430, text=alertas, fill="gray", font="Helvetica 100 bold",tag="T3") 

    #root.after(1000,sensores) 

def borrar(): 
    canvas.delete("T1") 
    canvas.delete("T2") 
    canvas.delete("T3") 

def do_update(): 
    ser.write(flagCharacter) 
    borrar() 
    allitems=ser.readline(6) 
    x, y, z = allitems.split() 
    sensores(x, y, z) 
    root.after(1000, do_update) 

do_update() 
root.mainloop() 

Любые идеи о том, почему он обновляет функцию случайного, а не информация из моего датчики?

+0

Вы проделали какую-либо отладку, например, вставив инструкцию печати в 'sensores', чтобы убедиться, что она получает значения, которые, по вашему мнению, они должны получать? –

+0

@BryanOakley Я только что увидел выход arduino на серийном окне и использовал print x, y, z после allitems = ser.readline (6). И они получают правильные ценности. Но он не обновляет значения на canvas.create_text –

+0

@BryanOakley Я нашел что-то интересное, он просто передает правильную информацию, когда серийное окно arduino открыто. Для меня это не имеет никакого смысла, но работает. Вы знаете, почему? –

ответ

0

Я уверен, что если вы измените этот

pinMode(i_presion, INPUT); 

В этот

pinMode(i_presion, INPUT_PULLUP); 

Он начнет работать ....

Причина заключается в том, что вы не тянет когда кнопка не нажата.

Или, по крайней мере, это является наиболее распространенной причиной ...

Я никогда не получить значения, которые я должен получить при нажатии на кнопку. Я всегда получаю: случайное число, 2 и 2

... проблема.

+0

Но сообщение, которое я отправляю, зависит от датчика, но это не информация датчика. –

+0

Извините, но ЧТО это «датчик»? В вашем коде я могу видеть только кнопку и некоторые данные, которые вы были вынуждены быть 1 или 2 и случайными. Датчик отсутствует. – frarugi87

Смежные вопросы