Forum: Mikrocontroller und Digitale Elektronik Problem mit Arduino sketch


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von A. K. (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Ich bräuchte Hilfe!
Vor kurzem habe ich mir disen Sketch für einen Morsecode 
Temperatursender gedownloadet,da ich einfach nicht Programmieren 
kann.(bitte nicht haten)

Sketch:
#include <SFE_BMP180.h>

/*====================================================================== 
==========
  Programm zur Ausgabe der Temperatur, der Luftfeuchtigkeit und des 
Luftdruckes
  in Morsetegrafie mit einem kleinen ISM-Sender auf 433 MHz.
  Als Sensoren werden ein DHT11 für die Temperatur und die 
Luftfeuchtigkeit
  und ein BMP180 zu Messung des Luftdruckes eingesetzt.
======================================================================== 
=========*/

#include <Wire.h>                                          // Library 
für den I2C Bus
#include <string.h>                                        // Library 
für die String-Bearbeitung
#include <stdio.h>                                         // Library 
für die Stndardfunktinen
#include <DHT.h>                                           // Library 
für den DHT11/22 Feuchtesensor
                                        // Library von Sparkfun für den 
BMP180 Luftdrucksensor

#define DHTPIN 2                                           // Digitaler 
Pin an dem der DHT angeschlossen ist
#define DHTTYPE DHT11                                      // Type des 
Sensors der angeschlossen ist hier: DHT11
DHT dht(DHTPIN, DHTTYPE);                                  // Instanz 
des DHT-Sensors erzeugen
SFE_BMP180 barometer;                                          // 
Instanz des BMP180-Sensors erzeugen

int laenge;
int laenge1;
int i;
int x;
int y;
String h_text;
String t_text;
String l_text;
char temp[1];
char charzeichen[1];
String temp1;
String zeichen;
String temp2;
int SenderPin = 12;                                      // Pin an dem 
der Sender angeschlossen ist
int tempo = 100;                                         // 
Zeichengeschwindigkeit
float seaLevelPressure = 101325;                         // Aktueller 
Luftdruck bezogen auf NN am aktuellen Stndort

String text = "t 13,2 f 85 d 1024 dl0mes";               // So wird der 
Text später beispielhaft aussehen

char* woerterbuch[] = {"a", ".-", "b", "-...", "c", "-.-.", "d", "-..", 
"e", ".", "f", "..-.", "g", "--.",
                     "h", "....", "i", "..", "j", ".---", "k", "-.-", 
"l", ".-..", "m", "--", "n", "-.",
                     "o", "---", "p", ".--.", "q", "--.-", "r", ".-.", 
"s", "...", "t", "-", "u", "..-",
                     "v", "...-", "w", ".--", "x", "-..-", "y", "-.--", 
"z", "--..", ".", ".-.-.-",
                     ",", "--..--", "/", "-..-.", "-", "-....-", "0", 
"-----", "1", ".----", "2", "..---",
                     "3", "...--", "4", "....-", "5", ".....", "6", 
"-....", "7", "--...", "8", "---..",
                     "9", "----."};


void setup() {
  pinMode(1, OUTPUT);
  Serial.begin(9600);                                      // Seriellen 
Port öffen um Ausgaben zu ermöglichen mit 9600 bps:
  dht.begin();                                             // 
initialisieren des DHT
  Wire.begin();                                            // 
initialisieren des I2C Busses für die Kommunikation mit BMP 180
  SFE_BMP180 Initialize();                                  // 
initialisieren des BMP 180 Sensors
}

void loop() {
  float h = dht.readHumidity();                            // Einlesen 
der relativen Luftfeuchtigkeit in %
  float t = dht.readTemperature();                         // Einlesen 
der Außen-Temperatur in °C
  float Luftdruck = SFE_BMP180 for GetPressure()/100;           // 
aktuellen Luftdruck einlesen (Mess wert in Pa; /100 macht daraus hPa
}
  float Innentemp = barometer.GetTemperature();            // aktuelle 
Innentemperatur einlesen

   t_text = String(t, 1);                                  // 
String(float, Nachkommastellen) Wandelt Meßwert in String um
   h_text = String(h, 0);
   l_text = String(Luftdruck, 0);
   text = "t " + t_text + " f " + h_text + " l " + l_text + " dl0mes"; 
// Messwerte werden zu einer Zeichenkette für Morseausgabe 
zusammengestellt


laenge = text.length();                                    // Anzahl der 
Zeichen des auszugebdneden Textes
char chartext[laenge + 1];
text.toCharArray(chartext, laenge+1);                      // Aus dem 
auszugebenden Text eine Array of Char erzeugen
for (i=0; i<laenge+1; i++){                                // Text 
Zeichen für Zeichen aufschlüsseln
    temp[1]= chartext[i];                                  // Aktuelles 
Zeichen aus dem Text der ausgegeben werden soll
    for (x=0; x<=80; x=x+2){                               // Aktuelles 
Zeichen im Wörterbuch suchen
    temp2=woerterbuch[x];                                  // Das x-te 
Zeichen einer Zwischenvariablen zuweisen die ein String ist

    temp2.toCharArray(charzeichen, 2);                     // Aus der 
Zwischenvaiablen ein char machen
    if (chartext[i] == char(32))                           // bei 
Leerzeichen eine Wortpause ausgeben
    {
    wortende();
    break;
    }
    else
    {
      if (charzeichen[0] == chartext[i]){                  // Wenn 
Zeichen im Wörterbuch gefunden
      temp1 = woerterbuch[x+1];                            // dann ist 
nächster Eintrag das zugehörende Morsezeichen
      laenge1 = temp1.length();                            // 
Zeichenlänge des Morsezeichens ermitteln
      char chartemp1[laenge1+1];
      temp1.toCharArray(chartemp1, laenge1+1);             // Aus dem 
Morsezeichen ein Array of Char erzeugen
        for(y=0; y<laenge1; y++){
        switch (chartemp1[y]) {                            // Für jeden 
Punkt ein "dit" ausgeben
          case '.':                                        // Für jeden 
Strich ein "dah" ausgeben
          dit();
          break;
          case '-':
          dah();
          break;
          }
        }
       zeichenende();                                      //Wenn das 
Zeichen ausgegeben wurde, dann eine Pause der Länge "dah"
      }
    }
   }
  }
}

  void dit() {                                             // einen 
Punkt (dit) ausgeben
    digitalWrite(SenderPin, HIGH);
    delay(tempo);
    digitalWrite(SenderPin, LOW);
    delay(tempo);
  }

  void dah() {                                            // einen 
Strich (dah) ausgeben
    digitalWrite(SenderPin, HIGH);
    delay(3*tempo);
    digitalWrite(SenderPin, LOW);
    delay(tempo);
  }

   void wortende() {                                      // Pause für 
Wortende
    digitalWrite(SenderPin, LOW);
    delay(6*tempo);
    digitalWrite(SenderPin, LOW);
    }
    void zeichenende() {                                  // Pause für 
Zeichenende
    digitalWrite(SenderPin, LOW);
    delay(2*tempo);
    digitalWrite(SenderPin, LOW);
    }


Nun immer wenn ich den sketch hochladen will kommt diese Fehlermdeldung:
error: 'i' does not name a type

 for (i=0; i<laenge+1; i++){                                // Text 
Zeichen für Zeichen aufschlüsseln

           ^

Arduino_ism_wetterballon:74: error: 'i' does not name a type

 for (i=0; i<laenge+1; i++){                                // Text 
Zeichen für Zeichen aufschlüsseln

                       ^

Arduino_ism_wetterballon:107: error: expected declaration before '}' 
token

 }

 ^

exit status 1
expected primary-expression before 'for'

Und da ich nicht programmieren kann sagt mir das ganze wenig.
Darum würde ich um eure Hilfe bitten.
Bitte hatet mich wegen meiner Programmierkentnisse nicht.Ich kenn mich 
halt besser mit Hardware und so aus.
Thx

: Verschoben durch Moderator
von someone (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Du musst das umändern zu
1
for (int i=0; i<laenge+1; i++) {

Bei "x" übrigens genauso (also durch "int x" in der 
Schleifeninitialisierung ersetzen).

von A. K. (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Sorry für die dumme Frage aber wo muss ich das einfügen?
Dankeschön für die nette und schnelle Antwort.

Thx

von someone (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Auch wenn du nicht programmieren kannst, aber so ein wenig solltest du 
dich dennoch damit beschäftigen. Deine Ausgabe zeigt unten die 
Fehlermeldungen. Da steht, in welchen Zeilen das Problem wo auftritt.
Ich kann dir keine Zeilennummer geben, weil dein Code kaputtformatiert 
ist.
Es sollten aber wahrscheinlich die Zeilen 74 (für i) und 76 (für x) 
sein.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Arno K. schrieb:
> Ich bräuchte Hilfe!
Du solltest einfach die *.ino Datei hier anhängen, so wie es in der 
Bedienungsanleitung über jeder Eingabebox steht:
1
Längeren Sourcecode nicht im Text einfügen,
2
sondern als Dateianhang
Und dann sagen, auf welche Zeile sich die Fehlermeldung bezieht...

: Bearbeitet durch Moderator
von Besucher (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Oder, noch besser, nenne die Quelle des Programms. Der oben gepostete 
Code scheint jedenfalls kaputtformatiert worden zu sein (loop() soll 
sicher nicht nach drei Zeilen enden).

von Horst (Gast)


Bewertung
0 lesenswert
nicht lesenswert

von Matthias Q. (zaphod_beeblebrox)


Bewertung
0 lesenswert
nicht lesenswert
Kompiliert doch...
Das i muss auch nicht in der Schleife deklariert werden. Steht oben 
global. Sehr sinnvoll...

von Matthias Q. (zaphod_beeblebrox)


Bewertung
0 lesenswert
nicht lesenswert
Der code der Seite und dein Code stimmen nicht überein. Was alles anders 
ist weiß ich nicht, aber so kann man dir nicht helfen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.