Forum: Compiler & IDEs Serial.write durch Serial.print ersetzen. AVR Kompilierungsfehler function


von Armin (sps123)


Lesenswert?

Ich möchte Serial.write durch Serial.print ersetzen, da ich eine 
Hex-Ausgabe im Arduino Monitor benötige.
Einfaches ersetzen geht nicht, Fehlermeldung: function-definition is not 
allowed here.

Aber auch in einer anderen Funktion heißt es: no matching function for 
call to...

Auch eine längere Websuche brachte mir keine Hilfe. Da dreht sich alles 
nur um die unterschiedliche Ausgabe, die ist klar. Geht ggf. eine 
Stringumwandlung? Liegt es an Serial.available oben?

Wer kann helfen? Vielen Dank!
1
byte readWord[1] = {0}
2
3
void loop() {
4
  if (Serial.available() > 0) {
5
    while (addressCounter != 512) {    
6
      PORTC = (addressCounter & 512) >> 8; // (hier A8.  255 ?)
7
      PORTA = addressCounter & 255; 
8
      digitalWrite(40, LOW); 
9
      digitalWrite(41, LOW); 
10
      digitalWrite(39, LOW); 
11
      readWord[0] = PINL; 
12
      //Serial.write(readWord, 1);    --- Original
13
      //Serial.print(readWord);          ---geht nicht      
14
      digitalWrite(41, HIGH); 
15
    }
16
  }
17
}   
18
      void loop1(){
19
      if (Serial.available() > 0) {                       
20
      Serial.print(readWord);          // geht auch nicht
21
      }
22
    }

von Veit D. (devil-elec)


Lesenswert?

Hallo,

write hat keine Option zur Formatierung.
Man kann ...
1
Serial.println(var, HEX);
2
oder
3
Serial.print("0x"); Serial.println(var, HEX);
Oder du nimmst die Streaming Lib.
https://github.com/janelia-arduino/Streaming

Edit:
du solltest auch mit dem Semikolon aufpassen die man schreiben muss.

: Bearbeitet durch User
von Armin (sps123)


Lesenswert?

Die Lib nehme ich nicht.

Die Kompilierungsfehler liegen aber offenbar anderweitig. var, HEX hatte 
ich auch versucht.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

zeige einen runtergebrochenen kompletten! Sketch der den Fehler noch 
zeigt. Tippfehler hast du korrigiert?

: Bearbeitet durch User
von Armin (sps123)


Lesenswert?

Hier ist der komplette code mit Fehlermeldungen. Tippfehler hatte ich 
keine.
1
long addressCounter = 0;
2
byte readWord[1] = {0}; 
3
void setup() {
4
  DDRA = B11111111; //A0-A7 
5
  DDRL = B00000000; //Q0-Q7
6
  DDRC = B11111111; //A8  C0 
7
  pinMode(41, OUTPUT); // CE1
8
  pinMode(40, OUTPUT); // CE2
9
  pinMode(39, OUTPUT); // CS
10
  Serial.begin(115200); 
11
  digitalWrite(40, HIGH); 
12
  digitalWrite(41, HIGH); 
13
  digitalWrite(39, HIGH);
14
15
}
16
17
void loop() {
18
  if (Serial.available() > 0) {
19
    while (addressCounter != 512) {    
20
      PORTC = (addressCounter & 512) >> 8; 
21
      PORTA = addressCounter & 255; 
22
      digitalWrite(40, LOW); 
23
      digitalWrite(41, LOW); 
24
      digitalWrite(39, LOW); 
25
      readWord[0] = PINL; 
26
      Serial.print(readWord, HEX);                
27
      digitalWrite(41, HIGH); 
28
    }
29
  }
30
31
      addressCounter++;
32
33
}
In function 'void loop()':
49:33: error: no matching function for call to 'print(byte [1], int)'
       Serial.print(readWord, HEX);
Print.h:66:12: note: candidate: size_t Print::print(const String&) <near 
match>
     size_t print(const String &);
note:   conversion of argument 1 would be ill-formed:
note: candidate: size_t Print::print(const char*) <near match>
     size_t print(const char[]);

von Helmut H. (helmuth)


Lesenswert?

readWord ist ein array (warum?), daher:
1
      Serial.print(readWord[0], HEX);

: Bearbeitet durch User
von Armin (sps123)


Lesenswert?

Vielen Dank!
Es funktioniert.

Das Ergebnis ist zwar nicht wie gewünscht, aber das hat mir erst mal 
geholfen. Ich muss mich da weiter einlesen.

Der Code war ursprünglich für ein größeres PROM geschrieben und da 
wurden 2 Bytes gelesen oder 19 bit.

byte readWord[2] = {0, 0};

Ich hatte eigentlich alles ausprobiert, Serial.print(readWord[1], HEX); 
, Serial.print(readWord[0], 1); usw

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.