Gordijn water (5 / 6 stap)

Stap 5: Code

SOFTWARE:

Om de PIC18F2445 te treden als een geïntegreerde schakeling, creëerde we een project MPLab met een zogenaamde python script aan de controlefuncties van de klep.

Origineel voorgesteld functie:
Onze oorspronkelijke bedoeling met dit project was om afbeeldingen lezen en vertalen deze in water tegenhangers. We probeerden te vinden afbeeldingen met lage pixelation zodat zij waren opnieuw kunnen worden gemaakt. Om te uploaden en de afbeelding in te stellen als een 8 X 8 raster (sinds onze apparaat acht kleppen) hebben we de python imaging library (PIL) gebruikt om onze dambord jpeg-afbeelding te uploaden.

De Code van de steekproef:

Image importeren
importeren

def loadPic (filename ='checkerboard.jpeg ', drempel = 3, grootte = (50,50)):
im =Image.open('checkerboard.jpeg').show()
x_length, y_length = im.size
afdrukken [x_length, y_length]
x2_length = 2# gaf een willekeurige waarde hier, gewoon zodat dit werkt
y2_length = 2
x1_length = x1_length-x2_length
y1_length = y_length-y2_length

klasse TestTable():
def __init__(self):
self.rowLabels = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
self.colLabels = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]

def GetNumberRows(self):
terug van 10

def GetNumberCols(self):
terug van 10

def IsEmptyCell (zelf, rij, col):
False retourneren

def GetValue (zelf, rij, col):
retourneren 0

def WaardeInstellen (zelf, rij, col, waarde):
Pass

def GetColLabelValue (self, col):
terug self.colLabels[col]

def GetRowLabelValue (self, rij):
terug self.rowLabels[row]

We konden de afbeelding te verdelen in dergelijke een raster terwijl de rijen en kolom tekens toe te wijzen zodat zij kunnen worden verwezen. Dit bepaald dat of een spot(row,column) leeg was (wit) toegewezen we een get.color toewijzing aan te wijzen van de nummer 1 voor zwart en 0 voor wit. Elke vlek zou moeten gaan door middel van een if else-statement te maken van dergelijke toewijzingen.

Een voorbeeld-instructie voor de plek A1. Merk op dat na de toewijzing ook de opdracht is toegewezen. In dit geval de controle over de pin RB0.

De Code van de steekproef:

Als A1==(1,0):
cell_value = 1
afdrukken "white"
SET_RBO = 1
set_rb0_callback()

Elif A1==(0,1):
cell_value = 1
afdrukken "white"
SET_RBO = 1
set_rb0_callback()

Elif A1==(1,1):
cell_value = 1
afdrukken "white"
SET_RB0 = 1
set_rb0_callback()

Elif A1==(0,0):
cell_value = 0
afdrukken "zwart"
clr_rb0_callback()

Deze opdrachten Herhaal voor deze plek en de resterende pinnen RB0-RB7.

Na het verzamelen van de informatie uit de afbeelding hadden we te sturen via de usb naar onze MPLab code. We deden dit met het initialiseren van de USB- en elke opdracht.

De Code van de steekproef:

van Tkinter importeren *
importeren van ctypes

SET_RB0 = 1#self.col_grid[0(cell_value=1)]
CLR_RB0 = 2#self.col_grid[0(cell_value=0)]
SET_RB1 = 3#self.col_grid[1(cell_value=1)]
CLR_RB1 = 4#self.col_grid[1(cell_value=0)]
SET_RB2 = 5#self.col_grid[2(cell_value=1)]
CLR_RB2 = 6#self.col_grid[2(cell_value=0)]
SET_RB3 = 7#self.col_grid[3(cell_value=1)]
CLR_RB3 = 8#self.col_grid[3(cell_value=0)]
SET_RB4 = 9#self.col_grid[4(cell_value=1)]
CLR_RB4 = 10#self.col_grid[4(cell_value=0)]
SET_RB5 = 11#self.col_grid[5(cell_value=1)]
CLR_RB5 = 12#self.col_grid[5(cell_value=0)]
SET_RB6 = 13#self.col_grid[6(cell_value=1)]
CLR_RB6 = 14#self.col_grid[6(cell_value=0)]
SET_RB7 = 15#self.col_grid[7(cell_value=1)]
CLR_RB7 = 16#self.col_grid[7(cell_value=0)]
SET_DUTY = 17

= ctypes.cdll.LoadLibrary('usb.dll')
USB.initialize()

buffer = ctypes.c_buffer(8)

root = Tk()
root.title ("Water gordijn")
FM = Frame(root)

def update_status():
USB.control_transfer (dev, 0xC0, SET_RA8, 0, 0, 1, buffer)
status.configure (tekst = % ord(buffer[0])) 'rb7 is op dit moment % overleden'
root.After (50, update_status)

def set_rb0_callback():
USB.control_transfer (dev, 0x40, SET_RB0, 0, 0, 0, buffer)

def clr_rb0_callback():
USB.control_transfer (dev, 0x40, CLR_RB0, 0, 0, 0, buffer)

def set_rb1_callback():
USB.control_transfer (dev, 0x40, SET_RB1, 0, 0, 0, buffer)

def clr_rb1_callback():
USB.control_transfer (dev, 0x40, CLR_RB1, 0, 0, 0, buffer)

def set_rb2_callback():
USB.control_transfer (dev, 0x40, SET_RB2, 0, 0, 0, buffer)

def clr_rb2_callback():
USB.control_transfer (dev, 0x40, CLR_RB2, 0, 0, 0, buffer)

def set_rb3_callback():
USB.control_transfer (dev, 0x40, SET_RB3, 0, 0, 0, buffer)

def clr_rb3_callback():
USB.control_transfer (dev, 0x40, CLR_RB3, 0, 0, 0, buffer)

def set_rb4_callback():
USB.control_transfer (dev, 0x40, SET_RB4, 0, 0, 0, buffer)

def clr_rb4_callback():
USB.control_transfer (dev, 0x40, CLR_RB4, 0, 0, 0, buffer)

def set_rb5_callback():
USB.control_transfer (dev, 0x40, SET_RB5, 0, 0, 0, buffer)

def clr_rb5_callback():
USB.control_transfer (dev, 0x40, CLR_RB5, 0, 0, 0, buffer)

def set_rb6_callback():
USB.control_transfer (dev, 0x40, SET_RB6, 0, 0, 0, buffer)

def clr_rb6_callback():
USB.control_transfer (dev, 0x40, CLR_RB6, 0, 0, 0, buffer)

def set_rb7_callback():
USB.control_transfer (dev, 0x40, SET_RB7, 0, 0, 0, buffer)

def clr_rb7_callback():
USB.control_transfer (dev, 0x40, CLR_RB7, 0, 0, 0, buffer)

def set_duty_callback(value):
USB.control_transfer (dev, 0x40, SET_DUTY, int(value), 0, 0, buffer)

Nu was het probleem dat wij vanaf dit punt op dat we niet konden Bel een complexe verzameling pinnen met een timer-verzoek dat niet cyclisch. We waren in staat om onze eigen eenvoudige afbeeldingen gebruikt fundamentele herhaalde vertragingen die draaide van kleppen, in- en uitschakelen, maar niemand die kan deelnemen aan de ingangen van het raster te maken. Daarom hebben wij niet in staat om complexe beelden te compileren. Dus veranderd we cursus om te maken eenvoudige beelden die kunnen worden omgezet in functie van de klep.

Nieuwe Software doel

De nieuwe missie van onze software moest nemen eenvoudige beelden dat kunnen worden gecontroleerd met de cyclus van een vertraging.

Importeren de juiste python bibliotheken en waarde moeten worden gelezen in MPLab toewijzen.

De Code van de steekproef:

van Tkinter importeren *
importeren van ctypes

##TEXTBOX_VAL = 17
##CLR_LED = 18
SET_DUTY = 17
STIP = 18
LIJN = 19
DAMBORD = 20
HALF_HALF = 21

Initialiseren USB.

USB = ctypes.cdll.LoadLibrary('usb.dll')
USB.initialize()

buffer = ctypes.c_buffer(8)

Define wilde beelden die wordt uitgevoerd onder de timer-cyclus.

def dot_callback():
USB.control_transfer (dev, 0x40, DOT, 0, 0, 0, buffer)

def line_callback():
USB.control_transfer (dev, 0x40, lijn, 0, 0, 0, buffer)

def checkerboard_callback():
USB.control_transfer (dev, 0x40, DAMBORD, 0, 0, 0, buffer)

def halfhalf_callback():
USB.control_transfer (dev, 0x40, HALF_HALF, 0, 0, 0, buffer)

def set_duty_callback(value):
USB.control_transfer (dev, 0x40, SET_DUTY, int(value), 0, 0, buffer)

def update_status():
root.After (50, update_status)

Maak een knop tekst vak zodat we kunnen bepalen welke afbeeldingen kunnen weergegeven op welk tijdstip (aka de knop te drukken!)

De Code van de steekproef:

root = Tk()
root.title('ProjectButtons')
FM = Frame(root)
##my_textbox = Entry(fm)
##my_textbox.pack(side = LEFT)
## Button(fm, text = 'GO!', command = send_textbox_val).pack (zijde = LEFT)
## Button(fm, text = 'CLR', command = CLR_display).pack (zijde = rechts)
Button(FM, Text = 'DOT', Command = dot_callback).Pack (zijde = rechts)
Button(FM, Text = 'LINE', Command = line_callback).Pack (zijde = rechts)
Button(FM, Text = 'CHECKERBOARD', Command = checkerboard_callback).Pack (zijde = rechts)
Button(FM, Text = 'HALF and HALF', Command = halfhalf_callback).Pack (zijde = rechts)
FM.Pack(Side = Top)
dutyslider = schalen (root, from_ = 0, to = 255, oriënteren = horizontaal, showvalue = onwaar, opdracht = set_duty_callback)
dutyslider.set(128)
dutyslider.Pack(Side = Top)

Schrijf in een fout als het USB-apparaat is niet gevonden.

De Code van de steekproef:

dev = usb.open_device (0x6666, 0x0003, 0)
als dev < 0:
afdrukken "Geen overeenkomende apparaat found...\n"
anders:
RET = usb.control_transfer (dev, 0x00, 0x09, 1, 0, 0, buffer)
Als ret < 0:
Print "Unable to Stuur SET_CONFIGURATION standaard verzoek. \n"
root.After (50, update_status)
root.mainLoop()
USB.close_device(dev)

Nu aan de MPLab code. We gebruiken een standaard USB-leverancier verzoekprogramma, maar we moeten alle opdrachten in het begin definiëren.

#define SET_RB0 0x01 / / leverancier-specifieke vragen te stellen (dat wil zeggen, zorg hoog) RA0
#define CLEAR_RB0 0x02 / / leverancier-specifieke vragen te stellen (dat wil zeggen, maken; lage) RA0
#define SET_RB1 0x03 / / leverancier-specifieke vragen te stellen (dat wil zeggen, zorg hoog) RA1
#define CLEAR_RB1 0x04 / / leverancier-specifieke vragen te stellen (dat wil zeggen, zorg lage) RA1
#define SET_RB2 0x05 / / leverancier-specifieke vragen te stellen (dat wil zeggen, zorg hoog) RA2
#define CLEAR_RB2 0x06 / / leverancier-specifieke vragen te stellen (dat wil zeggen, zorg lage) RA2
#define SET_RB3 0x07 / / leverancier-specifieke vragen te stellen (dat wil zeggen, zorg hoog) RA3
#define CLEAR_RB3 0x08 / / leverancier-specifieke vragen te stellen (dat wil zeggen, zorg lage) RA3
#define SET_RB4 0x09 / / leverancier-specifieke vragen te stellen (dat wil zeggen, zorg hoog) RB4
#define CLEAR_RB4 0x0A / / leverancier-specifieke vragen te stellen (dat wil zeggen, zorg lage) RB4
#define SET_RB5 0x0B / / leverancier-specifieke vragen te stellen (dat wil zeggen, zorg hoog) RB5
#define CLEAR_RB5 0x0C / / leverancier-specifieke vragen te stellen (dat wil zeggen, zorg lage) RB5
#define SET_RB6 0x0D / / leverancier-specifieke vragen te stellen (dat wil zeggen, zorg hoog) RB6
#define CLEAR_RB6 0x0E / / leverancier-specifieke vragen te stellen (dat wil zeggen, zorg lage) RB6
#define SET_RB7 0x0F / / leverancier-specifieke vragen te stellen (dat wil zeggen, zorg hoog) RB7
#define CLEAR_RB7 0x10 / / leverancier-specifieke vragen te stellen (dat wil zeggen, make-l0w) RB7
#define TEXTBOX_VAL 0x11 / / leverancier-specifieke verzoek om in te stellen van de 7 segment LED
#define CLR_LED 0x12 / / leverancier-specifieke verzoek om 7 segment LED
#define SET_DUTY 0x11
#define DOT 0x12
#define lijn 0x13
#define DAMBORD 0x14
#define HALF_HALF 0x15

Vervolgens kunnen wij door onze leverancier schrijfaanvragen voor de USB. Het volgende is een verzoek voor RB0 met de start van de gehele functie.

VOID VendorRequests(void) {}
schakelaar (USB_buffer_data[bRequest]) {}
Case SET_RB0:
PORTBbits.RB0 = 1; RA0 hoog instellen
BD0I.byteCount = 0x00; EP0 IN byte graaf ingesteld op 0
BD0I.status = 0xC8; verzenden van pakket als gegevens1, instellen UOWN bit
breken;

We deden dit voor elke pin RB0-RB7 om ons te kunnen testen en de middelen voor het opsporen van fouten vergemakkelijken.

In het creëren van beelden zoals het dambord begonnen we op dezelfde manier als een specifieke pin-vragen, maar wij de op en off van de kleppen met 0 en 1 (elk getal naar een van de acht pennen) toegewezen. Hierdoor het meervoudig gebruik van gelijktijdige pin operaties.

De Code van de steekproef:

Case SET_DUTY:

PLICHT = USB_buffer_data [wValue];
BD0I.byteCount = 0x00; EP0 IN byte graaf ingesteld op 0
BD0I.status = 0xC8; verzenden van pakket als gegevens1, instellen UOWN bit

Case DAMBORD:

PORTB = 0b11001100;
Delay10KTCYx(10);
PORTB = 0b00000000;

terwijl (1) {}

Temp = TMR0L; klink de hooggeplaatste byte van de teller van Timer0 in TMR0H door het lezen van TMR0L

Bij deze script wijzigingen we voor detail uit een programma dat vertalen raster beelden konden kan tot water weergegeven.

* Zie hieronder voor de feitelijke code.

Gerelateerde Artikelen

Hebben een gratis douchegordijn van schimmel in uw badkuip

Hebben een gratis douchegordijn van schimmel in uw badkuip

is niet alleen een mal gratis douchegordijn mogelijk, het is gemakkelijk!Stap 1: Wat moet je1 - een kleine haak te hechten aan de muur boven het bad.  Dit kan een beetje plastic 'sticky' haak hebt u gladde stenen muren, of een zuignap haak als u glad
Snelle en gemakkelijke Rafter gemonteerd wiel fietsenstalling

Snelle en gemakkelijke Rafter gemonteerd wiel fietsenstalling

mijn winkel geweest uit de hand voor een tijdje, fiets projecten overal moest ik stap over stukjes en beetjes hier en daar, ik vond mezelf moetend scrounge en retrocessie delen ik wist dat ik maar niet kon vinden in de rommel. Ik eindelijk het beslui
Gemotoriseerde Pulldown gordijn (telefoon & radiografisch bestuurbare)

Gemotoriseerde Pulldown gordijn (telefoon & radiografisch bestuurbare)

Ik trek mijn gordijn op en neer een paar keer per dag. Als ik kijk naar Trek een film die ik het pull-down, en dan, ik hem tot krijgen betere verlichting. Ik trek het ook omlaag wanneer ik ga slapen en ik trek het weer als ik wakker word. Ik wil dit
Een gordijn van licht

Een gordijn van licht

Het is donker buiten deze tijd van het jaar hier in Zweden en de planten in mijn raam hunkeren naar extra licht. Dit was toen ik kwam met het idee om een smalle gordijn van licht van het bovenstaande, dat zou alleen oplichten van de planten maar niet
DIY: Gordijn houder / binden terug broche

DIY: Gordijn houder / binden terug broche

Alle van ons hebben gedacht van het vinden van een soort van een clip of een broche te binden weer een aantal van onze huis gordijnen tijdens winderige avonden, juiste? Ik dacht dat ik kon maken ons leven makkelijker door de houder van een gordijn te
Zeevah van Elite Doggie zwembad / Water Bowl / Bird Bad

Zeevah van Elite Doggie zwembad / Water Bowl / Bird Bad

als uw hond(en) graag zwemmen in warm weer, dit is de perfecte combinatie zwembad / kom water voor u! Dit is mijn vaders project - we afgerond het tussen de twee van ons zaterdag in ongeveer een half uur.Alleen mijn vader zou denken van dit...Voor di
Arduino-gecontroleerde gordijn roller

Arduino-gecontroleerde gordijn roller

Dit project is een beetje anders dan wat we tot nu toe hebben gedaan aangezien u wilt aanbrengen de stand en het handvat voor het gordijn.In de video ziet u hoe wij het en we gebruikte materialen gemaakt, maar het is echt iets dat u kunt samenbrengen
Geautomatiseerde gordijn met behulp van intel Edison & thethings. IO

Geautomatiseerde gordijn met behulp van intel Edison & thethings. IO

Keer gaat door en dingen krijgen oud en dus, ze eindelijk breken. Jaloezieën zijn een uitzondering niet.Dit is een van de redenen waarom we het kopen van gordijnen. Niet alleen voor esthetica maar ook voor het filtreren van de hoeveelheid licht in on
Oorspronkelijke ontwerp gordijn met bladeren

Oorspronkelijke ontwerp gordijn met bladeren

Deze bladeren waren knipsels uit restanten van een andere set van gordijnen. Met behulp van die, en toe te voegen wat creativiteit, was ik in staat om een reeks bij elkaar passende gordijnen voor mijn slaapkamer die hing over mijn windows dormer over
Schimmel-gratis (voor real) douche gordijn houwer

Schimmel-gratis (voor real) douche gordijn houwer

Hoewel de gordijnen van de douche zijn vaak geadverteerd als "vrij van schimmel", is het slechts een kwestie van tijd voordat de vervelende rommel zelf een nieuw huis maakt. Dit instructable brengt u door het proces van het verlengen van de leve
Up-cyclus gordijn/raam behandelingen om een zwembad te passen dekking jurk (patroon opgenomen)

Up-cyclus gordijn/raam behandelingen om een zwembad te passen dekking jurk (patroon opgenomen)

Hebt u een lichte gewicht oud gordijn of raambekleding, neem gooi het niet weg. In plaats daarvan geef het een goede cleaninging, knip het verzwakt weefsel (de meeste van de tijd in de trant van sew) en laten sommige ontzagwekkende zwembad kant cover
Gordijn van de pop-Tab / venster kralen

Gordijn van de pop-Tab / venster kralen

na het realiseren van hoeveel pop van mijn familie en ik drink per maand, ik dacht dat ik zou doen iets creatiefs met alle pop tabbladen die komen off van onze blikjes. Hier zal ik u tonen hoe te maken van een deur-kraal stijl venster gordijn.Let op:
Quix douche gordijn Fix

Quix douche gordijn Fix

InleidingIs uw douchegordijn verzakking?  Is uw vloer soppende NAT? U kunt zeker uw douchegordijn oplossen met plakband.  Maar, is hier een minimalistische suggestie voor een snelle douche gordijn fix.  Met slechts 1 tool en 3-5 minuten van de werkti
Hoe te recyclen om het even wat en Vermijd het gebruik van stortplaatsen

Hoe te recyclen om het even wat en Vermijd het gebruik van stortplaatsen

U hebt waarschijnlijk gehoord dat het een miljoen keer al - verminderen, hergebruiken, recycleren. Of verzamelen, recycleren, hergebruiken. Ja, het is belangrijk. Waarom, kun je vragen? Omdat het bespaart middelen. Het bespaart bomen, metalen, zuurst