Ändra siffror fungerar ej men annat funkar (allt funkar nu)

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Henry
Inlägg: 19784
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Ändra siffror fungerar ej men annat funkar (allt funkar nu)

Inlägg av Henry »

På x nedan skall siffror på vardera ställe kunna ändras mellan 0 - 9 och skrivas ut på en display men bara de gånger som man ändrar siffrorna och en cursor visas under varje siffra så man vet var man är. Cursorn fungerar perfekt men inte ett dugg händer vid knapptryckning för att ändra en siffra och jag fattar bara inte varför.

x.xxExx

Kod: Markera allt

#include <LiquidCrystal.h>
LiquidCrystal lcd(40, 42, 28, 26, 24, 22);

unsigned long debounce_interval = 20;
unsigned long previousMillis = 0;

int up_state = HIGH;
int left_state = HIGH;
int down_state = HIGH;
int right_state = HIGH;

byte previous_up_state;
byte previous_down_state;
byte previous_right_state;
byte previous_left_state;

int last_right_state;
int last_left_state;
int last_up_state;
int last_down_state;

int up_down = 0;
int right_left = 0;

boolean done_right_left = HIGH;
boolean done_up_down = HIGH;

unsigned long debounce = 35;

unsigned long lastDebounceTime = 0;
unsigned long lastDebounceTime1 = 0;
unsigned long lastDebounceTime2 = 0;
unsigned long lastDebounceTime3 = 0;

byte up_reading = HIGH;
byte down_reading = HIGH;
byte right_reading = HIGH;
byte left_reading = HIGH;

String data;

char value[] = "6.48E-7";

const byte right = 49;
const byte left = 47;
const byte up = 53;
const byte down = 52;

unsigned long currentMillis = millis();



void setup() {

  pinMode(up, INPUT);
  pinMode(down, INPUT);
  pinMode(left, INPUT);
  pinMode(right, INPUT);

  digitalWrite(up, HIGH);
  digitalWrite(down, HIGH);
  digitalWrite(left, HIGH);
  digitalWrite(right, HIGH);

  lcd.begin(20, 4);
  lcd.clear();

}

void loop() {

  check_buttons();
  check_left_right();

}




void check_buttons() { //Kollar vad för knappar som tryckts ned
                       //och gör i botten det som skall i
                       //förhållande till knapp

  byte up_reading = digitalRead(53);
  byte down_reading = digitalRead(52);
  byte right_reading = digitalRead(49);
  byte left_reading = digitalRead(47);



  if (up_reading != last_up_state) {
    lastDebounceTime = millis();
  }
  if ((millis() - lastDebounceTime) > debounce) {

    if (up_reading != up_state) {
      up_state = up_reading;
      if (up_state == LOW) {

        up_down++;

        if (up_down > 9)
          up_down = 0;
      }
    }
  }
  previous_up_state = up_reading;
  last_up_state = up_reading;
  done_up_down = HIGH;



  if (down_reading != last_down_state) {
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounce) {

    if (down_reading != down_state) {
      down_state = down_reading;
      if (down_state == LOW) {

        up_down--;

        if (up_down < 0)
          up_down = 9;
      }
    }
  }
  previous_down_state = down_reading;
  last_down_state = down_reading;
  done_up_down = HIGH;




  if (right_reading != last_right_state) {
    lastDebounceTime = millis();
  }
  if ((millis() - lastDebounceTime) > debounce) {

    if (right_reading != right_state) {
      right_state = right_reading;
      if (right_state == LOW) {

        right_left++;

        if (right_left > 4)
          right_left = 0;
      }
    }
  }
  previous_right_state = right_reading;
  last_right_state = right_reading;
  done_right_left = HIGH;



  if (left_reading != last_left_state) {
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounce) {

    if (left_reading != left_state) {
      left_state = left_reading;
      if (left_state == LOW) {

        right_left--;

        if (right_left < 0)
          right_left = 4;
      }
    }
  }
  previous_left_state = left_reading;
  last_left_state = left_reading;
  done_right_left = HIGH;
}



//Allt ovan funkar som det skall, up_down och right_left
//räknas upp och ned precis som det skall enligt enkelt test

//Nedan så funkar right_left som det skall då cursorn
//skrivs ut på de olika ställena som förväntat men up_down
//skriver dock inte ut något alls vilket jag inte får ihop



void check_left_right() {

  switch (right_left) {

    case 0: {

        if (done_right_left == HIGH) {  //Så att det inte upprepas
          lcd.setCursor(4, 1);          //eller om knappen hålls intryckt
          lcd.cursor();
          done_right_left = LOW;
        }

        else if (done_up_down == HIGH) {  //Exakt samma grund som ovan;  
          lcd.setCursor(4, 1);            //trycks knappen ned skriv ut 
          lcd.print(up_down);             //innehållet i up_down på displayen
          done_up_down = LOW;             //men nada händer
        }
        break;
      }


    case 1: {

        if (done_right_left == HIGH) {

          lcd.setCursor(6, 1);
          lcd.cursor();
          done_right_left = LOW;
        }

        else if (done_up_down == HIGH) {
          lcd.setCursor(6, 1);
          lcd.print(up_down);
          done_up_down = LOW;
        }
        break;
      }



    case 2: {

        if (done_right_left == HIGH) {

          lcd.setCursor(7, 1);
          lcd.cursor();
          done_right_left = LOW;
        }

        else if (done_up_down == HIGH) {
          lcd.setCursor(7, 1);
          lcd.print(up_down);
          done_up_down = LOW;
        }
        break;
      }



    case 3: {

        if (done_right_left == HIGH) {

          lcd.setCursor(9, 1);
          lcd.cursor();
          done_right_left = LOW;
        }

        else if (done_up_down == HIGH) {
          lcd.setCursor(9, 1);
          lcd.print(up_down);
          done_up_down = LOW;
        }
        break;
      }



    case 4: {

        if (done_right_left == HIGH) {

          lcd.setCursor(10, 1);
          lcd.cursor();
          done_right_left = LOW;
        }

        else if (done_up_down == HIGH) {
          lcd.setCursor(10, 1);
          lcd.print(up_down);
          done_up_down = LOW;
        }
        break;
      }
  }
}
Har hållit på med detta i dagar, någon som ser vad för säkerligen uppenbar grej jag missat?
Senast redigerad av Henry 15 oktober 2019, 08:27:58, redigerad totalt 1 gång.
svanted
Inlägg: 3819
Blev medlem: 30 augusti 2010, 21:20:38
Ort: Umeå

Re: Ändra siffror fungerar ej men annat liknande fungerar

Inlägg av svanted »

vad är det för skillnad på:
lcd.print(9);
lcd.print("9");
lcd.print(9,DEC)
Användarvisningsbild
Henry
Inlägg: 19784
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Re: Ändra siffror fungerar ej men annat liknande fungerar

Inlägg av Henry »

Den översta vet jag ej som så dock fått uppfattningen att så enbart görs med tex funktioner, int:s och dylika saker inte enskilda tecken, den andra om man vill skriva ut ren text men fler än ett tecken då det annars skall vara ' ' och den i botten om det skall skrivas ut i decimalform?
Användarvisningsbild
Icecap
Inlägg: 24578
Blev medlem: 10 januari 2005, 14:52:15
Skype: torstenhemma
Ort: Aabenraa, Danmark

Re: Ändra siffror fungerar ej men annat liknande fungerar

Inlägg av Icecap »

Ganska säkert inte felet men du deklarerar up_/down_/left_/right_reading dels i början av programmet och dels i check_buttons().
svanted
Inlägg: 3819
Blev medlem: 30 augusti 2010, 21:20:38
Ort: Umeå

Re: Ändra siffror fungerar ej men annat liknande fungerar

Inlägg av svanted »

går det att skriva ut siffror öht någonstans på displayen?
jihe
Inlägg: 1193
Blev medlem: 24 april 2009, 20:16:03

Re: Ändra siffror fungerar ej men annat liknande fungerar

Inlägg av jihe »

Jag tycker det ser ut som om done_right_left alltid kommer att vara HIGH efter check_buttons(). Felplacerade krullparenteser efter if-satserna?
Användarvisningsbild
Henry
Inlägg: 19784
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Re: Ändra siffror fungerar ej men annat liknande fungerar

Inlägg av Henry »

Icecap: sant, tänkte en sista utväg ifall det var något som felade där på något vis och med detta förtydliga det eller nåt men det blir samma fel oavsett, knapparna fungerar som de skall som så det är bara det där sista i Switch som inte alls vill av någon anledning.

svanted: Givetvis, tex lcd.print("123456789"); eller en enskild siffra lcd.print('5'); eller missförstod jag dig?

jihe: är meningen att det skall vara så. Tanken bakom är efter varje knapptryckning av antingen vänster eller höger knapp, upp eller ner så sätts en flagga att de har blivit nedtryckta och är klara med koden. När sedan check_left_right kollas så kollas det om flaggan är satt HIGH så att Switch case sedan kan kolla om det är gjort en knapptryckning och börja göra det som det skall.

Efter att koden har dragits en gång för varje del så sätts flaggan låg vilket gör att allt väntar på nästa knapptryckning både från check_buttons och check_right_left utan att loopa igenom det några miljoner ggr i sekunden vilket det hade gjort annars.

If satser jo men kan dock inte se att någon ligger fel, det enda är om break kanske ligger fel? Men tycker mig dock prövat både det ena och det andra både med det och med if satserna.

Som det är nu och som jag ser det så kollas först den översta koden i Switch case som ligger inom sina egna parenteser men gås bara igenom om en knapp för left_right tryckts in. Om inte så hoppar den över all den koden och går till den undre koden men samma där gör bara något om någon av up_down knapparna tryckts in men denna funkar alltså av någon anledning inte alls, men perfekt om jag skriver ut dess int med att sätta tex nedan i loop:

Kod: Markera allt

  lcd.setCursor(0, 0);
  lcd.print(up_down);
  lcd.setCursor(2, 0);
  lcd.print(right_left);
Så skrivs innehåll i dessa int:s ut och innehåller precis det som är förväntat, men fan inte i switch casen.
jihe
Inlägg: 1193
Blev medlem: 24 april 2009, 20:16:03

Re: Ändra siffror fungerar ej men annat liknande fungerar

Inlägg av jihe »

Jo, men kolla i check_buttons(). Jag tror du kan ha låst fast dig i att felet är i check_left_right().

done_right_left = HIGH upprepas flera gånger och sitter inte inne i någon if-sats:

Kod: Markera allt

  if ((millis() - lastDebounceTime) > debounce) {
    ...
  }
  previous_left_state = left_reading;
  last_left_state = left_reading;
  done_right_left = HIGH; <---- sätts alltid
}
Den kommer alltså att vara HIGH varje gång check_left_right() anropas:

Kod: Markera allt

if (done_right_left == HIGH) { 
         // kommer ALLTID att inträffa
        }

        else if (done_up_down == HIGH) {  //Exakt samma grund som ovan;  
         // kommer aldrig att inträffa
        }
Angående felsökning så är det några grejer som kan vara bra:
- skala ner till enklast möjliga fall. Du skulle t ex kunna ta bort all kod som rör möjligheten att skriva i flera teckenkolumner än den första (vilket gör det mycket mer överblickbart eftersom du har duplicerat all kod för varje kolumn - det där skulle jag se över)
- fixa loggning, t ex genom utskrift till terminalfönster i datorn, så du kan ha koll på vad variabler innehåller, vilke block som exekveras osv
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4430
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Ändra siffror fungerar ej men annat liknande fungerar

Inlägg av Swech »

Du har fallit i CTRL C + CTRL V fällan som är så lätt att ramla ned i då man kör C
Du har nästan identisk kod kopierad flera gånger vilket gör det
till ett helvete att underhålla längre fram.

Skall det gå att trycka flera knappar samtidigt?
Om inte gör då endast en rutin som avkodar alla knappar och endast
tillåter ETT svar ut då EN knapp har hållts in.

Blanda inte heller beslut med utskriftsformatering
Låt koden lura ut vad som tryckts in och en separat rutin som
formattererar utskriften på LCDn

Swech
Användarvisningsbild
Henry
Inlägg: 19784
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Re: Ändra siffror fungerar ej men annat liknande fungerar

Inlägg av Henry »

Jo jag vet att koden kan dras ihop betydligt och dylikt som tex en bra mindre rutin som kollar alla knappar och så. Något sådant är dock nästa grej för det är mer komplext, för mig, att göra än att bara kopiera och dylikt först som det är nu då det går snabbt att få ihop en i all fall hyfsat fungerande kod som är prio 1 just nu, det är inte svårt för mig att ha en översikt över det då den inte är speciellt komplex. Detta är bara en del av koden som syns här men det andra har inget med knapparna och så att göra så inget jag tog med.

Ja det blir mer kod som så här men det blir också lättare för mig att få ihop det på så vis och få ihop något fungerande först för att sedan ev minska ner allt på rätt sätt så att säga.

Låt koden lura ut vad som tryckts in och en separat rutin som
formattererar utskriften på LCDn


Är iofs absolut en sak som kan komma att göras.


jihe

Har du iofs rätt i även om denna del "done_left_right" fungerar. Det är mer done_up_down knapparna som det är något vajsning med då inget skrivs ut men då alla knappdelar är en kopia av varandras funktionsdelar så kan jag inte se att något då skulle vara fel där på så vis?


Testade för övrigt lite snabbt detta och sätta done_right_left i if:en för state kollen :

Kod: Markera allt

if (left_reading != last_left_state) {
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounce) {

    if (left_reading != left_state) {
      left_state = left_reading;
     
      if (left_state == LOW) {
        done_right_left = HIGH;
        right_left--;

        if (right_left < 0)
          right_left = 4;
      }
    }
  }
  previous_left_state = left_reading;
  last_left_state = left_reading;
Nu kan ju väl omöjligen done_right_left gå hög om inte knappen tryckts in först och fått en godkänd nedtryckning och jag gjorde det samma med alla knappar men det blir samma ändå, left_right funkar, men inte up_down. I switch case sedan ligger ju dess flaggor så att de inte kan gå låga om inte funktionen blivit körd vilket den bara kan om en knapp tryckts ned, som jag ser det vls.
svanted
Inlägg: 3819
Blev medlem: 30 augusti 2010, 21:20:38
Ort: Umeå

Re: Ändra siffror fungerar ej men annat liknande fungerar

Inlägg av svanted »

svanted: Givetvis, tex lcd.print("123456789"); eller en enskild siffra lcd.print('5'); eller missförstod jag dig?
funkar även:
lcd.print(5);
för det är vad du skriver...


om man har en display kopplad kan man använda den för felsökning,
alltså man lägger in printfunktioner i koden här och var för att kolla utfall av villkor man sätter upp

t.e.x. i koden:

Kod: Markera allt

        else if (done_up_down == HIGH) {
          lcd.setCursor(10, 1);
          lcd.print(up_down);
          done_up_down = LOW;
        }
       lcd.print("5");
        else if (done_up_down == HIGH) {
               lcd.print("6");
          lcd.setCursor(10, 1);
          lcd.print(up_down);
          done_up_down = LOW;
        }
så ser du om den hoppar in i villkoret..
e.t.c.
Användarvisningsbild
Henry
Inlägg: 19784
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Re: Ändra siffror fungerar ej men annat liknande fungerar

Inlägg av Henry »

Aha var säker på att det skulle "definieras" vad det var man skrev in oavsett vad, då vet man det.

Det sista skall anammas.

---

Har nu äääntligen fått det till att fungera. :D :D Kommer dock bara inte ihåg exakt vad jag gjorde då jag pillade en hel del då jag nu såg lite grejer jag inte direkt sett förr och kopplade ihop saker bättre av någon anledning. Men jag flyttade done_up_down = HIGH; längre upp i knapp koden där grejer garanterat blir utförda och inte i slutet av koden där jag inte var helt säker på att det fungerade då det kunde bli kallat hela tiden vilket ju också nämndes här men som jag totalt glömt bort när jag pillade. Men fanns kanske någonstans i baknacken, så tack för det. :)

Hade dock visst även hade lagt in left_right_state = LOW på båda upp och ned funktionerna vilket ju förstås inte fungerar, men just det där finns inte i koden i tråden, men efter att jag gjort det rätt som sista grej och före det tagit bort else:n i check_left_right som jag tyckte var onödiga då if:en är enskilda olika händelser och putsat bort lite skit och ändrat lite smågrejer jag inte heller sett förr så fungerade det hela exakt som tänkt. :) Bara cursorn som inte ville sättas där den skulle när siffrorna ändrades men efter en flyttning av set.cursor till efter utskriften av siffran så funkade det perfekt.

Lägger in det nya här så försvinner det aldrig för det där gör jag fan inte om igen, har hållit på med denna kod under en lååång tid.

Kod: Markera allt

#include <LiquidCrystal.h>
LiquidCrystal lcd(40, 42, 28, 26, 24, 22);

unsigned long debounce_interval = 20;
unsigned long previousMillis = 0;

int up_state = HIGH;
int left_state = HIGH;
int down_state = HIGH;
int right_state = HIGH;

byte previous_up_state;
byte previous_down_state;
byte previous_right_state;
byte previous_left_state;

int last_right_state;
int last_left_state;
int last_up_state;
int last_down_state;

int up_down = 0;
int right_left = 0;

boolean done_right_left = HIGH;
boolean done_up_down = HIGH;

unsigned long debounce = 35;

unsigned long lastDebounceTime = 0;
unsigned long lastDebounceTime1 = 0;
unsigned long lastDebounceTime2 = 0;
unsigned long lastDebounceTime3 = 0;

byte up_reading = HIGH;
byte down_reading = HIGH;
byte right_reading = HIGH;
byte left_reading = HIGH;

const byte right = 49;
const byte left = 47;
const byte up = 39;
const byte down = 38;

unsigned long currentMillis = millis();



void setup() {

  pinMode(up, INPUT);
  pinMode(down, INPUT);
  pinMode(left, INPUT);
  pinMode(right, INPUT);

  digitalWrite(up, HIGH);
  digitalWrite(down, HIGH);
  digitalWrite(left, HIGH);
  digitalWrite(right, HIGH);

  lcd.begin(20, 4);
  lcd.clear();

}

void loop() {

  check_buttons();
  check_left_right();

}




void check_buttons() {

  byte up_reading = digitalRead(39);
  byte down_reading = digitalRead(38);
  byte right_reading = digitalRead(49);
  byte left_reading = digitalRead(47);


  if (up_reading != last_up_state) {
    lastDebounceTime = millis();
  }
  if ((millis() - lastDebounceTime) >= debounce) {

    if (up_reading != up_state) {
      up_state = up_reading;

      if (up_state == LOW) {

        up_down++;
        done_up_down = HIGH;
        if (up_down > 9)
          up_down = 0;
      }
    }
  }
  last_up_state = up_reading;
  


  if (down_reading != last_down_state) {
    lastDebounceTime1 = millis();
  }

  if ((millis() - lastDebounceTime1) >= debounce) {

    if (down_reading != down_state) {
      down_state = down_reading;

      if (down_state == LOW) {

        up_down--;
        done_up_down = HIGH;
        if (up_down < 0)
          up_down = 9;
      }
    }
  }
  last_down_state = down_reading;
  


  if (right_reading != last_right_state) {
    lastDebounceTime2 = millis();
  }
  if ((millis() - lastDebounceTime2) >= debounce) {

    if (right_reading != right_state) {
      right_state = right_reading;

      if (right_state == LOW) {

        right_left++;
        done_right_left = HIGH;
        if (right_left > 4)
          right_left = 0;
      }
    }
  }
  last_right_state = right_reading;
  


  if (left_reading != last_left_state) {
    lastDebounceTime3 = millis();
  }

  if ((millis() - lastDebounceTime3) >= debounce) {

    if (left_reading != left_state) {
      left_state = left_reading;

      if (left_state == LOW) {

        right_left--;
        done_right_left = HIGH;
        if (right_left < 0)
          right_left = 4;
      }
    }
  }
  last_left_state = left_reading;
}




void check_left_right() {

  switch (right_left) {

    case 0: {

        if (done_right_left == HIGH) {  
          lcd.setCursor(4, 1);          
          lcd.cursor();
          done_right_left = LOW;
        }

        if (done_up_down == HIGH) {  
                 
          lcd.print(up_down);
          lcd.setCursor(4, 1);
          lcd.cursor();
          done_up_down = LOW;
        }
        break;
      }


    case 1: {

        if (done_right_left == HIGH) {

          lcd.setCursor(6, 1);
          lcd.cursor();
          done_right_left = LOW;
        }

        if (done_up_down == HIGH) {
          
          lcd.print(up_down);
          lcd.setCursor(6, 1);
          lcd.cursor();
          done_up_down = LOW;
        }
        break;
      }



    case 2: {

        if (done_right_left == HIGH) {

          lcd.setCursor(7, 1);
          lcd.cursor();
          done_right_left = LOW;
        }

        if (done_up_down == HIGH) {
          
          lcd.print(up_down);
          lcd.setCursor(7, 1);
          lcd.cursor();
          done_up_down = LOW;
        }
        break;
      }



    case 3: {

        if (done_right_left == HIGH) {

          lcd.setCursor(9, 1);
          lcd.cursor();
          done_right_left = LOW;
        }

        if (done_up_down == HIGH) {
          
          lcd.print(up_down);
          lcd.setCursor(9, 1);
          lcd.cursor();
          done_up_down = LOW;
        }
        break;
      }



    case 4: {

        if (done_right_left == HIGH) {

          lcd.setCursor(10, 1);
          lcd.cursor();
          done_right_left = LOW;
        }

        if (done_up_down == HIGH) {
          
          lcd.print(up_down);
          lcd.setCursor(10, 1);
          lcd.cursor();
          done_up_down = LOW;
        }
        break;
      }
  }
}
Är lite andra grejer som skall fixas sedan som att kunna printa + och - på ett ställe och sedan skriva in de olika siffrorna och tecknen i en array, så det blir nästa jobb men fixar sig nog för det var redan halvklart innan och vet i grund och botten hur i alla fall det sistnämnda skall kunna göras tror jag. Men att ovan kod nu äntligen är klar är jag så jäkla glad över för nu kan jag äntligen gå vidare med resten av koden. Tack för hjälpen boys. :)
Användarvisningsbild
papabear
Inlägg: 660
Blev medlem: 14 mars 2004, 03:27:12
Ort: Eskilstuna
Kontakt:

Re: Ändra siffror fungerar ej men annat funkar (allt funkar

Inlägg av papabear »

>> Kommer dock bara inte ihåg exakt vad jag gjorde då jag pillade en hel

Skaffa ett diff-verktyg om du inte har det.
Här är ett exempel med notepad++ och compare-pluginet, med din första kod till vänster och din senaste till höger:
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Henry
Inlägg: 19784
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Re: Ändra siffror fungerar ej men annat funkar (allt funkar

Inlägg av Henry »

Fräckt, tackar det skall laddas hem. :)
snigelen
Inlägg: 813
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Ändra siffror fungerar ej men annat liknande fungerar

Inlägg av snigelen »

svanted skrev: funkar även:
lcd.print(5);
för det är vad du skriver...
Det mesta i Arduino av typen

Kod: Markera allt

   bla.print(something);
får alla varianter av print() genom att ärva klassen Print eller Printable och implementera den virtuella metoden write(char) eller printTo(Print &p). Dessa får man då "gratis" om man bara kan skriva ett tecken:

Kod: Markera allt

    size_t print(const __FlashStringHelper *);
    size_t print(const String &);
    size_t print(const char[]);
    size_t print(char);
    size_t print(unsigned char, int = DEC);
    size_t print(int, int = DEC);
    size_t print(unsigned int, int = DEC);
    size_t print(long, int = DEC);
    size_t print(unsigned long, int = DEC);
    size_t print(double, int = 2);
    size_t print(const Printable&);
samt motsvarande println().
Skriv svar