06. juli 2015 - 20:04Der er
5 kommentarer og 1 løsning
ARDUINO -- USB // SERIAL
HEJ,
Indledningsvis: Jeg ved ikke om dette spørgsmål retteligen hører til i Delphi-gruppen , men jeg prøver her (og flytter hvis jeg er gal på den):
Min 14 årige søn har købt en Arduino Uno. Den er han meget tilfreds med.
Nu er han ikke en ørn til C (eller C++) og det er jeg heller ikke. Men hidtil har han med større eller mindre vejledning (eller vildledning !) fra min side fået hans projekter til at fungere som han ønsker det.
Men i går kom han med et nyt spørgsmål:
"Er det muligt at skrive en kommunikations-rutinen til Arduino'en i Delphi ?"
Jeg ved at svaret er klart JA, men de praktiske detaljer er ukendte...
Så er der nogen i dette forum, som kan hjælpe ?
(Vi har set på arduino.com men det er ikke særlig godt beskrevet (for overfladisk og uden væsentlige detaljer om USB-protokollen og er (selvfølgelig) skrevet i C ).
Vil bruge dagen i dag til at kigge lidt på det her og se om det vil funke. Kender lidt til den anvendte komponent (Delphi), så det skulle funke.
Og begynde at fifle med protokoller ( = UF, UF og atter UF), og det ville være tåbeligt, hvis high-level komponenter fungerer... (Vi skal ikke være dataloger på universitets-niveau.. !)
Men, det er jo "kun" til at kommunikeret til en COM-port driver, lige som Windows programmet HyperTerminal, som Arduino IDE også har sin Terminal, til at modtage print-output fra selve Arduino.
Hvis du forsøger at erstatte Arduino IDE med Delphi, er vi ovre i en hel anden boldgade. Internt kører Arduino en bootloader, som kun skal modtage det compilerede program fra Arduino IDE når du uploader og starte programmet op. Der har du en protokol, som jeg ikke lige er stødt på endnu, men den må være i sourcen til Arduino IDE, og så er det C/java kode.
Der findes Arduino plugins til forskelige IDE´s f.eks Microsoft Visual Studio - hvis det er den `grønne´ arduino IDE du vil undgå. Der findes muligvis også desideret plugin til Delphi IDE, men jeg husker ikke om jeg testede den.
Læste lige spørgsmålet igen: "Er det muligt at skrive en kommunikations-rutinen til Arduino'en i Delphi ?"
Nej! Arduino C/Java er et meget begrænset sprog, tilpasset de muligheder man har med en Arduino, så compileren forstår kun denne afart af Java. Delhi er meget mere omfattende og der skal laves en speciel Delphi/Arduino compiler eller fortolker. Sådan én har jeg ikke set endnu og så svært er java altså heller ikke, hvis man allerede kan programmere i Delphi.
Har prøvet at bruge det i #2 skitserede program. Det virker.
Vores problem er imidlertid 2-sidet.
Den består af en DELPHI-('C/C++/Java PC Arduino ')-siden og så selve ATMEga 328 -siden.
AT få Delphi til at agere "snyde"-USB via COM X og sende Delphi-compilerede data til ARD'en er nemt nok, når driveren er installeret. Lidt ændringer i Delphi / TCOM applicationen (så den ikke defaulter til en ikke eksisterende USB/COM port ) men "pænt" må vente til den er fundet i TCOM. Osg så starte applicatiionen og sende / modtage data til/fra selve ARD-hardwaren.
Og lade softwaren i ARD*en reagere (forhåbentlig korrekt) på output fra Delphi.
Jeg ved at for at lade ARD-hardwaren kunne modtage Delphi-genereret ASSEMBler (ATMega 328 asm) er der mange betingelser, som skal være opfyldt. Hvis vi ønsker at gå så vidt (næppe troligt - for det er ikke det vores overordnede formål er) er der protokoller, hardware-beskrivelser- interrupts og meget andet, som skal passe sammen - og vi vil gerne være færdige inden jul (hehe).
Formålet var at kunne kontrollere ARDen (4 stepper-motorer koblet på en lidt specielt måde // 4 bit databus til 4 externe latches - til stepper-motorerne drevet af ULN 2003 - , 2 pins adresse-select og lidt styring af strobe, Output enable og LATCH) fra DELPHI og det er (principielt) opfyldt.
Koden i ARDEN laver vi i C_Java (og må eksperimentere os frem til en løsning). Har vi problemer her skal I nok høre om det... (hehe).....
Det lyder rigtigt :-) Hvis du graver dig ned i TCom kildekoden, vil du se at det "bare" er windows API kald til alm. fil funktioner som Create/open/read/write etc. bare på en COM port. Men det har altid været lidt drilsk i Windows med den COM-port som ikke altid reagere og skal aflæses (polles) hele tiden for indput fra Arduino, det er ikke med hardware interupt lige som musen og keybrd, så hut jeg visker!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.