ftduino und Free Pascal

Community-Firmware (cfw), Selbstbaucontroller (TX-Pi, ftduino, usw.), usw.
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
schröttel
Beiträge: 18
Registriert: 22 Sep 2022, 19:50

ftduino und Free Pascal

Beitrag von schröttel » 05 Apr 2024, 17:24

Hallo Leute,
ich versuche aus einem Free Pascal Programm Daten mit dem ftduino auszutauschen. Mit einer Vorlage aus dem Netz habe ich einen Teilerfolg erzielt.
Hier die Programme:

Code: Alles auswählen

#include <Arduino_BuiltIn.h>

#include <FtduinoSimple.h>
char ch;
int counter;
void setup() {
  Serial.begin(115200);
  pinMode(LED_BUILTIN,OUTPUT);
}

void loop() {
  counter = Serial.available();
  if (counter>0){
    digitalWrite(LED_BUILTIN,HIGH);
    Serial.print(counter);
    delay(100);
    ch=Serial.read();
    if ((ch>=97) and (ch<=122)){
      ch-=32;
    }
    Serial.print("Das kommt vom ftduino:");
    Serial.println(ch);}
  else {digitalWrite(LED_BUILTIN,LOW);
  }
  }

Code: Alles auswählen

program ftarduinocom;
uses
 serial,  // Für Serielle-Kommunikation.
 Crt;    // Für Tastatur-Eingabe und Delay.
var
 serHandle: TSerialHandle; // Handle für COM-Port.
 ch: char;

begin
 serHandle := SerOpen('COM4'); // Bei Windows 'COMx' // COM-Port öffnen.
 SerSetParams(serHandle, 115200, 8, NoneParity, 1, []);

 repeat
   ch := ReadKey;
   write(ch);
   if ch >= #32 then begin
     write(SerWrite(serHandle, ch, 1)); // Zeichen senden.
     ch := #0;                   // Zeichen auf #0 setzen.
     Delay(10);                  // Kleine Verzögerung.
     write(SerRead(serHandle, ch, 1));  // Zeichen empfangen.
     Write(ch);                  // Zur Überprüfung auf Bildschirm ausgeben.
   end;
 until ch = #27;                 // Bei <ESC> abbrechen.

 SerClose(serHandle);            // COM-Port schliessen.
end.
Über den Monitor in der Arduino IDE funktioniert alles wie es soll.
Wenn ich allerdings aus dem Pascal Programm ein Zeichen sende, geht kurz die LED am Arduino an weil ein Zeichen im Puffer ist, aber es wird kein Zeichen gelesen und anschließend auch nichts zurück in nach Pascal übertragen.
Zuletzt geändert von schröttel am 05 Apr 2024, 20:51, insgesamt 1-mal geändert.

juh
Beiträge: 908
Registriert: 23 Jan 2012, 13:48

Re: ftduino und Free Pascal

Beitrag von juh » 05 Apr 2024, 20:13

Hallo schröttel,
kannst du das mal in code-tags (4. icon von links) packen und nähere Infos zum Aufbau ergänzen?
vg
Jan

schröttel
Beiträge: 18
Registriert: 22 Sep 2022, 19:50

Re: ftduino und Free Pascal

Beitrag von schröttel » 05 Apr 2024, 21:11

Es handelt sich um einen reinen Testcode um die serielle Kommunikation zu testen.
Auf Pascalseite wird über die Tastatur ein Zeichen eingegeben und anschließend zum ftduino übertragen.
Auf ftduino Seite wird laufend der Übertragungspuffer abgefragt. Wenn ein Zeichen im Puffer ist, wird kurz die LED eingeschaltet und überprüft ob es sich um einen Kleinbuchstaben handelt und ggf. in den entsprechenden Großbuchstaben umgewandelt. Danach wird das Zeichen zurück zum Pascalprogramm übertragen. Dort wird das empfangene Zeichen dann zur Kontrolle ausgegeben.
Die LED wird eingeschaltet, d.h. es befindet sich ein Zeichen im Übertragungspuffer, das eigentliche Einlesen des Zeichens funktioniert aber nicht.

juh
Beiträge: 908
Registriert: 23 Jan 2012, 13:48

Re: ftduino und Free Pascal

Beitrag von juh » 07 Apr 2024, 23:47

Was bedeutet "es wird kein Zeichen gelesen" und "das eigentliche Einlesen des Zeichens funktioniert aber nicht"? Was siehst du an Output?
Ich verstehe auch deinen Aufbau immer noch nicht. "Pascalseite" ist wohl ein PC. Auf dem greifen gleichzeitig das Pascalprogramm und der serielle Monitor der Arduino-IDE auf die serielle Schnittstelle zu, an der der ftDuino hängt?

schröttel
Beiträge: 18
Registriert: 22 Sep 2022, 19:50

Re: ftduino und Free Pascal

Beitrag von schröttel » 11 Apr 2024, 15:00

Unter Verwendung der Unit synaser (http://synapse.ararat.cz/doc/help/synaser.html) kann ich jetzt Daten zwischen ftduino und PC (free Pascal) hin und her schicken. Dazu die beiden Testprogrämmchen:

Code: Alles auswählen

#include <Arduino_BuiltIn.h>
#include <FtduinoSimple.h>
byte Zahl=0;
int counter=0;
String Meldung="Das kommt vom ftduino: ";
void setup() {
  Serial.begin(9600);
  pinMode(LED_BUILTIN,OUTPUT);
}
void loop() {
  counter = Serial.available();
  if (counter>0){ //da ist was angekommen
    Zahl = Serial.read(); //Zahl vom PC lesen
    digitalWrite(LED_BUILTIN,HIGH); //rote LED an
    delay(100); //0,1 Sek. warten
    Serial.println(Meldung); //Meldung zum PC senden
    Zahl++; // damit mit man sieht das die Zahl vom ftduino kommt
    Serial.write(Zahl);} //Zahl zum PC schicken
  else {digitalWrite(LED_BUILTIN,LOW);}
  }
  

Code: Alles auswählen

program comm;
uses Wincrt,synaser;
var
  ser: TBlockSerial;
  Zahl: byte;
begin
  ser:=TBlockSerial.Create;
  ser.Connect('COM4');
  ser.config(9600, 8, 'N', SB1, False, False);
  Zahl:=255;
  while Zahl <> 0 do //bei Eingabe 0 ist Schluss
  begin
   read(Zahl); //Zahl eingeben
   ser.SendByte(Zahl); //Zahl senden
   delay(100); //0,1 Sek. warten
   Writeln(ser.Recvstring(1000),ser.Recvbyte(1000)); //Meldung und Zahl vom
                                                     //ftduino lesen und anzeigen
  end;
  ser.free;
end.

Antworten