Sono stato da cliente e non potevo risponderti.
Se hai una cosa del genere Ciao.pippo(); che esegue del codice e poi deve dare un valore di "ritorno", la strada più ovvia è che pippo() ritorni un valore
Quindi dentro a pippo dovrai mettere una return(CodeB)
Quindi if ( Ciao.pippo()==10 ) {
ma... quel tuo CodeB non ha senso tra le variabili globali del solo .cpp dovebbe essere una variabile locale di pippo() (ma tu pippo non posti il codice !!)
Come detto da altri, altra strada è che CodeB sia variabile interna della classe, meglio se private
poi, pippo() la scrive e dall'esterno la leggerai, se public direttamente (che schifo!)
o crei un metodo per leggerla esempio GetCodeB() che solo un return di CodeB.
Ciao.pippo();
if( Ciao.CodeB==10) ... // brutto
if( Ciao.GetCodeB()==10) ... // meglio GetCodeB esempio di nome del metodo
@cotestatnt
Sei stato un grande è bastato scrivere come da te spiegato e magicamente “code_b” (spero di aver usato la giusta sintassi questa volta) è ritornato con il valore allo sketch “principale”, (scusate ma non conosco ancora i termini da programmatore) e la variabile l’ho riportata al suo posto dentro .h @nid69ita
Con “return code_b;” non ritornava nulla, avevo già provato prima di chiedere aiuto.
Non sto scrivendo qualcosa di top secret ma non voglio farmi “cazziare” più del dovuto per il mio vergognoso modo di programmare.
Ecco ora che l’hai detto hai stuzzicato la mia curiosità su public e private, un sunto in italianese cortesemente
Grazie sempre a tutti
P.s. Appena avrò il pc sottomano vi posterò un po’ di listato.
Sicuramente hai bene chiaro che cosa sono variabili e funzioni in C++.
Quando si parla di una classe invece, le variabili che definisci all'interno della classe si chiamano proprietà o attributi (della classe) mentre le funzioni sono dette metodi (sempre della classe).
Proprietà e metodi possono essere definiti public e private (in realtà ce n'è anche un terzo classificatore protected).
Se una variabile o un metodo è private può essere usata SOLTANTO all'interno della classe stessa e non sarà accessibile al resto del codice. Facendo riferimento al tuo codice più su, se sposti void myMethod() nella sezione private, non potrai più usarla nel tuo sketch.
Metodi e proprietà public invece possono essere usati esternamente alla classe con la notazione classe.proprietà o classe.metodo come hai già fatto.
Come detto non sapendo cosa fa pippo() ...
e poi sinceramente non ricordo che puoi farci con variabile messa fuori dalla classe ma dentro al .cpp anche perchè non è una cosa molto usata perchè non ha senso. come la vuoi usare tu DEVE essere una variabile della classe.
Comunque come hai fatto funge ma ancora NON è molto bello.
Di solito la variabile è private e poi usi 1 o 2 metodi per leggerla oppure leggerla/scriverla
esempio variabile interna m_pin privata, di solito poi crei una GetPin() e una SetPin()
@cotestatnt
Ok ora è un pelo più chiaro
Credo che da hobbista mi limiterò nell’ uso delle classi
Grazie @nid69ita
Vado ad acculturarmi su l’uso di queste due funzioni che non conosco, ma se avresti voglia e tempo mi faresti un esempio di come applicarla nel mio sketch?
Grazie sempre a tutti @nid69ita
Ok ci sono arrivato quelli (GetPin() e SetPin()) non sono funzioni perché nelle reference non ci sono ma dei metodi.
Ormai come leggere i pin dei myVar [8] l’ho superato con la funzione descritta da @fratt, il mio ex problema era portare fuori la myVar2 da myMetodo.
Buon pomeriggio
Sempre rimanendo in tema di manipolazione dei bit, non ho capito se è possibile effettuare una semplice rotazione, mi spiego meglio; se dopo un tot di tempo io ho un valore alto o un valore basso lo vorrei registrare su una variabile e alla fine del mio ciclo trovarmi qualcosa tipo b’0001101001.
In assembly usavo l’istruzione “rlf”
Spero di essermi spiegato
Grazie sempre.
tasto = digitalRead(8);
if (tasto==HIGH){
??????
}
if (tasto ==LOW){
????
}
Io sinceramente non ho capito cosa devi fare.
Comunque esiste l'operatore di shift sui bit sia a sinistra che a destra. sono >> e <<
"Guida C - Operatori Bitwise - Piero Tofy.it"
Se ho capito bene la RLF ruota (shifta) i bit a sinistra di una posizione.
In C puoi fare praticamente la stessa cosa con gli operatori bitwise come indicato da @nid69ita.
Occhio però che mi pare di aver capito che la RLF è ciclica (cioè il bit che esce a sinistra poi rientra da destra), mentre lo shift in C non lo è (il bit che esce a sinistra viene perso).
... difatti una è una "rotate" (RLF dovrebbe essere "rotate left through carry"), quella del 'C' è uno "shift" e quindi i comportamenti sono appunto diversi, esattamente come li descrivi tu
@nid69ita
Si avevo già trovato quella guida e dalle reference avevo capito che lo shift non è quello che "servirebbe" a me @fratt
si esatto la rlf ruotava i bit mentre la "<<" non fa la stessa cosa @gpb01
il problema è proprio questo che non si comportano come desidererei io @nid69ita
Cerco di spiegarmi meglio; vorrei "salvare" su una variabile " myvar" una lettura di un sensore, ovvero quanti 1/0 legge in 500ms, sono riuscito a "salvare o tutti gli 1 o tutti gli 0 ma vorrei visualizzare un treno di bit come descritto sopra.
int myvar;
int tasto;
int i = 0;
void loop(){
tasto = digitalRead(8);
if (tasto==HIGH){
myvar = 1 << i;
i++;
}
if (tasto ==LOW){
myvar = 0 << i;
i++;
}
}
Scusa e perché non ti va bene lo shift? Tanto più di 32 bit (che il massimo che puoi definire su Arduino) NON puoi avere e ruotare non capisco a che serve ... leggi, memorizzi e sposti di una posizione, dopo 32 letture hai tutti i risultati, non vedo a che serve la rotazione ...
@gpb01
Si scusami a me non serve per forza ruotare e che non riesco a far spostare lo 0 se shifto una sequenza di 1 funziona se faccio la prova con lo 0 mi azzera tutta la variabile .
... con che cadenza di acquisizione? Perché, come ti ho detto, su Arduino la variabile più lunga è 32 bit quindi 500 msec / 32 = 15.6 msec, quindi, un campionamento con tempi inferiori ai 16 msec NON lo puoi fare o perdi i dati.
Se invece vuoi fare qualche cosa con tempistiche più ridotte, allora ti tocca studiare bene la cosa utilizzando un array e, mano mano, durante l'acquisizione, cambiare elemento dell'array.
Non mi è chiaro, ma qui un esempio di acquisizione di 4000 campioni in 100ms stivati in 500 byte, e qui il rotate left/right di N posizioni dei bit di una variabile intera.
@Claudio_FF
Grazie Claudio da una prima lettura veloce sembrerebbe proprio quello che stavo cercando,
Questa sera mi metto sotto e faccio i miei vari test.
Alla fine ho chiuso la "quadra"
Come suggerito da @Claudio_FF mi sono acculturato e dopo prove, prove, prove, ecc... ho capito che per quello che dovevo fare io non mi funzionava, la mia condizione era che partivo da una variabile vuota e la dovevo riempire di bit ma con "<< >>" quando spostavo, lui mette sempre degli 0 e non mi faceva aggiungere gli 1, poi rileggendo i post ho seguito l'indicazione di @gpb01 e ho usato bitWrite(), ora vi allego un pò di listato
long myvar;
int tasto;
int i = 0; // bit di partenza
void loop(){
tasto = digitalRead(8);
if (tasto==HIGH){
bitWrite(myvar,i,1); // se alto memorizzo 1 nel bit(i) di myvar
}
if (tasto ==LOW){
bitWrite(myvar,i,0); // se basso memorizzo 0 nel bit(i) di myvar
}
i++;
come si dice dalle mie parti cercavo l'asino e c'ero a cavallo