Changeset 1011 in t29-www for de


Ignore:
Timestamp:
Aug 15, 2016, 11:40:12 PM (8 years ago)
Author:
heribert
Message:

Fax-PC Quelltext erneuert

Location:
de/lernprojekte/arduino-projekt-programme
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • de/lernprojekte/arduino-projekt-programme/fax_v1_0_arduino_.pde.txt

    r284 r1011  
    1 int dataPin = 3;                          // Pin zum Einlesen der Pixel
    2 int interruptPin = 2;                     // Pin fuer Zeilenumbruch
     1/*
     2********************************************************************
     3
     4 Programm zur Wandlung des Ausgangssignals des Siemens-Hell-FAX-Gerätes/
     5 KF 108 in einen Datenstrom über den seriellen Port (USB, 115200 bd)
     6 Pin 3 wird mit dem verstärkten/gewandelten Ausgangssignal des FAX
     7 verbunden. Programm sendet "0" bei LOW an Pin 3, "1" bei HIGH
     8 Ein Reed-Relais auf der Achse des Fax wird durch einen mitlaufenden
     9 Magnet pro Umdrehung einmal geschlossen und zieht Pin 2 auf LOW-
     10 Das Programm sendet "2", wenn auf Pin 2 eine Flanke erkannt wird.
     11
     12 Der Datenstrom des Arduino wird durch ein Programm auf dem PC in
     13 eine Grafik gewandelt.
     14
     15 technikum29, 15.8.2016
     16*********************************************************************
     17*/
     18int dataPin = 3;                          // Pin zum Einlesen der Pixel
     19int interruptPin = 2;                     // Pin fuer Zeilensync
     20int sum = 0;                              // Aufsummieren des Signals
     21unsigned int verzoegerung = 500;          // Verzögerung in us
     22
     23/* empfohlene Verzögerung liegt zwischen 500 und 250 us, Optimum
     24 * für KF 108 bei 300 us. Je nach Verögerung ist im zugehörigen
     25 * PC-Empfangs-Programm der Faktor yScal anzupassen
     26 */
     27
     28// Programm-Initialisierung
    329
    430void setup(){
    5   Serial.begin(115200);                   // Datenübertragungsrate (Baud-Rate)
    6  
     31  Serial.begin(115200);                   // Datenübertragungsrate (Baud-Rate)
    732  pinMode(dataPin,INPUT);                 // Pins werden als Dateneingaenge konfiguriert
    833  pinMode(interruptPin,INPUT);
    9   digitalWrite(interruptPin,HIGH);
    10  
     34  digitalWrite(interruptPin,HIGH); 
    1135  attachInterrupt(0,newLine,RISING);      // Interrupt (Unterbrechung) fuer Zeilenumbruch wird festgelegt
    1236}
    1337
     38// Dauerschleife
     39
    1440void loop(){
    15   if(digitalRead(dataPin)==HIGH){         // Bei Spannung, also schwarz, wird eine "1" gesendet, sonst eine "0"
     41  if(digitalRead(dataPin)==HIGH){
     42    // Bei Spannung, also schwarz, wird eine "1" gesendet, sonst eine "0"
    1643    Serial.print("1");
    1744  }else{
    1845    Serial.print("0");
    1946  }
    20   delay(0.1);                             // Zeitverzoegerung zwischen den Pixeln
     47  delayMicroseconds(verzoegerung);        // Zeitverzoegerung zwischen den Pixeln
    2148}
    2249
    23 void newLine(){
     50// Interruptroutine, wird durch Magnetschalter ausgelöst
     51
     52void newLine(){     
    2453  Serial.print("2");                      // Bei Interrupt zum Zeilenumbruch wird eine "2" gesendet 
    2554}
     55
     56
  • de/lernprojekte/arduino-projekt-programme/fax_v1_1.pde.txt

    r284 r1011  
    1 import processing.serial.*;
     1/*
     2****************************************************************
     3
     4 Programm zur Darstellung des Datenstroms (des "Bildes") des
     5 Siemens-Hell Faxgerätes KF 108
     6
     7 Am seriellen (USB) Eingang muß ein Arduino angeschlossen sein,
     8 der das Ton(Bild) Signal des FAX in einen seriellen Datenstrom
     9 (Baudrate 115200) von "0", "1" und "2" wandelt.
     10 "0" bzw "1" stehen für das Helligkeitssignal, "2" zeigt das
     11 Ende einer Trommelumdrehung an und dient der Synchronisation
     12 auf die nächste Spalte.
     13
     14 Nach 700 Spalten wird das eingelesene Bild abgespeichert unter
     15 "Scan_FAX.jpg" im Programmordner.
     16 
     17 R.L. und technikum29, 15.8.2016
     18
     19****************************************************************
     20*/
     21import processing.serial.*;
    222Serial serialPort;
     23boolean finished=false;
     24int kx=700;          // Breite des Bildes (Spalten)
     25int ky=0;            // Höhe des Bildes (Umfang der Trommel in px)
     26int flag = 0;        // Startflag
     27float yScal= 0.75;
     28/* yScal richtet sich nach der Verzögerungszeit des Arduino-Programms zur Zeichen-
     29  generierung. Der Wert (als FLOAT) ist so einzustellen, daß das **beschriebene**
     30  Bildschirmfenster ein Breiten/Höhen-Verhältnis von etwa 2:3 hat
     31*/ 
     32void setup(){
     33  flag = 0;                // Sync-Flag: wird "1" nach Empfang der ersten "2"
     34  size(700,1300);          // Größe der Zeichenfläche, der 2. Parameter kann ggf bis
     35                           // bis auf 1000 reduziert werden, um unbeschriebene Leer-
     36                           // fläche unter dem Bild zu vermeiden
     37  noStroke();              // kein Rahmen um die Fläche zeichnen
     38  println(Serial.list());  // gibt alle USB-Anschlüsse auf Konsole aus 
     39// dieser Befehl erzeugt (unbedenklichen) Fehler, kann auskommentiert werden
     40// er gibt auf der Konsole die vorhandenen COM-Ports aus (also z.B. COM3   COM 15)
    341
    4 boolean finished=false;
    5 int scal=1;
    6 int kx=630/scal;
    7 int ky=0;
    8 float yScal=2;
    9 
    10 int verzoeger=0;
    11 
    12 
    13 
    14 void setup(){
    15 size(kx,900);
    16 noStroke();
    17 println(Serial.list());
    18 //serialPort = new Serial(this, Serial.list()[0], 9600); // Fuer Mac-User
    19 serialPort = new Serial(this, Serial.list()[Serial.list().length-1], 115200); // Fuer PC-User
     42// wählt den geeigneten Port aus der Liste Serial.list()[]
     43// serialPort = new Serial(this, Serial.list()[1], 115200); // Fuer Mac-User, funktioniert so
     44// bei PC: ggf den Inhalt von [] durch eine Ziffer ersetzen:
     45// 0 für den ersten durch println... angezeigten COM-Port, 1 für den nächsten usw ...
     46   serialPort = new Serial(this, Serial.list()[Serial.list().length-1], 115200); // Fuer PC-User
     47   serialPort.clear();     // zur Sicherheit nochmal Datenpuffer löschen
    2048}
    2149
    2250void draw(){
    23 
    24 }
    25 
    26 void serialEvent(Serial serialPort) {
     51  // starte mit Spalte# kx=700. zähle runter auf 0
    2752  if (kx>0) {
    28     String dataString = serialPort.readString();
    29     println(dataString);
    30     if (dataString != null) {
    31       for(int i=0; i<dataString.length(); i++){
    32         if(dataString.charAt(i)==48){
    33           fill(255);
    34           rect(kx*scal,ky*scal*yScal,scal,scal*yScal);
    35           ky++;
    36         }else if(dataString.charAt(i)==49){
    37           fill(0);
    38           rect(kx*scal,ky*scal*yScal,scal,scal*yScal);
    39           ky++;
    40         }else if(dataString.charAt(i)==50){
    41           if(ky>300){
    42             ky=0;
    43             kx--;
     53    String dataString = serialPort.readString();       // lese Seriel-Puffer ein und ...
     54    println(dataString);                               // ... gebe zur Kontrolle auf Konsole aus
     55    if (dataString != null) {                          // nur, wenn auch ein neues Zeichen angekommen ist
     56      for(int i=0; i<dataString.length(); i++){        // Eingabestring kann mehrere Zeichen enthalten !
     57        if(dataString.charAt(i)==48){                  // Fall "0"
     58          if (flag == 1) {                             // zeichne nur, wenn bereits ein Sync erhalten
     59            fill(255);                                 // helles Rechteck malen
     60            rect(kx,ky*yScal,1,yScal);
     61            ky++;                                      // rücke zu nächstem Pixel vor
    4462          }
     63        }else if(dataString.charAt(i)==49){            // Fall "1"
     64          if (flag == 1) {                             // zeichne nur, wenn bereits ein Sync erhalten
     65            fill(0);                                   // dunkles Rechteck malen
     66            rect(kx,ky*yScal,1,yScal);
     67            ky++;                                      // rücke zum nächsten Pixel vor
     68          } 
     69        }else if(dataString.charAt(i)==50){            // Fall "2" Sync-Zeichen vom Magnet
     70          if (flag == 0) {                             // erstes Eintreffen von Sync-Zeichen, ...
     71            flag = 1;                                  // ... setze Synflag
     72          }
     73          else {                                       // wiederholtes Empfangen von "2"
     74            if(ky>50){                                 // akzeptiere neues Sync erst nach 50 Pixeln (Entprellen)
     75                                                       // kann ggf entfallen,
     76              ky=0;                                    // Anfang neue Spalte: Zeile 0
     77              kx--;                                    // nächste Spalte
     78            }
     79          } 
    4580        }
    4681      }
     
    4883  }else if(!finished){
    4984    finished=true;
    50     saveFrame("Scan#000003.jpg");
     85    println("--Ende--");                               // Ende-Meldung
     86    println("Vorhandene USB-Ports:");                  // nur zur Kontrolle wg besserer Lesbarkeit nochmal
     87    println(Serial.list());                            // gibt alle USB-Anschlüsse auf Konsole aus
     88    saveFrame("Scan_FAX.jpg");                         // speichere Bild ab
     89    println("FAX-Bild gespeichert in File Scan_FAX.jpg im Processingordner");
     90    serialPort.stop();                                 // seriellen Port abmelden
    5191  }
    5292}
Note: See TracChangeset for help on using the changeset viewer.
© 2008 - 2013 technikum29 • Sven Köppel • Some rights reserved
Powered by Trac
Expect where otherwise noted, content on this site is licensed under a Creative Commons 3.0 License