So over the past few weeks, I have been toying around with the Arduino Motor shield V2.3. I realized I needed to use a certain type of header pins (I didn't know there were multiple types for the Arduino Uno, I just thought it was a one size fits all) and now that I found a Motor Shield that has the right pins in my University storage, the I2C finder code cannot find it, even when it is powered separately and the pins are soldered correctly and stacked on the Arduino. Does anyone have any idea why this might be? Because of this, motors don't run at all when connected to the motor ports, but the servos do (probably because of the way the pins are, they still are an extension of the regular Arduino pins). I was thinking of buying another Motor Shield and soldering it myself, but I wanted any sort of explanation I could get before purchasing another one. I appreciate any help you can throw my way.
This board/chip uses I2C 7-bit addresses between 0x60-0x80, selectable with jumpers.
What do you have the jumpers set to? Don't answer "What jumpers"!
Paul
From the Adafruit Motor shield page....
Only two data pins (SDA & SCL in addition to the power pins GND & 5V)
I'm going to guess there is a "default" I2C address where no jumpers are required. But should be checked with the shield information.
- Disconnect all the motors etc.
- Find the above 4 pins on both your Arduino board and Shield.
- Verify they are connected correctly.
- Try the I2C scanner again.
Not so for the version the OP is using, or reported using!
See my quote from the documentation.
Paul
If he did not let the smoke out he probably forgot to connect the ground and add the proper pull up resistors.
No jumpers are selected, so it should be set to "0x60" since that is the default I2C address based on the documentation.
Doesn't work that way. You need to read the doc for the board version you are using.
Paul
Pull up resistors? This is the first time I am hearing about it for the motor shield. How would it come into play?
Oh, are you referring to the address selecting jumpers or the voltage related jumpers? I have neither selected on my board.
I thought we were dealing with the address jumpers.
Paul
Yes, the default I2C address is supposed to be "0x60". I've removed the motor shield and used wires to connect the SCL, SDA, VIN, and GND so now the light is on. Now, the code is giving me an error "Unknown error at address 0x01". So I guess this is some sort of step in the right direction lol. Any idea why it's giving me this error?
Sorry, not a clue. I did find some info that stated:
0x01 - Reserved for CBUS Compatibility
Can we assume the I2C scanner does not find this error with the shield completely removed?
Triple check your wires. That's what I do.
Ok so I changed around the wires a bit, now the I2C scanner is just continually scanning. I put some print statements in the loop to see where it gets stuck and it gets stuck right before it accesses the "Wire" library on the specific address. I have also added Serial.flush() in order to pick up the process but still nothing.
`
// ---------------------------------------------------------------- /
// Arduino I2C Scanner
// Re-writed by Arbi Abdul Jabbaar
// Using Arduino IDE 1.8.7
// Using GY-87 module for the target
// Tested on 10 September 2019
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
// ---------------------------------------------------------------- /
#include <Wire.h> //include Wire.h library
void setup()
{
Wire.begin(); // Wire communication begin
Serial.begin(9600); // The baudrate of Serial monitor is set in 9600
while (!Serial); // Waiting for Serial Monitor
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address; //variable for error and I2C address
int nDevices;
Serial.flush();
Serial.println("Scanning...");
nDevices = 0;
for (address = 1; address < 128; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Serial.print(address);
Serial.flush();
Wire.beginTransmission(address);
error = Wire.endTransmission();
Serial.print("tick");
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address < 16)
Serial.print("0");
Serial.print(address, HEX);
Serial.println(" !");
nDevices++;
}
else if (error == 4)
{
Serial.print("Unknown error at address 0x");
if (address < 16)
Serial.print("0");
Serial.println(address, HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
Serial.flush();
delay(5000); // wait 5 seconds for the next I2C scan
}`
Here is from the web site listing your board:
Technical Details
Details:
- Dimensions, assembled: 70mm x 55mm x 10mm 2.7"x2.1"x0.4"
- This board/chip uses I2C 7-bit addresses between 0x60-0x80, selectable with jumpers.
Datasheet for the motor driver chip
Revision history:
- As of 3/21/2014 we are shipping motor shields with the terminal blocks, and power jumper pre-soldered on. You'll still need to do a little soldering to put on the shield-headers (or stacking headers) but it should be even easier and faster to get started!
So your board is prior to 3/21/2014, I guess.
Paul
Ok so I got a new motor shield and it seems to identify it fine, must have been a problem with the motor shield I was using.
Glad to see that! Likely that is why the board was where you found it. Be sure to mark the board as being defective, so the next person avoids your struggle.
Paul
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.