Вот полностью... Код (C++): Arduino: 1.8.5 (Windows 10), Плата:"Arduino/Genuino Uno" C:\Users\Киселев Антон\Desktop\ГУСЕНР?ЦА\СКЕТЧР?\HMC5883L\HMC5883L.ino: In function 'void loop()': HMC5883L:51: error: call of overloaded 'write(int)' is ambiguous C:\Users\Киселев Антон\Desktop\ГУСЕНР?ЦА\СКЕТЧР?\HMC5883L\HMC5883L.ino:51:21: note: candidates are: In file included from C:\Users\Киселев Антон\Desktop\ГУСЕНР?ЦА\СКЕТЧР?\HMC5883L\HMC5883L.ino:1:0: C:\Program Files (x86)\Arduino\libraries\SoftwareWire/SoftwareWire.h:52:11: note: uint8_t SoftwareWire::write(uint8_t) uint8_t write(uint8_t data); ^ C:\Program Files (x86)\Arduino\libraries\SoftwareWire/SoftwareWire.h:54:11: note: uint8_t SoftwareWire::write(char*) uint8_t write(char* data); ^ HMC5883L:70: error: call of overloaded 'write(int)' is ambiguous C:\Users\Киселев Антон\Desktop\ГУСЕНР?ЦА\СКЕТЧР?\HMC5883L\HMC5883L.ino:70:21: note: candidates are: In file included from C:\Users\Киселев Антон\Desktop\ГУСЕНР?ЦА\СКЕТЧР?\HMC5883L\HMC5883L.ino:1:0: C:\Program Files (x86)\Arduino\libraries\SoftwareWire/SoftwareWire.h:52:11: note: uint8_t SoftwareWire::write(uint8_t) uint8_t write(uint8_t data); ^ C:\Program Files (x86)\Arduino\libraries\SoftwareWire/SoftwareWire.h:54:11: note: uint8_t SoftwareWire::write(char*) uint8_t write(char* data); ^ exit status 1 call of overloaded 'write(int)' is ambiguous Этот отчёт будет иметь больше информации с включенной опцией Файл -> Настройки -> "Показать подробный вывод во время компиляции"
так Код (C++): myWire2.write(0x00u); //start with register 3. или так Код (C++): myWire2.write((uint8_t)0x00); //start with register 3.
Несколько MPU 9250 можно подключить при помощи этой библиотеки #include <SoftwareWire.h>? А еще я прочитал, что MPU 9250 можно подключать через SPI - - это может поспособствовать подключениюнескольких модулей? Потому как я понял адрес у MPU 9250 тоже постоянный...
Дайте ссылочку на пример.... Где почитать... А я постараюсь освоить... С Вашей помощью (спасибо за терпение...) вроде получилось с HMC5883L...
Да вот с хабра стырил: SPI Master это Ардуинка. SPI Slave это датчики. У каждого датчика есть вход SS или CS. Управляя напряжением на выходах SS1, SS2, SS3 (это любые цифровые пины на ардуинке), выбираем для общения ОДИН из датчиков и выполняем диалог.
Работает! Но выдает нули.... В первом варианте Код (C++): myWire2.write(0x00u); //start with register 3. не компилируется...
КРУТЯК!!!!! РАБОТАЕТ!!!! Я не хороший человек а А4, А5 подключил.... а надо к 4,5!!!! РАБОТАЕТ!!!!! УРА!!!!
Тут такое дело... у меня пока кнопок нет - я замыкаю проводком пин... А он (контакт) периодически сам срабатывает... или когда пальцем коснешся... Смысл следующий одна кнопка (при ее нажатии) выводятся показатели в порт. Вторая (при ее нажатии) выводится в порт слово "KNOPKA", а так же число, сколько нажатий таких было... Соответственно вторая кнопка сработает, когда первая не нажата... Если обе не нажаты... то ничего не происходит... Ну чего то не фурычит вторая кнопка... Код (C++): #include <SoftwareWire.h> #define addr 0x0D //I2C Address for The HMC5883 SoftwareWire myWire1(4, 5); //4 sda and 5 scl SoftwareWire myWire2(6, 7); //6 sda and 7 scl const int knopka1=8; // кнопка №1 const int knopka2=9; // кнопка №2 int val=0; int ii; void setup() { pinMode(8, INPUT); pinMode(9, INPUT); Serial.begin(9600); myWire1.begin(); myWire2.begin(); myWire1.beginTransmission(addr); //start talking myWire1.write(0x0B); // Tell the HMC5883 to Continuously Measure myWire1.write(0x01); // Set the Register myWire1.endTransmission(); myWire1.beginTransmission(addr); //start talking myWire1.write(0x09); // Tell the HMC5883 to Continuously Measure myWire1.write(0x1D); // Set the Register myWire1.endTransmission(); myWire2.beginTransmission(addr); //start talking myWire2.write(0x0B); // Tell the HMC5883 to Continuously Measure myWire2.write(0x01); // Set the Register myWire2.endTransmission(); myWire2.beginTransmission(addr); //start talking myWire2.write(0x09); // Tell the HMC5883 to Continuously Measure myWire2.write(0x1D); // Set the Register myWire2.endTransmission(); } void loop() { if(digitalRead(knopka1)==HIGH) //проверка включена ли кнопка №1 { //Начало первого блока кода для чтения 1 датчика int x1, y1, z1; //triple axis data //Tell the HMC what regist to begin writing data into myWire1.beginTransmission(addr); myWire1.write((uint8_t)0x00); //start with register 3. myWire1.endTransmission(); //Read the data.. 2 bytes for each axis.. 6 total bytes myWire1.requestFrom(addr, 6); if (6 <= myWire1.available()) { x1 = myWire1.read(); //MSB x x1 |= myWire1.read() << 8; //LSB x z1 = myWire1.read(); //MSB z z1 |= myWire1.read() << 8; //LSB z y1 = myWire1.read(); //MSB y y1 |= myWire1.read() << 8; //LSB y } //Начало второго блока кода для чтения 2 датчика int x2, y2, z2; //triple axis data //Tell the HMC what regist to begin writing data into myWire2.beginTransmission(addr); myWire2.write((uint8_t)0x00); //start with register 3. myWire2.endTransmission(); //Read the data.. 2 bytes for each axis.. 6 total bytes myWire2.requestFrom(addr, 6); if (6 <= myWire2.available()) { x2 = myWire2.read(); //MSB x x2 |= myWire2.read() << 8; //LSB x z2 = myWire2.read(); //MSB z z2 |= myWire2.read() << 8; //LSB z y2 = myWire2.read(); //MSB y y2 |= myWire2.read() << 8; //LSB y } // Печать в порт Serial.print("E"); Serial.print(x1); Serial.print(","); Serial.print(y1); Serial.print(","); Serial.print(z1); Serial.print(","); Serial.print(x2); Serial.print(","); Serial.print(y2); Serial.print(","); Serial.print(z2); Serial.print("\n"); delay(100); } else { if(digitalRead(knopka2)==HIGH) // нажали кнопочку #2 {{ val++; // прибавляем к переменной 1 при каждой смене цикла. delay(200); //небольшая защита от "дребезга" контактов кнопки } { val=0; // обнулили переменную } if(val>=5) { Serial.print("KNOPKA2"); Serial.print(ii); // тут надо подумать как отразить номер репера val=0; // обнулили переменную } } else { } } }
Код (C++): { val=0; // обнулили переменную } if(val>=5) // тут val всегда == 0. { Здесь наверное слово else пропущено. Код (C++): } else // ???? { val=0; // обнулили переменную }
Не могу понять.... вот кусочек после первого else... Я не успеваю замкнуть на +5в (только перусь за изоляцию провода... как данные пошли печатать в порт... А второй контакт - вообще не работает... Голову сломал... Код (C++): else { if(digitalRead(knopka2)==HIGH) // нажали кнопочку #2 { { val++; // прибавляем к переменной 1 при каждой смене цикла. delay(200); //небольшая защита от "дребезга" контактов кнопки } if(val>=5) { Serial.print("KNOPKA2"); Serial.print(ii); } else { val=0; // обнулили переменную } } else { val=0; // обнулили переменную } }
Висящий провод ловит помехи. Поищите схемы подключения кнопки. Это или INPUT_PULLUP режим пина. Или внешний резистор притягивающий потенциал пина к GND.
С помехами вроде понял. А что в коде не так? pinMode(9, INPUT_PULLUP); - постоянно в порт данный фигачит... Как буд то кнопка нажата...ПОНЯЛ! ОН ИНВЕРТИРУЕТ!!!! Да! Настройки сделал! Теперь замыкать на GND надо и LOW выставить! Справился! После нажатия второй кнопки - молчание... Посмотрите код плиз...
Еще раз переделал...Не работает вторая кнопка...И все тут... Код (C++): else { if(digitalRead(knopka2)==LOW) // нажали кнопочку #2 { val++; // прибавляем к переменной 1 при каждой смене цикла. delay(200); //небольшая защита от "дребезга" контактов кнопки if(val>=5) { Serial.print("KNOPKA2"); Serial.print(val); } else { val=0; // обнулили переменную } } else { val=0; // обнулили переменную } }