Serial.write durch Serial.print ersetzen. AVR Kompilierungsfehler function

OP #7395614

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
    }
OP #7395661

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[]);

OP #7395695

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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 3 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.