Arduino iDE C++

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Oltronix
Inlägg: 458
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Arduino iDE C++

Inlägg av Oltronix »

Efter en stunds grävande har jag några frågor som jag inte hittat svar på.
Det är kod för att driva 7-segment LCD.
https://github.com/EEVblog/Arduino-Seve ... CD.ino.ino

Se 19min in i youtube-filmen.
https://www.youtube.com/watch?v=ZP0KxZl5N2o

Detta verkar helt onödigt.

Kod: Markera allt

#include <Boards.h>
#include <Firmata.h>
#include <FirmataConstants.h>
#include <FirmataDefines.h>
#include <FirmataMarshaller.h>
#include <FirmataParser.h>
Vad gör "? 0xFF : 0x00" ?

Kod: Markera allt

byte clock_mask()
{
  return (clock_value) ? 0xFF : 0x00;
}
Var är dessa macron definerade? I kompilator, eller?

Kod: Markera allt

void setup() 
{
  DDRD = 0b11111111;    
  PORTD = 0b11111111;
}
Användarvisningsbild
AndLi
Inlägg: 18176
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Arduino iDE C++

Inlägg av AndLi »

Det är ett alternativt sätt att skriva en if sats på, används mest för att visa att man kan c...

Nacrona är nog definierade i någon processor beroende fil, som säkert inkluderas av någon av alla dina includes
Användarvisningsbild
Synesthesia
Inlägg: 663
Blev medlem: 22 januari 2010, 19:14:10
Ort: Mellan Göteborg och Kungsbacka

Re: Arduino iDE C++

Inlägg av Synesthesia »

Om det till vänster om "?" är sant (dvs inte 0) utför den det till vänster om kolonet, är det falskt utför den det till höger om kolonet

Kod: Markera allt

return (clock_value) ? 0xFF : 0x00;
Här kommer den returnera 0xFF om clock_value inte är 0, eller returnera 0x00 om clock_value är 0.
Användarvisningsbild
Oltronix
Inlägg: 458
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: Arduino iDE C++

Inlägg av Oltronix »

AndLi skrev: 18 februari 2025, 17:33:09 Det är ett alternativt sätt att skriva en if sats på, används mest för att visa att man kan c...
Nä så ere. Jag kan uppenbart inte C.
Nu har jag koll på koden och skall bara skaffa lämplig LCD-display
Användarvisningsbild
Klas-Kenny
Inlägg: 11799
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Arduino iDE C++

Inlägg av Klas-Kenny »

AndLi skrev: 18 februari 2025, 17:33:09 Det är ett alternativt sätt att skriva en if sats på, används mest för att visa att man kan c...
Nja. Tycker det är ett väldigt användbart skrivsätt. Perfekt just vid tilldelning av variabler.

tex.

Kod: Markera allt

int var = someCondition ? 0x12 : 0x34;
Är enligt mig betydligt trevligare än

Kod: Markera allt

int var;
if(someCondition)
  var = 0x12;
else
  var = 0x34;

Men det ska såklart som allt annat, inte missbrukas.
En före-detta kollega skrev ofta kod såsom

Kod: Markera allt

var = var == true ? false : true;
För att invertera en bool. :shock:
Användarvisningsbild
ecenier
Inlägg: 1149
Blev medlem: 13 december 2007, 17:51:42
Ort: Älvsjö
Kontakt:

Re: Arduino iDE C++

Inlägg av ecenier »

Eller bara,

int var = 0x34;
if(someCondition) { var = 0x12; }
hawkan
Inlägg: 3382
Blev medlem: 14 augusti 2011, 10:27:40

Re: Arduino iDE C++

Inlägg av hawkan »

Inte så bara, det är två rader. Eller i ett IDE som tvingar på en formatering, 6 rader eller mer.
Användarvisningsbild
Klas-Kenny
Inlägg: 11799
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Arduino iDE C++

Inlägg av Klas-Kenny »

Ja, med hemsk formatering kan man göra mycket på en rad. Går ju fint även att skriva

Kod: Markera allt

int var; if(someCondition){ var=0x12; } else { var=0x34; }
om syftet bara är att minimera antalet rader. Men då är det bara ännu värre än motsvarande med vettig radbrytning.
Även om vanliga if-else-syntaxen kanske är mer nybörjarvänlig så är det ingen stor grej att lära sig tenary-operatorn. Ju förr desto bättre, så slipper man bli skrämd när man förr eller senare stöter på den.

Tråden handlar ju dessutom om C++, då finns det betydligt klurigare syntaxer och koncept att bemästra. Exempelvis Lambda-funktioner.


eceniers exempel är dessutom mer otydlig kod enligt mig.

Att först skriva ett värde som kanske inte ska användas till variabeln, för att sen direkt (eventuellt) skriva över den.
Såklart förstår man som van programmerare avsikten, men koden är tydligare om varje operation har ett vettigt villkor.
Användarvisningsbild
ecenier
Inlägg: 1149
Blev medlem: 13 december 2007, 17:51:42
Ort: Älvsjö
Kontakt:

Re: Arduino iDE C++

Inlägg av ecenier »

Ja det kan nog stämma.
Sättet att skriva på har jag nog tagit från när jag skrev assembler för en pic12f675 för några år sedan.
Jag tyckte assemblerkoden blev lättare för mig att läsa om jag skrev den så som c-koden jag föreslog. I slutändan handlar det mycket om tycke och smak.
Skriv svar