Arduino Pro Mini SoftwareSerial Port

Hallo zusammen,

ich habe das GPS Modul Neo-6M und habe dieses erfolgreich am Arduino UNO und Nano mit laufen gebracht nur der Pro Mini will einfach nicht ich glaube der hat andere SoftwareSerial PINs als die anderen beiden.

Als SoftwareSerial PIN verwende ich auf RX = 9 und TX = 10.

Nur ich finde im Internet einfach nix.

Hier ist “mein” Quellcode (habe ich auch nur aus dem Netz gezogen).

/*********************
 *10 to GPS Module TX*
 *09 to GPS Module RX*
 *********************/

#include <SoftwareSerial.h>
#include <TinyGPS.h>

SoftwareSerial mySerial(10, 11);
TinyGPS gps;

void gpsdump(TinyGPS &gps);
void printFloat(double f, int digits = 2);

void setup()  
{
  // Oploen serial communications and wait for port to open:
  Serial.begin(9600);
  // set the data rate for the SoftwareSerial port
  mySerial.begin(9600);
  delay(1000);
  Serial.println("uBlox Neo 6M");
  Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
  Serial.print("Sizeof(gpsobject) = "); 
  Serial.println(sizeof(TinyGPS));
  Serial.println(); 
}

void loop() // run over and over
{
  Serial.println("drin");
  bool newdata = false;
  unsigned long start = millis();
  // Every 5 seconds we print an update
  while (millis() - start < 5000){
    if (mySerial.available()){
      char c = mySerial.read();
      Serial.print(c);  // uncomment to see raw GPS data
      if (gps.encode(c)){
        newdata = true;
        break;  // uncomment to print new data immediately!
      }
    }
  }
  
  if (newdata){
    Serial.println("Acquired Data");
    Serial.println("-------------");
    gpsdump(gps);
    Serial.println("-------------");
    Serial.println();
  }
  
}

void gpsdump(TinyGPS &gps)
{
  long lat, lon;
  float flat, flon;
  unsigned long age, date, time, chars;
  int year;
  byte month, day, hour, minute, second, hundredths;
  unsigned short sentences, failed;

  gps.get_position(&lat, &lon, &age);
  Serial.print("Lat/Long(10^-5 deg): "); Serial.print(lat); Serial.print(", "); Serial.print(lon); 
  Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");
  
  // On Arduino, GPS characters may be lost during lengthy Serial.print()
  // On Teensy, Serial prints to USB, which has large output buffering and
  //   runs very fast, so it's not necessary to worry about missing 4800
  //   baud GPS characters.

  gps.f_get_position(&flat, &flon, &age);
  Serial.print("Lat/Long(float): "); printFloat(flat, 5); Serial.print(", "); printFloat(flon, 5);
    Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");

  gps.get_datetime(&date, &time, &age);
  Serial.print("Date(ddmmyy): "); Serial.print(date); Serial.print(" Time(hhmmsscc): ");
    Serial.print(time);
  Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");

  gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
  Serial.print("Date: "); Serial.print(static_cast<int>(month)); Serial.print("/"); 
    Serial.print(static_cast<int>(day)); Serial.print("/"); Serial.print(year);
  Serial.print("  Time: "); Serial.print(static_cast<int>(hour+8));  Serial.print(":"); //Serial.print("UTC +08:00 Malaysia");
    Serial.print(static_cast<int>(minute)); Serial.print(":"); Serial.print(static_cast<int>(second));
    Serial.print("."); Serial.print(static_cast<int>(hundredths)); Serial.print(" UTC +08:00 Malaysia");
  Serial.print("  Fix age: ");  Serial.print(age); Serial.println("ms.");

  Serial.print("Alt(cm): "); Serial.print(gps.altitude()); Serial.print(" Course(10^-2 deg): ");
    Serial.print(gps.course()); Serial.print(" Speed(10^-2 knots): "); Serial.println(gps.speed());
  Serial.print("Alt(float): "); printFloat(gps.f_altitude()); Serial.print(" Course(float): ");
    printFloat(gps.f_course()); Serial.println();
  Serial.print("Speed(knots): "); printFloat(gps.f_speed_knots()); Serial.print(" (mph): ");
    printFloat(gps.f_speed_mph());
  Serial.print(" (mps): "); printFloat(gps.f_speed_mps()); Serial.print(" (kmph): ");
    printFloat(gps.f_speed_kmph()); Serial.println();

  gps.stats(&chars, &sentences, &failed);
  Serial.print("Stats: characters: "); Serial.print(chars); Serial.print(" sentences: ");
    Serial.print(sentences); Serial.print(" failed checksum: "); Serial.println(failed);
}

void printFloat(double number, int digits){
  // Handle negative numbers
  if (number < 0.0){
     Serial.print('-');
     number = -number;
  }

  // Round correctly so that print(1.999, 2) prints as "2.00"
  double rounding = 0.5;
  for (uint8_t i=0; i<digits; ++i){
    rounding /= 10.0;
  }
  
  number += rounding;

  // Extract the integer part of the number and print it
  unsigned long int_part = (unsigned long)number;
  double remainder = number - (double)int_part;
  Serial.print(int_part);

  // Print the decimal point, but only if there are digits beyond
  if (digits > 0){
    Serial.print("."); 
  }
  
  // Extract digits from the remainder one at a time
  while (digits-- > 0){
    remainder *= 10.0;
    int toPrint = int(remainder);
    Serial.print(toPrint);
    remainder -= toPrint;
  }
}

Danke für eure Hilfe.

Der PRO MINI ist eigentlich ein UNO bzw NANO ohne USB Interface.
Ein Sketch der auf dem UNO/NANO funktioniert müßte auch auf dem PRO MINI funktionieren.
Grüße Uwe

Hi

Als SoftwareSerial PIN verwende ich auf RX = 9 und TX = 10.

Nein, machst du nicht:

SoftwareSerial mySerial(10, 11);

Den weiteren Code habe ich mir nicht angeschaut, aber da könnte das Problem sein.

Grüsse
Peter

StefanDraeger1980:
Als SoftwareSerial PIN verwende ich auf RX = 9 und TX = 10.

SoftwareSerial mySerial(10, 11);

Sicher dass Du pin 9 & 10 verwendest?

Hi,

genau über diese Zeile bin ich auch gestolpert aber ja ich verwende 9 & 10, auch wenn da 10 & 11 steht.
Wie gesagt auf dem UNO funzt das so. Nur auf dem Pro Mini nicht.

StefanDraeger1980:
Hi,

genau über diese Zeile bin ich auch gestolpert aber ja ich verwende 9 & 10, auch wenn da 10 & 11 steht.
Wie gesagt auf dem UNO funzt das so. Nur auf dem Pro Mini nicht.

Total logisch!

Und eine interessante Sicht auf die Dinge....

StefanDraeger1980:
Hi,

genau über diese Zeile bin ich auch gestolpert aber ja ich verwende 9 & 10, auch wenn da 10 & 11 steht.
Wie gesagt auf dem UNO funzt das so. Nur auf dem Pro Mini nicht.

Und warum änderst du das nicht ?
Oder möchtest du uns absichtlich in die Irre führen.

Dann brauchst du hier nicht weiter auf Hilfe hoffen.

Hi,

okay wenn das logisch ist bitte erläutere das für mich einmal. Also für ist das alles andere als logisch.

StefanDraeger1980:
Hi,

okay wenn das logisch ist bitte erläutere das für mich einmal. Also für ist das alles andere als logisch.

Du hast es doch so gepostet, nicht wir.
Also erkläre du es.

HotSystems:
Und warum änderst du das nicht ?
Oder möchtest du uns absichtlich in die Irre führen.

Dann brauchst du hier nicht weiter auf Hilfe hoffen.

Hi,

ich möchte euch / dich nicht in die irre führen. Jedoch ist das der original Sketch welcher auf dem UNO und Nano läuft und dort funktioniert es wenn ich den RX an 9 und den TX an 10 anlege. Somit wäre es nicht sinnig den Sketch dahingegen zu verändern. Deshalb frage ich ja auch hier wie das mit dem Pro Mini ist.

okay wenn das logisch ist bitte erläutere das für mich einmal.

OK, ich versuche es mal mit einem Vergleich:

Wenn ich mit meinem Auto Probleme haben will, dann fülle ich Diesel in den Tank, obwohl auf der Tankklappe steht "Nur bleifreies Benzin einfüllen!"

Total logisch!

Frei übersetzt, heißt das "Dummk*pf".
Aber das möchte und darf ich hier nicht so sagen, denn das wäre evtl. beleidigend.

Deshalb frage ich ja auch hier wie das mit dem Pro Mini ist.

Die Prozessoren sind identisch.
Also haben diese auch das selbe Verhalten.
IMMER!

combie:
OK, ich versuche es mal mit einem Vergleich:

Wenn ich mit meinem Auto Probleme haben will, dann fülle ich Diesel in den Tank, obwohl auf der Tankklappe steht "Nur bleifreies Benzin einfüllen!"

Frei übersetzt, heißt das "Dummk*pf".
Aber das möchte und darf ich hier nicht so sagen, denn das wäre evtl. beleidigend.

Danke für dein äußerst liebevollen Post. Ich hoffe du fühlst dich nun gut damit und kannst anderen jetzt den Platz lassen damit diese mit konstruktiven Meinungen helfen können.

:smiling_imp:

StefanDraeger1980:
ich möchte euch / dich nicht in die irre führen. Jedoch ist das der original Sketch welcher auf dem UNO und Nano läuft und dort funktioniert es wenn ich den RX an 9 und den TX an 10 anlege. Somit wäre es nicht sinnig den Sketch dahingegen zu verändern. Deshalb frage ich ja auch hier wie das mit dem Pro Mini ist.

Anscheinend verstehst du es immer noch nicht.

Wenn du schreist, du verwendest Pin 9 und 10, hast im Sketch aber 10 und 11 definiert, kann es nicht funktionieren.
Egal ob Uno oder Pro Mini. Beide verwenden gleiche Pin-Definitionen.

Und damit wir es verstehen, solltest du deine Beschreibung und den Sketch einheitlich gestalten.
So wie du es beschreibst ist einfach konfus.

Du hast recht und ja es ist konfus aber wenn ich den RX Pin auf 9 und den TX Pin auf 10 setze funktioniert der Sketch nicht mehr daher belasse ich das mit 10 & 11 und es funktioniert auf dem UNO und Nano. Ich habe schon andere Einstellungen probiert aber nichts funzt. Es ist zum Haare raufen.

Vieleicht ist mein China clone etwas quer entwickelt?

Dann machst du einen Fehler.
Zeige uns ein Foto deines Aufbau der nicht funktioniert.

Vieleicht ist mein China clone etwas quer entwickelt?

Ich glaube nicht, dass das ein Problem mit der Badehose ist.

Aber das kannst du ja einfach mit einem Blink Sketch überprüfen, ob die da ein Layoutproblem rein gebastelt haben.

HotSystems:
Dann machst du einen Fehler.
Zeige uns ein Foto deines Aufbau der nicht funktioniert.

Ich glaube eher er brauch eine Brille, gelegentlich sind die Pinbeschriftungen leicht verschoben, ich glaube beim Nano… die sind sowas von Linksbündig das man sich mal verschauen kann.

Das erkennt man erst beim durchzählen ab dem ersten Pin/Beschriftung… bzw weil der SCK Senkrecht mit einem Hinweis Strich beschriftet ist.

Beim ProMini ist es vielelicht andersrum oder richtig :smiley:

Im Anhang habe ich ein Bild.

Schuppeste:
Ich glaube eher er brauch eine Brille, gelegentlich sind die Pinbeschriftungen leicht verschoben, ...

Daher ist ein Foto wichtig. Dann können wir ihm den Fehler schreiben.