RaspberryPi mit Pascal IO kann Pin Status nicht ausgeben

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Osmodia
Beiträge: 6
Registriert: Sa 20. Dez 2014, 21:29

RaspberryPi mit Pascal IO kann Pin Status nicht ausgeben

Beitrag von Osmodia »

Hi,
ich beschäftige mich gerade mit dem Auslesen mehrerer GPIO Pins bzw. deren Zustände.
Nach dieser Anleitung funktioniert das auslesen eines Pins wunderbar:
http://wiki.freepascal.org/Lazarus_on_R ... ._PascalIO

Ich versuche mehrere Pins auszulesen und in eine Listbox einzutragen.

Allerdings erhalte ich eine Fehlermeldung:

"Error: Incompatible typ for arg no.1 Got "Boolean", expected "QWord""

Warum kommt die Meldung? Eigentlich ist die Ausgabe doch In oder Out?

Code: Alles auswählen

program Project1;
uses fpgpio;
var
  pin_21: TGpioPin;
  pin_22: TGpioPin;
  pin_23: TGpioPin;
  pin_24: TGpioPin;
[...]
begin
  pin_21 := TGpioLinuxPin.Create(21);
  pin_21.Direction := gdIn;
  pin_22 := TGpioLinuxPin.Create(23);
  pin_22.Direction := gdIn;
  pin_23 := TGpioLinuxPin.Create(23);
  pin_23.Direction := gdIn;
[...]
 
  WriteLn('Pin 21 hat den Wert: ', pin_21.Value); //Original aus dem Beispiel
  pin_21.Destroy;
////////////////////////////////
 ListBox1.Items.AddStrings(IntToStr(pin_21.Value)); // Mein Versuch, den Ausgabewert in eine Listbox einzufügen
 pin_21.Destroy;
 
[...]
 
end.
 
 

Ich kompiliere und schreibe übrigens auf einem Linux_x86 Rechner, da mir Lazarus und das kompilieren auf dem RPi viel zu langsam ist. Das heißt, ich werde wenn das Programm soweit funktioniert, es auf dem RPi kompilieren und einsetzen.
Mit cross-compiling habe ich mich auch schon versucht, allerdings funkionierte das vorne und hinten nicht. Weder auf meinem Linux, noch auf einem Windows Rechner. Daher fällt das aus.

Ich hoffe ihr könnt mir helfen, danke. :roll:

EDIT: Die Ausgabe ist doch kein Integer, sondern Boolean. Mit einem einfachen BoolToStr verschwindet die Fehlermeldung...

EDIT2:

Ich habe das gesamt Projekt 1:1 auf meinen Raspberry kopiert und will kompilieren, da kommt eine Fehlermeldung:
"Error: Incompatible typ for arg no.1 Got "AnsiString", expected "TStrings""

Der Code sieht folgendermaßen aus:

Code: Alles auswählen

 ListBox1.Items.AddStrings(BoolToStr(pin_21.Value));
Wie kann ich einen AnsiString in einen "normalen" String verwandeln?

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: RaspberryPi mit Pascal IO kann Pin Status nicht ausgeben

Beitrag von marcov »

Nutze .add() statt .addstrings()

C hat eine Äquivalenz zwischen Integers und Booleans, wo in Pascal das unterschiedliche Dingen sein.

Man kann das Konvertieren durch xx.Value<>0 statt nur xx.Value zu schreiben.

Osmodia
Beiträge: 6
Registriert: Sa 20. Dez 2014, 21:29

Re: RaspberryPi mit Pascal IO kann Pin Status nicht ausgeben

Beitrag von Osmodia »

Danke, genau das wars. Jetzt funktioniert es "fast" wie ich es mir erhofft habe - ein kleines Problem habe ich jedoch noch, dafür werde ich aber einen extra Thread eröffnen. Danke! :D

Antworten