Sida 1 av 1
Arduino iDE C++
Postat: 18 februari 2025, 17:00:13
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;
}
Re: Arduino iDE C++
Postat: 18 februari 2025, 17:33:09
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
Re: Arduino iDE C++
Postat: 18 februari 2025, 17:44:52
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
Här kommer den returnera 0xFF om clock_value inte är 0, eller returnera 0x00 om clock_value är 0.
Re: Arduino iDE C++
Postat: 18 februari 2025, 19:21:28
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
Re: Arduino iDE C++
Postat: 18 februari 2025, 19:33:12
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.
Ä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
För att invertera en bool.

Re: Arduino iDE C++
Postat: 18 februari 2025, 19:54:24
av ecenier
Eller bara,
int var = 0x34;
if(someCondition) { var = 0x12; }
Re: Arduino iDE C++
Postat: 18 februari 2025, 19:59:51
av hawkan
Inte så bara, det är två rader. Eller i ett IDE som tvingar på en formatering, 6 rader eller mer.
Re: Arduino iDE C++
Postat: 18 februari 2025, 21:43:25
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.
Re: Arduino iDE C++
Postat: 19 februari 2025, 21:48:45
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.