0
Offline
Newbie
Karma: 0
Posts: 26
Intermediate Arduino user
|
 |
« Reply #30 on: April 22, 2011, 05:02:54 pm » |
this is what i have, what should i change? int AM9111::read(unsigned int address) { int rv = 0; _read() = rv; _setAddress(address); return rv; } int AM9111::_read() { int rv = 0; digitalWrite(_odp,0); digitalWrite(_wep,1); bitWrite(rv,0,digitalRead(_IO[0])); bitWrite(rv,1,digitalRead(_IO[1])); bitWrite(rv,2,digitalRead(_IO[2])); bitWrite(rv,3,digitalRead(_IO[3])); _read() = rv; }
|
|
|
|
|
Logged
|
|
|
|
|
Global Moderator
UK
Offline
Brattain Member
Karma: 137
Posts: 19003
I don't think you connected the grounds, Dave.
|
 |
« Reply #31 on: April 22, 2011, 05:20:45 pm » |
_read() = rv;
I thought we'd already decided that this was a no-no? int AM9111::read(unsigned int address) { int rv = 0; _read() = rv; _setAddress(address); return rv; } Is that really the correct order of events?
|
|
|
|
« Last Edit: April 22, 2011, 05:26:02 pm by AWOL »
|
Logged
|
Pete, it's a fool looks for logic in the chambers of the human heart.
|
|
|
|
Global Moderator
Melbourne, Australia
Offline
Shannon Member
Karma: 218
Posts: 13896
Lua rocks!
|
 |
« Reply #32 on: April 22, 2011, 06:50:48 pm » |
int AM9111::_read() { digitalWrite(_odp,0); digitalWrite(_wep,1); int rv = 0; bitWrite(_rbits,0,digitalRead(_IO[0])); bitWrite(_rbits,1,digitalRead(_IO[1])); bitWrite(_rbits,2,digitalRead(_IO[2])); bitWrite(_rbits,3,digitalRead(_IO[3])); _read() = _rbits; return rv; } Someone's been doing too much Visual Basic.  Instead of: _read() = _rbits; return rv;
You want: return _rbits; Although I'm not sure what rv does. Did you put it there to make compiler errors go away?
|
|
|
|
|
Logged
|
|
|
|
|
Global Moderator
Melbourne, Australia
Offline
Shannon Member
Karma: 218
Posts: 13896
Lua rocks!
|
 |
« Reply #33 on: April 22, 2011, 09:16:36 pm » |
int AM9111::_read() { digitalWrite(_odp,0); digitalWrite(_wep,1); int rv = 0; bitWrite(_rbits,0,digitalRead(_IO[0])); bitWrite(_rbits,1,digitalRead(_IO[1])); bitWrite(_rbits,2,digitalRead(_IO[2])); bitWrite(_rbits,3,digitalRead(_IO[3])); _read() = _rbits; return rv; } I still don't totally get this. Are you trying to change _rbits? In which case why return anything from the function? In that case you want: void AM9111::_read() { digitalWrite(_odp,0); digitalWrite(_wep,1); _rbits = 0; bitWrite(_rbits,0,digitalRead(_IO[0])); bitWrite(_rbits,1,digitalRead(_IO[1])); bitWrite(_rbits,2,digitalRead(_IO[2])); bitWrite(_rbits,3,digitalRead(_IO[3])); } But if you want to return stuff, and not affect things such as _rbits (have side-effects) then you actually want: int AM9111::_read() { digitalWrite(_odp,0); digitalWrite(_wep,1); int rv = 0; bitWrite(rv,0,digitalRead(_IO[0])); bitWrite(rv,1,digitalRead(_IO[1])); bitWrite(rv,2,digitalRead(_IO[2])); bitWrite(rv,3,digitalRead(_IO[3])); return rv; }
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 26
Intermediate Arduino user
|
 |
« Reply #34 on: April 22, 2011, 10:14:11 pm » |
Thanks, ill try it
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 26
Intermediate Arduino user
|
 |
« Reply #35 on: April 22, 2011, 10:20:21 pm » |
Yes! It finally compiled! I will upload it tomorrow morning and try it. Thanks for all your help  And what do you mean by "Someone's been doing too much Visual Basic"?
|
|
|
|
|
Logged
|
|
|
|
|
Global Moderator
Melbourne, Australia
Offline
Shannon Member
Karma: 218
Posts: 13896
Lua rocks!
|
 |
« Reply #36 on: April 22, 2011, 11:25:13 pm » |
Well, have you done Visual Basic? In VB, a function returns its results by assigning to the function name. For example: function foo (a, b) foo = a + b ' return result of adding a to b end function
So when I saw you write: _read() = _rbits;
I thought you might have thought this was how you returned the function value.
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 26
Intermediate Arduino user
|
 |
« Reply #37 on: April 23, 2011, 12:41:33 am » |
Well i have done a little visual basic, but not much, i did more visual c++. and i have made an arduino sketch thad did, for example: boolean yn(int pin) { yn = digitalRead(pin); }
|
|
|
|
|
Logged
|
|
|
|
|
Global Moderator
Melbourne, Australia
Offline
Shannon Member
Karma: 218
Posts: 13896
Lua rocks!
|
 |
« Reply #38 on: April 23, 2011, 12:58:46 am » |
Not one that compiled, right? sketch_apr23c.cpp: In function 'boolean yn(int)': sketch_apr23c:2: error: assignment of function 'boolean yn(int)' sketch_apr23c:2: error: cannot convert 'int' to 'boolean ()(int)' in assignment
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 26
Intermediate Arduino user
|
 |
« Reply #39 on: April 23, 2011, 01:01:06 am » |
hmm, well i know it was something like that, mabey i used if statements or something, i don't know. it was a while ago. Well ill test the lib tomorrow...
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 26
Intermediate Arduino user
|
 |
« Reply #40 on: April 23, 2011, 02:06:07 pm » |
Now the _read() always returns 0 here is the code: #include "AM9111.h" #include "WProgram.h"
///////////////////////////////////////// // // PUBLIC // AM9111::AM9111(uint8_t outputDisablePin, uint8_t writeEnablePin) { _odp = outputDisablePin; _wep = writeEnablePin; }
int AM9111::setIO(uint8_t IO0, uint8_t IO1, uint8_t IO2, uint8_t IO3) { _IO[0] = IO0; _IO[1] = IO1; _IO[2] = IO2; _IO[3] = IO3; }
int AM9111::read(unsigned int address) { int rv = 0; _setAddress(address); return rv; }
int AM9111::write(unsigned int address, uint8_t value) { int rv = 0; _setAddress(address); rv = _write(value); return rv; }
///////////////////////////////////////// // // PRIVATE // void AM9111::_setAddress(unsigned int address) { for(int p=0; p<8; p++) { pinMode(p, OUTPUT); digitalWrite(p, bitRead(address, p)); } }
int AM9111::_read() { digitalWrite(_odp,0); digitalWrite(_wep,1); int rv = 0; bitWrite(rv,0,digitalRead(_IO[0])); bitWrite(rv,1,digitalRead(_IO[1])); bitWrite(rv,2,digitalRead(_IO[2])); bitWrite(rv,3,digitalRead(_IO[3])); return rv; }
int AM9111::_write(uint8_t value) { digitalWrite(_odp,1); digitalWrite(_wep,0); int rv = 0; digitalWrite(_IO[0],bitRead(0,value)); digitalWrite(_IO[1],bitRead(1,value)); digitalWrite(_IO[2],bitRead(2,value)); digitalWrite(_IO[3],bitRead(3,value)); return rv; }
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 26
Intermediate Arduino user
|
 |
« Reply #41 on: April 23, 2011, 02:06:54 pm » |
is it because of the first read statement rv = 0?
|
|
|
|
|
Logged
|
|
|
|
|
Global Moderator
UK
Offline
Brattain Member
Karma: 137
Posts: 19003
I don't think you connected the grounds, Dave.
|
 |
« Reply #42 on: April 23, 2011, 02:32:39 pm » |
Yes. That, and the fact that you don't call _read from read.
|
|
|
|
« Last Edit: April 23, 2011, 02:34:46 pm by AWOL »
|
Logged
|
Pete, it's a fool looks for logic in the chambers of the human heart.
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 26
Intermediate Arduino user
|
 |
« Reply #43 on: April 23, 2011, 02:46:24 pm » |
how do you call _read from read?
|
|
|
|
|
Logged
|
|
|
|
|
Global Moderator
UK
Offline
Brattain Member
Karma: 137
Posts: 19003
I don't think you connected the grounds, Dave.
|
 |
« Reply #44 on: April 23, 2011, 02:49:04 pm » |
In your own reply #30, you very nearly did. You just got it the wrong way round.
|
|
|
|
|
Logged
|
Pete, it's a fool looks for logic in the chambers of the human heart.
|
|
|
|
|