Problem ze sterowaniem GPIO.

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
ODPOWIEDZ
Awatar użytkownika
kolijk
Starszy majsterkowicz
Posty: 294
Rejestracja: 22 lut 2016, 19:25

Problem ze sterowaniem GPIO.

Post autor: kolijk » 18 lip 2016, 13:42

Witam czemu mi się obrazek nie prusza się jeżeli załącze wybrany pin do GND?

Kod: Zaznacz cały

# -*- coding: utf-8 -*-
import pygame, sys,os
import time
import os
import RPi.GPIO as GPIO
from pygame.locals import *

GPIO.setmode(GPIO.BCM)

GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(25, GPIO.IN, pull_up_down=GPIO.PUD_UP)

pink_x = 100
pink_y = 100
girl_x = 50
girl_y = 50
x = 1

pygame.init() 
                       
screen = pygame.display.set_mode((200, 200))
screen.fill((255, 255, 255))
pygame.display.set_caption('Witaj, pygame')

pink = pygame.image.load('pinkgirl.png').convert()
princess = pygame.image.load('princess.png').convert()
screen.blit(pink, (pink_x, pink_y))
screen.blit(princess, (girl_x, girl_y))

pygame.display.update()

time.sleep(5)

while True:
   if x == 1:
      while x == 1:
         if GPIO.input(18) == False:
                       girl_x +1
         if GPIO.input(23) == False:
                       girl_x -1 
         if GPIO.input(24) == False:
                       girl_y +1 
         if GPIO.input(25) == False:          
                       girl_y -1
"Większość programistów programuje nie dlatego, że spodziewają się zapłaty lub uwielbienia tłumów, ale dlatego, że programowanie jest dla nich zabawą." - Linus Torvalds

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Awatar użytkownika
ethanak
Złota rączka
Posty: 764
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Problem ze sterowaniem GPIO.

Post autor: ethanak » 18 lip 2016, 13:47

A w którym miejscu zmieniasz np. wartość girl_x?
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
stiven
Złota rączka
Posty: 1581
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: Problem ze sterowaniem GPIO.

Post autor: stiven » 18 lip 2016, 15:30

Wygląda na to, że zmiana wartości jest, w pętli nieskończonej, ale wyświetlanie nie jest w tej pętli zawarte, więc nic się nie zmienia na ekranie.
To tak jakby w arduino w setup dać wyświetlenie zmiennej na wyświetlacz, a w loop zmieniać wartość tej zmiennej i oczekiwać, że na wyświetlaczu potem ta wartość też będzie wyświetlana zmieniona.
stiven
Złota rączka
Posty: 1581
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: Problem ze sterowaniem GPIO.

Post autor: stiven » 18 lip 2016, 15:47

A to bez sensu. Ale ogólnie to nie jest problemem w działaniu programu, bo tam ma być pętla nieskończona. Jak się programuje mikrokontrolery w czystym C, to tak samo się robi, to co ma być wykonane raz na początku programu, to się pisze przed pętlą nieskończoną while(true), a to co już ma być wykonywane cały czas w kółko, to wrzuca się do tej pętli nieskończonej. W arduino jest to zrobione przez loop(), ale w rzeczywistości to też jest while(true). Nie jestem pewien, gdyby nie pętla nieskończona, to albo by program się skończył i nic by się nie działo, albo zaczynałby się cały czas od samego początku.
Awatar użytkownika
kolijk
Starszy majsterkowicz
Posty: 294
Rejestracja: 22 lut 2016, 19:25

Re: Problem ze sterowaniem GPIO.

Post autor: kolijk » 18 lip 2016, 16:59

Jak miałem napisany kod to miałem black screena

Kod: Zaznacz cały

# -*- coding: utf-8 -*-
import pygame, sys,os
import time
import os
import RPi.GPIO as GPIO
from pygame.locals import *

GPIO.setmode(GPIO.BCM)

GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(25, GPIO.IN, pull_up_down=GPIO.PUD_UP)

pink_x = 100
pink_y = 100
girl_x = 50
girl_y = 50
x = 1

pygame.init() 
                       
screen = pygame.display.set_mode((200, 200))
screen.fill((255, 255, 255))
pygame.display.set_caption('Witaj, pygame')

pink = pygame.image.load('pinkgirl.png').convert()
princess = pygame.image.load('princess.png').convert()
screen.blit(pink, (pink_x, pink_y))
screen.blit(princess, (girl_x, girl_y))

time.sleep(5)

while True:
   if x == 1:
      while x == 1:
         if GPIO.input(18) == False:
                       girl_x +1
         if GPIO.input(23) == False:
                       girl_x -1 
         if GPIO.input(24) == False:
                       girl_y +1 
         if GPIO.input(25) == False:          
                       girl_y -1

pygame.display.update()
"Większość programistów programuje nie dlatego, że spodziewają się zapłaty lub uwielbienia tłumów, ale dlatego, że programowanie jest dla nich zabawą." - Linus Torvalds
stiven
Złota rączka
Posty: 1581
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: Problem ze sterowaniem GPIO.

Post autor: stiven » 18 lip 2016, 17:06

Z tego co się zorientowałem, to w pythonie zasięg pętli jest wyznaczany przez wcięcia, więc ta ostatnia linijka jest poza nią i nigdy nie zostanie wykonana. Źle to zapisałeś. Poza tym ta jedna linijka to i tak za mało, jeszcze na pewno będzie potrzebna ta ze współrzędnymi.
Awatar użytkownika
ethanak
Złota rączka
Posty: 764
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Problem ze sterowaniem GPIO.

Post autor: ethanak » 18 lip 2016, 17:09

Nawet gdyby pętla była prawidłowa (a nie jest) to i tak wyrażenie "a +1" nie zmienia wartości a.
Od tego chciałem zacząć aleście mnie ubiegli :(
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
stiven
Złota rączka
Posty: 1581
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: Problem ze sterowaniem GPIO.

Post autor: stiven » 18 lip 2016, 17:19

No też prawda. Trzeba tak jak w C, girl_x = girl_x +1 albo girl_x +=1. I wrzucanie tych dwóch linijek do while, o których pisałem, to chyba będzie za mało, bo pewnie zniknie to, co było wyświetlone wcześniej. Chyba trzeba wszystko dać do tej pętli co jest po pygame.init(), poza tymi linijkami z convert() na końcu.
Awatar użytkownika
ethanak
Złota rączka
Posty: 764
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Problem ze sterowaniem GPIO.

Post autor: ethanak » 18 lip 2016, 17:24

Nigdzie nie ma przekazania nowej wartości do procedury rysującej display...
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
ODPOWIEDZ

Strony partnerskie: