Вопросы с тегами [arduino]

1

голосов
0

ответ
135

Просмотры

STM32 I2C проблема с max127

Я пытаюсь читать аналоговые данные Max127 с использованием stm32f4 доски обнаружения. Я, кажется, есть установка на GPIO булавки и i2c правильно. Но я, кажется, получают постоянную величину от i2c. Было бы Grea, если я могу узнать свою ошибку, и я был бы признателен за любую помощь. Вот код отрезала для включения GPIO булавки __GPIOB_CLK_ENABLE (); GPIO_i2c.Mode = GPIO_MODE_AF_OD; GPIO_i2c.Pull = GPIO_NOPULL; GPIO_i2c.Pin | = GPIO_PIN_10 | GPIO_PIN_11; GPIO_i2c.Alternate = GPIO_AF4_I2C2; HAL_GPIO_Init (GPIOB, & GPIO_i2c); Я использовал внешние 4.7K резисторы, как подтянуть резисторы, поэтому я настроен их не тянуть. I2C инициализируется как: __I2C2_CLK_ENABLE (); I2cHandle.Instance = I2C2; I2cHandle.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; I2cHandle.Init.ClockSpeed ​​= 100000; I2cHandle.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; I2cHandle.Init.DutyCycle = I2C_DUTYCYCLE_2; I2cHandle.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; I2cHandle.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; I2cHandle.Init.OwnAddress1 = 0x30F; // I2cHandle.Init.OwnAddress2 = 0xFE; если (! HAL_I2C_Init (& I2cHandle) = HAL_OK) {/ * Ошибка инициализации * / error_handler (); } Адрес чипа сконфигурирован как 0x28, и номер канала 0x94. Адрес канала должен быть передан первым, и мы получаем два байта обратно с MSB first.So Я написал следующий код. в то время как (1) {Buffer1 [0] = 0; Buffer1 [1] = 0; в то время как (HAL_I2C_IsDeviceReady (& I2cHandle, (uint16_t) 0x50,10,100) = HAL_OK!); HAL_I2C_Master_Transmit (& I2cHandle, (uint16_t) 0x50, (uint8_t *) 0x94,1,10000); HAL_I2C_Master_Receive (& I2cHandle, (uint16_t) 0x51, (uint8_t *) Buffer1,2,10000); Результат = (Buffer1 [0] * 256 + Buffer1 [1]) / 16; а = (результат% 10) +48; б = ((результат / 10)% 10) +48; с = ((результат / 100)% 10) +48; d = ((результат / 1000)% 10) +48; HAL_UART_Transmit (& UartHandle, (uint8_t *) & д, 1,5000); HAL_UART_Transmit (& UartHandle, (uint8_t *) & с, 1,5000); HAL_UART_Transmit (& UartHandle, (uint8_t *) & Ь, 1,5000); HAL_UART_Transmit (& UartHandle, (uint8_t *) & а, 1,5000); HAL_UART_Transmit (& UartHandle (uint8_t *) & "\ п", 1,5000); HAL_GPIO_TogglePin (GPIOD, GPIO_PIN_15); Результат = 0; HAL_Delay (100); } Я постоянно получаю постоянное значение. Я проверил ЦАП с Arduino, и это, кажется, работает хорошо. Вот код Arduino для справки: #define ч = 148; #define deviceAddress 0x28 пустот петли () {Wire.beginTransmission (deviceAddress); Wire.write (ч); Wire.endTransmission (); Wire.requestFrom (deviceAddress, 2); INT результат = 0; для (целое с = 0; с <2; C ++), если (Wire.available ()) результат = результат * 256 + ((Wire.read ())); Данные = результат / 16; Serial.println (данные); } Любые предложения и идеи высоко ценятся. Благодарю вас
vnal1141
1

голосов
0

ответ
28

Просмотры

Serial Communication with Arduino and MATLAB - debugging issue

Я написал следующий код MATLAB, который принимает каждый элемент массива «SendData» и посылает его к Arduino Uno. Ардуин затем использует эти данные, чтобы определить, какую конфигурацию двигатели должны работать в используя, если / IfElse цикла. Когда я шаг в линии контура в то время как по линии двигателей иногда будет поворачиваться. Когда они не я пытаюсь выполнить оператор fprintf в окне командной строки и имеет тенденцию работать. Если у кого есть какие-либо понять, почему этот код не выполняется должным образом, когда я бегу и / или шаг в него, но он будет работать хорошо, когда я выполнить оператор fprintf в окне командной строки, я бы очень признателен за любую помощь. удалить (instrfindall); очистить все; CLC% правопреемником оборудование к переменной а а = последовательный ( «com3»); % Incriment создать переменный инкр = 1; % Создать SendData массив строк sentData = [ '1', '2', '3',» 4' , '0']; % Цикл через 4 возможных заданные двигатель окон во время инкра
Alan McKenna
1

голосов
0

ответ
123

Просмотры

Rfid показывает данные прошивки, но не чтение тегов

У меня есть модуль RFID-RC522 (MF-RC522), и я использую программу эскиз Arduino. Я скачал библиотеку RFID и подключил его, как описано в примере Dumpinfo. Когда я исполню его, я получаю сообщение: Firmware Version: 0x90 = V 2,0 Scan PICC, чтобы увидеть UID, САК, блоки типа, а также данные ... Но когда я приношу тег рядом с ним, ничего не происходит на последовательном мониторе. Я повторно проверки соединений в тысячу раз, но он не работает, контакты соединены как пример говорит, и светодиод D1 включен (красный). Может кто-нибудь мне помочь?
Shiva Kandagatla
1

голосов
0

ответ
49

Просмотры

Некоторые мои записи данных принимают действительно больше, чем другие

Мне нужно принять Adafruit перо M0 Adalogger и сделать его регистрировать данные о 8 датчиков со скоростью 100 выборок в секунду. Проблема заключается в том: некоторые данные занять больше времени, чтобы записать в текстовый файл. Зазор между каждой пробе 10мс (или около того), но, неожиданно (около 30-х годов, я = 2700, и 37s, я = 3150, после того, как он начинает), он принимает 30-50ms, чтобы получить данные, и, затем, возвращается до 10 мс. Это не хорошо для применения, потому что мы пытаемся сравнить некоторые методы такого рода сбор данных, и эта проблема будет получить в пути синхронизации. Мне нужно знать, почему это происходит, и как ее решить. #include #include #include #include #include #include #include // # включают SdFat SD; Const INT chipSelect = 4; Const INT cardDetect = 7; Const INT ledPin = 3; Строка имя_файла = "data.txt"; BOOL alreadyBegan = ложь; INT sensorPin [] = {А0, A1, A2, A3, A4, A5,0, A7}; uint8_t sensorVal [] = {0,0,0,0,0,0,0,0}; Const INT сенсорно = 8; логическое прерывание = ложь; логическое значение отображается = ложь; INT = 0; без знака длиной loopCount = 0; без знака длиной = 0 задолго пред; без знака длиной Будущем = 0; без знака длиной t1 = 0; без знака длиной t2 = 0; без знака длиной диф = 0; INT SampleSize = 6000; Файл DataFile; недействительные установки (недействительный) {pinMode (ledPin, OUTPUT); pinMode (cardDetect, INPUT_PULLUP); для (INT = 0; к <сенсорно; к ++) {pinMode (sensorPin [K], INPUT); } Serial.begin (9600); (! Serial), а {задержка (1000); } Serial.println ( ""); Serial.println ( "INITIALIZING ....."); iniCard (); Serial.println ( ""); Serial.println ( "INITIALIZED !!!"); Serial.println ( ""); Serial.println ( "========================"); Serial.println ( ""); Serial.print ( "Имя файла:"); Serial.println (Filename); Serial.println ( ""); Serial.println ( "========================"); Задержка (2000); } Недействительными петли (недействительными) {loopCount ++; t2 = (MICROS); диф = t2-t1; если (диф> = 9999) {если (я == 0) {DATAFILE = sd.open (имя_файла, FILE_WRITE); = вчера и третьего дня (MICROS); digitalWrite (ledPin, HIGH); } Иначе, если (я == SampleSize) {Будущем = MICROS (); digitalWrite (ledPin, LOW); } T1 = t2; если (я <SampleSize) {Строка dataString = ""; dataString + = (MICROS); dataString + = ""; для (Int J = 0; J <сенсорно; j ++) {sensorVal [J] = analogRead (sensorPin [J]); dataString + = Строка (sensorVal [J]); если (J < сенсорно-1) {dataString + = ""; }} Serial.println (dataString); dataFile.println (dataString); я ++; } Еще {digitalWrite (ledPin, LOW); если (! отображается) {dataFile.close (); отображается = TRUE; Serial.println ( ""); Serial.println ( "========================"); Serial.print ( "Рамка:"); Serial.println (я); Serial.print ( "Loops:"); Serial.println (loopCount); Serial.print ( "Время начала:"); Serial.println (искони); Serial.print ( "End Time:"); Serial.println (Будущее); Период поплавка = (Будущем - вчера и третьего дня) / я; Serial.print ( "Период:"); Serial.println (период); Поплавок частота = 1000000 / период; Последовательный. печать ( "Freq:"); Serial.println (частота); }}} Еще {}} пустота Эрро () {digitalWrite (ledPin, LOW); задержки (250); digitalWrite (ledPin, HIGH); задержки (250); } Недействительного iniCard () {digitalWrite (ledPin, HIGH); // увидеть, если карта присутствует и может быть инициализирован: (! DigitalRead (cardDetect)), а {Эрро (); } // карта, кажется, существует. начать () возвращает отказ // даже если он работал, если это не первый вызов. (! Sd.begin (chipSelect) && alreadyBegan) если {// начать использует половину скорости ... iniCard (); // Возможные цикл бесконечного повтора является действительным, как и все остальные} {alreadyBegan = истина; } // инициализация карты: Задержка (2000); digitalWrite (ledPin, LOW); } задержки (250); digitalWrite (ledPin, HIGH); задержки (250); } Недействительного iniCard () {digitalWrite (ledPin, HIGH); // увидеть, если карта присутствует и может быть инициализирован: (! DigitalRead (cardDetect)), а {Эрро (); } // карта, кажется, существует. начать () возвращает отказ // даже если он работал, если это не первый вызов. (! Sd.begin (chipSelect) && alreadyBegan) если {// начать использует половину скорости ... iniCard (); // Возможные цикл бесконечного повтора является действительным, как и все остальные} {alreadyBegan = истина; } // инициализация карты: Задержка (2000); digitalWrite (ledPin, LOW); } задержки (250); digitalWrite (ledPin, HIGH); задержки (250); } Недействительного iniCard () {digitalWrite (ledPin, HIGH); // увидеть, если карта присутствует и может быть инициализирован: (! DigitalRead (cardDetect)), а {Эрро (); } // карта, кажется, существует. начать () возвращает отказ // даже если он работал, если это не первый вызов. (! Sd.begin (chipSelect) && alreadyBegan) если {// начать использует половину скорости ... iniCard (); // Возможные цикл бесконечного повтора является действительным, как и все остальные} {alreadyBegan = истина; } // инициализация карты: Задержка (2000); digitalWrite (ledPin, LOW); } начать () возвращает отказ // даже если он работал, если это не первый вызов. (! Sd.begin (chipSelect) && alreadyBegan) если {// начать использует половину скорости ... iniCard (); // Возможные цикл бесконечного повтора является действительным, как и все остальные} {alreadyBegan = истина; } // инициализация карты: Задержка (2000); digitalWrite (ledPin, LOW); } начать () возвращает отказ // даже если он работал, если это не первый вызов. (! Sd.begin (chipSelect) && alreadyBegan) если {// начать использует половину скорости ... iniCard (); // Возможные цикл бесконечного повтора является действительным, как и все остальные} {alreadyBegan = истина; } // инициализация карты: Задержка (2000); digitalWrite (ledPin, LOW); }
1

голосов
1

ответ
232

Просмотры

Проблемы на ESP8266 программирование на основе Arduino IDE для ESP8266

Я решил использовать Arduino IDE для ESP8266 программировать на моем ESP8266, таргетинг для чтения данных (байты массива из TTL камеры). ESP8266-01 (флэш-ПЗУ 8Mbits) имеет 8 выводов, так что я решил использовать GPIO16 (TXD) и GPIO2 (RXD) в качестве SoftwareSerial штифтов для достижения этой цели. Но ESP8266 печататься исключение, и я не уверен, что с ним случилось. Так что у меня есть несколько вопросов об этом столкновении. Я хочу знать, могу ли я работать SoftwareSerial на ESP8266 (ESP8266 имеет 2 УАПП, Serial0 для последовательной печати, и мы не могли передавать данные через Serial1), поэтому я решил использовать SoftwareSerial. Я не знаю, что информация исключения означает, потому что я не могу понять язык ассемблера. Я читал документы на Github для Arduino IDE для ESP8266, но я хорошо об определениях выводов не понимаю на ESP8266 при программировании с помощью Arduino IDE. Например, при использовании GPIO16 (TXD) и GPIO2 (RXD) в качестве SoftwareSerial, мы можем использовать конструктор SoftwareSerial Camera (INT pin1, внутр Pin2). Я хочу знать, что соответствующий Pin1 и Pin2 для GPIO2 и GPIO16) есть. Документ действительно путают меня. Вот мой код ключа. #include #include "camera_VC0706.h" #include HTTPClient HTTPClient; // определить камеры и байты массива, я не уверен в том, что выводы являются правильными или нет Int rxPin = 2; INT txPin = 16; SoftwareSerial cameraSerial (rxPin, txPin); // RX, TX camera_VC0706 Camera = camera_VC0706 (& cameraSerial); // взять фото Его takePhoto () {времени байт = 0; writeRawSerial (F ( "ОЖИДАНИЕ"), правда); в то время как (! Camera.begin (115200)) {если (+ время Я хочу знать, что соответствующий Pin1 и Pin2 для GPIO2 и GPIO16) есть. Документ действительно путают меня. Вот мой код ключа. #include #include "camera_VC0706.h" #include HTTPClient HTTPClient; // определить камеры и байты массива, я не уверен в том, что выводы являются правильными или нет Int rxPin = 2; INT txPin = 16; SoftwareSerial cameraSerial (rxPin, txPin); // RX, TX camera_VC0706 Camera = camera_VC0706 (& cameraSerial); // взять фото Его takePhoto () {времени байт = 0; writeRawSerial (F ( "ОЖИДАНИЕ"), правда); в то время как (! Camera.begin (115200)) {если (+ время Я хочу знать, что соответствующий Pin1 и Pin2 для GPIO2 и GPIO16) есть. Документ действительно путают меня. Вот мой код ключа. #include #include "camera_VC0706.h" #include HTTPClient HTTPClient; // определить камеры и байты массива, я не уверен в том, что выводы являются правильными или нет Int rxPin = 2; INT txPin = 16; SoftwareSerial cameraSerial (rxPin, txPin); // RX, TX camera_VC0706 Camera = camera_VC0706 (& cameraSerial); // взять фото Его takePhoto () {времени байт = 0; writeRawSerial (F ( "ОЖИДАНИЕ"), правда); в то время как (! Camera.begin (115200)) {если (+ время txPin); // RX, TX camera_VC0706 Camera = camera_VC0706 (& cameraSerial); // взять фото Его takePhoto () {времени байт = 0; writeRawSerial (F ( "ОЖИДАНИЕ"), правда); в то время как (! Camera.begin (115200)) {если (+ время txPin); // RX, TX camera_VC0706 Camera = camera_VC0706 (& cameraSerial); // взять фото Его takePhoto () {времени байт = 0; writeRawSerial (F ( "ОЖИДАНИЕ"), правда); в то время как (! Camera.begin (115200)) {если (+ время
Yu Leung
1

голосов
1

ответ
172

Просмотры

Raspberry Pi только получение статуса передачи при общении с Arduino через XBee

Я пытаюсь отправить характер, в этом случае буква «Н», через XBee через Raspberry Pi с USB-исследователя XBee прикрепленным к нему и получить ответ «Привет» от Arduino с XBee, прикрепленной к беспроводной прото щит. Код на малина: от XBee ZigBee импорта импорта серийных сер = serial.Serial ( '/ DEV / ttyUSB0', 9600) XBee = ZigBee (серы) xbee.send ( 'ТХ', dest_addr_long = Ъ '\ x00 \ x13 \ xÀ2 \ x00 \ x41 \ x49 \ x69 \ xD6' , dest_addr = Ъ '\ XFF \ XFE', данные = b'H '), а True: попробуйте: печать (xbee.wait_read_frame ()), за исключением KeyboardInterrupt: перерыв ser.close () Код на Arduino: #include // Мы будем использовать SoftwareSerial общаться с XBee: SoftwareSerial XBee (0, 1); // RX, TX INT incomingByte; недействительными установки () {// Устанавливаем оба порта со скоростью 9600 бод. Это значение является наиболее важным // для XBee. Убедитесь, что скорость передачи данных соответствует конфигурации // настройки вашего XBee. Xbee.begin (9600); Serial.begin (9600); } Пустота петли () {если (Xbee.available ()) {// Если данные поступает из последовательного монитора, отправить его в XBee incomingByte = Xbee.read (); если (incomingByte == 'Н') {Serial.write ( "Привет"); }}} Проблема, когда я запускаю код, который я только получить статус передачи на Raspberry Pi, а не пакет с ответом «Hello» в нем. Запуск кода на Raspberry Pi: Я проверил это, запустив тот же сценарий, используя XCTU инструмент и я получить ответный пакет с сообщением «Hello» в нем. Так как я могу получить Raspberry Pi, чтобы обнаружить пакет ответа? Xbee.begin (9600); Serial.begin (9600); } Пустота петли () {если (Xbee.available ()) {// Если данные поступает из последовательного монитора, отправить его в XBee incomingByte = Xbee.read (); если (incomingByte == 'Н') {Serial.write ( "Привет"); }}} Проблема, когда я запускаю код, который я только получить статус передачи на Raspberry Pi, а не пакет с ответом «Hello» в нем. Запуск кода на Raspberry Pi: Я проверил это, запустив тот же сценарий, используя XCTU инструмент и я получить ответный пакет с сообщением «Hello» в нем. Так как я могу получить Raspberry Pi, чтобы обнаружить пакет ответа? Xbee.begin (9600); Serial.begin (9600); } Пустота петли () {если (Xbee.available ()) {// Если данные поступает из последовательного монитора, отправить его в XBee incomingByte = Xbee.read (); если (incomingByte == 'Н') {Serial.write ( "Привет"); }}} Проблема, когда я запускаю код, который я только получить статус передачи на Raspberry Pi, а не пакет с ответом «Hello» в нем. Запуск кода на Raspberry Pi: Я проверил это, запустив тот же сценарий, используя XCTU инструмент и я получить ответный пакет с сообщением «Hello» в нем. Так как я могу получить Raspberry Pi, чтобы обнаружить пакет ответа? если (incomingByte == 'Н') {Serial.write ( "Привет"); }}} Проблема, когда я запускаю код, который я только получить статус передачи на Raspberry Pi, а не пакет с ответом «Hello» в нем. Запуск кода на Raspberry Pi: Я проверил это, запустив тот же сценарий, используя XCTU инструмент и я получить ответный пакет с сообщением «Hello» в нем. Так как я могу получить Raspberry Pi, чтобы обнаружить пакет ответа? если (incomingByte == 'Н') {Serial.write ( "Привет"); }}} Проблема, когда я запускаю код, который я только получить статус передачи на Raspberry Pi, а не пакет с ответом «Hello» в нем. Запуск кода на Raspberry Pi: Я проверил это, запустив тот же сценарий, используя XCTU инструмент и я получить ответный пакет с сообщением «Hello» в нем. Так как я могу получить Raspberry Pi, чтобы обнаружить пакет ответа?
Claudio Gonzalez
1

голосов
0

ответ
65

Просмотры

SAM R21 bootloader waits for clock infinitely

Я работаю над проектом, и мне нужно сделать Arduino IDE взаимодействовать с SAM R21 XPro, так что я могу программировать его как обычную плату Arduino. Я начал с Arduino загрузчика для mzero который, как D21 и хотел, чтобы изменить его в соответствии с моими потребностями, но я наткнулась в бесконечный цикл. При запуске USB, программа ждет бесконечно для часов, чтобы начать. / * Проверьте часы после включения модуля, просить часы * / udd_wait_clock_ready (); Внутри этой функции программа зависает на первой, а #define DFLL_READY_FLAG (SYSCTRL_PCLKSR_DFLLRDY | \ SYSCTRL_PCLKSR_DFLLLCKF | SYSCTRL_PCLKSR_DFLLLCKC) / * В режиме восстановления USB статус не установлен * / если ((SYSCTRL-> DFLLCTRL.reg & SYSCTRL_DFLLCTRL_USBCRM!)) {В то время как ((SYSCTRL-> PCLKSR.reg & DFLL_READY_FLAG) = DFLL_READY_FLAG!); } Еще {в то время как ((SYSCTRL-> PCLKSR.reg & SYSCTRL_PCLKSR_DFLLRDY) = SYSCTRL_PCLKSR_DFLLRDY!); } Я читал таблицу в течение некоторого времени, и единственное, что я encoutered состоит в следующем. 3 - Биты состояния DFLL в регистре PCLKSR во время режима восстановления USB синхронизации может быть неправильным после USB приостановить состояние. Fix / Решение: Не контролировать биты состояния DFLL в регистре PCLKSR в режиме USB восстановления тактового сигнала. Я пытался принять во внимании только флаг DFLLRDY, он не останавливается там больше, но после того, как он возвращается к основным и ждет сообщений, USB поднимает флаг прерывания, и он держит сброс платы. Я также попытался модифицировать часы конфигу, чтобы начать все часы, потому что я думал, что, может быть, я забыл включить их, но никакого успеха, флаги DFLLLCKF и DFLLLCKC не получают равные 1. R21 техническое описание: http://ww1.microchip.com/downloads/en/DeviceDoc/SAM-R21_Datasheet.pdf D21 Загрузчик: https://github.com/arduino/ArduinoCore-samd/tree/master/bootloaders/mzero/Bootloader_D21 / ЦСИ Мой проект R21: https://github.com/BlanzeanuDoru/lucrare_licenta/tree/master/bootloader_r21/bootloader_r21/src Некоторые советы, что делать дальше было бы очень полезно. Благодарю.
BDru
1

голосов
1

ответ
1.1k

Просмотры

Считывание данных из Arduino в Matlab через последовательный порт

Привет, ребята Я новичок в Matlab. Я хотел бы, чтобы прочитать данные, выводимые из Arduino через последовательный порт. Данные выводятся на определенный промежуток времени с запятой, отделяющей / пространства переменных. Как прочитать данные и построить переменную на Matlab? Последовательный порт, как это: 1,1 3,2 1,2 3,1 1,3 3,3 ... Спасибо за вашу помощь. Это код, который я получил для чтения данных только одной переменной без любого пространства. Как изменить, что для чтения данных из более чем одной переменной? закрыть все; очистить все; CLC; fclose ( 'все'); удалить (instrfindall); % USER определенных свойств S = последовательный ( 'СОМ5', 'бод', 9600); plotTitle = 'HCSR04'; xLabel = 'Время (с)'; yLabel = 'Расстояние (см)'; plotGrid = 'на'; Задержка = 0,01; % Определение функции Переменного время = 0; расстояние = 0; кол = 0; % Установка участка plotGraph = участок (время, расстояние); Название (plotTitle, 'FontSize', 25); xlabel (xLabel, 'FontSize', 15); ylabel (yLabel, 'FontSize', 15); Сетка (plotGrid); Еореп (ы); крестики в то время как ishandle (plotGraph) расстояние = str2num (fscanf (ов)) = кол-кол + 1; Время (количество) = TOC; расстояние (количество) = расстояние; Набор (plotGraph, 'XData', время, 'YData', расстояние); Ось ([время (количество) -10 раз (счет) 0 10]); пауза (задержка); конец fclose (ы); очистить все; закрыть все; Я попробовал это один, но, похоже, не работает. закрыть все; очистить все; CLC; fclose ( 'все'); удалить (instrfindall); % USER определенных свойств S = последовательный ( 'СОМ3', 'бод', 9600); plotTitle = 'Испытание датчика'; xLabel = 'Время (с)'; yLabel = 'Расстояние (см)'; plotGrid = 'на'; Задержка = 0,01; % Определение функции Переменного время = 0; distance1 = 0; distance2 = 0; кол = 0; % Установка участка plotGraph (1) = участок (время, distance1); plotGraph (2) = участок (время, distance2); Название (plotTitle, 'FontSize', 25); xlabel (xLabel, 'FontSize', 15); ylabel (yLabel, 'FontSize', 15); Сетка (plotGrid); Еореп (ы); крестики, а ishandle (plotGraph) ул = fscanf (ы); расстояние = TextScan (ул, '% F% F'); кол = кол + 1; Время (количество) = TOC; dist1 (количество) = расстояние (1); dist2 (количество) = расстояние (2); Набор (plotGraph (1), 'XData', время, 'YData', dist1); Набор (plotGraph (2), 'XData', время, 'YData', dist2); Ось ([время (количество) -10 раз (счет) 0 10]); пауза (задержка); конец fclose (ы); очистить все; закрыть все; % Установка участка plotGraph (1) = участок (время, distance1); plotGraph (2) = участок (время, distance2); Название (plotTitle, 'FontSize', 25); xlabel (xLabel, 'FontSize', 15); ylabel (yLabel, 'FontSize', 15); Сетка (plotGrid); Еореп (ы); крестики, а ishandle (plotGraph) ул = fscanf (ы); расстояние = TextScan (ул, '% F% F'); кол = кол + 1; Время (количество) = TOC; dist1 (количество) = расстояние (1); dist2 (количество) = расстояние (2); Набор (plotGraph (1), 'XData', время, 'YData', dist1); Набор (plotGraph (2), 'XData', время, 'YData', dist2); Ось ([время (количество) -10 раз (счет) 0 10]); пауза (задержка); конец fclose (ы); очистить все; закрыть все; % Установка участка plotGraph (1) = участок (время, distance1); plotGraph (2) = участок (время, distance2); Название (plotTitle, 'FontSize', 25); xlabel (xLabel, 'FontSize', 15); ylabel (yLabel, 'FontSize', 15); Сетка (plotGrid); Еореп (ы); крестики, а ishandle (plotGraph) ул = fscanf (ы); расстояние = TextScan (ул, '% F% F'); кол = кол + 1; Время (количество) = TOC; dist1 (количество) = расстояние (1); dist2 (количество) = расстояние (2); Набор (plotGraph (1), 'XData', время, 'YData', dist1); Набор (plotGraph (2), 'XData', время, 'YData', dist2); Ось ([время (количество) -10 раз (счет) 0 10]); пауза (задержка); конец fclose (ы); очистить все; закрыть все; ylabel (yLabel, 'FontSize', 15); Сетка (plotGrid); Еореп (ы); крестики, а ishandle (plotGraph) ул = fscanf (ы); расстояние = TextScan (ул, '% F% F'); кол = кол + 1; Время (количество) = TOC; dist1 (количество) = расстояние (1); dist2 (количество) = расстояние (2); Набор (plotGraph (1), 'XData', время, 'YData', dist1); Набор (plotGraph (2), 'XData', время, 'YData', dist2); Ось ([время (количество) -10 раз (счет) 0 10]); пауза (задержка); конец fclose (ы); очистить все; закрыть все; ylabel (yLabel, 'FontSize', 15); Сетка (plotGrid); Еореп (ы); крестики, а ishandle (plotGraph) ул = fscanf (ы); расстояние = TextScan (ул, '% F% F'); кол = кол + 1; Время (количество) = TOC; dist1 (количество) = расстояние (1); dist2 (количество) = расстояние (2); Набор (plotGraph (1), 'XData', время, 'YData', dist1); Набор (plotGraph (2), 'XData', время, 'YData', dist2); Ось ([время (количество) -10 раз (счет) 0 10]); пауза (задержка); конец fclose (ы); очистить все; закрыть все; XData», время, 'YData', dist1); Набор (plotGraph (2), 'XData', время, 'YData', dist2); Ось ([время (количество) -10 раз (счет) 0 10]); пауза (задержка); конец fclose (ы); очистить все; закрыть все; XData», время, 'YData', dist1); Набор (plotGraph (2), 'XData', время, 'YData', dist2); Ось ([время (количество) -10 раз (счет) 0 10]); пауза (задержка); конец fclose (ы); очистить все; закрыть все;
1

голосов
1

ответ
192

Просмотры

При сборке AVR, что это значение в регистре r24 после выполнения кода?

Я только начал, чтобы узнать о том, как массивы хранятся в регистрах, и я очень смущен тем, как указатели работы. Предположим, что указатель указывает Z на следующий массив символов в памяти, что по адресу 0xABCD: [ «1», «3», «2»] Принимая во внимание следующий фрагмент: LD R23, Z + LD R24, Z Что такое значение r24 после выполнения кода? Будет ли Z будет индексом 0? Или это было бы значение по индексу 0, который является 1, или у него есть что-то делать с адресом 0xABCD? Пожалуйста будь вежлив. Я очень хочу, чтобы изучить этот материал, мой учитель не лучший в объяснении. Любая помощь будет принята с благодарностью!
kelp99
1

голосов
1

ответ
148

Просмотры

Проблема с FastLED и простым счетчиком

Хорошо, у меня один вопрос озадачивает с этим кодом. Счетчик pushCounterz (названный с азом только исключает противоречивую переменный) будет начинаться с правильным счетчиком (1 или 0, или в зависимости от того), и одна из немногих вещей, которые произойдут, когда кнопка нажата: ничего не делает правильно переключает светодиод, кроме счетчик сбои в 1 из 2 способов счетчика будут прыгать до -255 затем на 2-ой печати сбрасывается на 1 и переворачивает с каждым нажатием между 1 и -255 счетчиком не будет увеличивать счетчик и / или светодиод будет случайным образом увеличивает без прикосновения. #include #define AnalogIn A0 #define Swin 2 #define LED_Out 12 #define NUM_LEDS 100 INT pushCounterz = 0; INT buttonState; INT lastButtonState; // предыдущее чтение из входного контактного Int ledPin = 13; ИНТ ledState = ВЫСОКИЙ; CRGB светодиоды [NUM_LEDS]; аннулируются установка () {// помещаем код установки здесь, чтобы запустить один раз: FastLED.addLeds (светодиоды, NUM_LEDS); // pinMode (Swin, INPUT); pinMode (LED_Out, OUTPUT); pinMode (ledPin, OUTPUT); // Отключить полосу для (INT I = 0; я 3) {Serial.println ( "Сброс до 0:"); pushCounterz = 0; } Еще {pushCounterz = pushCounterz + 1; Serial.println ( "Incerment"); } Serial.println (pushCounterz); переключатель (pushCounterz) {случай 0: для (INT I = 0; я pushCounterz = 0; } Еще {pushCounterz = pushCounterz + 1; Serial.println ( "Incerment"); } Serial.println (pushCounterz); переключатель (pushCounterz) {случай 0: для (INT I = 0; я pushCounterz = 0; } Еще {pushCounterz = pushCounterz + 1; Serial.println ( "Incerment"); } Serial.println (pushCounterz); переключатель (pushCounterz) {случай 0: для (INT I = 0; я
Aaron Baxter
1

голосов
0

ответ
40

Просмотры

VS1053 - Как играть в тон без его выведения?

Я использую Adafruit Music Maker Щит и Arduino Uno для генерации тональных сигналов. Одна из проблем, у меня есть, что, когда я играю тон, громкость автоматически гаснет. Я хотел бы иметь постоянный тон, который не выцветает из. Я пыталась дозвониться midi_note_on каждый раз в цикле (), но это создает неприятный звук, а не хороший постоянный тон. Кто-нибудь знает какие-либо решения? Кроме того, обратите внимание, это то, что midi_note_on выглядит ничтожной midi_note_on (uint8_t чан, uint8_t п, uint8_t Vel) {если (чан> 15) возвращение; если (п> 127) возвращение; если (Vel> 127) возвращение; VS1053_MIDI.write (MIDI_NOTE_ON | чан); VS1053_MIDI.write (п); VS1053_MIDI.write (VEL); } Спасибо!
David Wilson
1

голосов
1

ответ
168

Просмотры

Не удается запустить операцию HTTP с помощью SIM5320E

Я хочу, чтобы посылать / принимать данные на / с веб-сайта с помощью SIM5320E. Связь между ПК и модулем SIM5320E это хорошо выглядеть, так как команда AT ответ OK. Но команда для запуска операции HTTP получает сообщение об ошибке. Кажется, что мой SIM5320E НЕ подключен к сети 3G. нет GPRS-больше не доступен в Японии (DOCOMO) сейчас. Как активный SIM4320E подключиться к 3G? Это мой текущий результат. AT OK AT + COPS? + COPS: 0,0, "NTT DoCoMo", 2 OK AT + CGSOCKCONT = 1, "IP", "line.me" ОК AT + линии CSOCKSETPN = 1 OK AT + CSOCKAUTH = 1,3, "строка", " @line»OK AT + CHTTPACT =? + CHTTPACT: "АДРЕС", (1-65535) OK // я получил ошибку здесь AT + CPING = "google.com", 1 OK + CPING: 3,0,0,0,0,0,0 AT + CHTTPACT = "google.com", 80 + CHTTPACT: 237 ОШИБКА AT + CHTTPACT = "www.google.com", 80 + CHTTPACT:
Sam
1

голосов
0

ответ
54

Просмотры

UART Arduino протокол связи

Я хочу, чтобы имитировать Последовательная связь на Arduino. Данные последовательной связи, как LOW | биты 0-7 | ВЫСОКО. Так что я сделал код ниже: uint8_t read8 () {в то время как (digitalRead (6)); delayMicroseconds (52); uint8_t ответ = 0; для (uint8_t = 0; г <8; я ++) {delayMicroseconds (104); ответ | = digitalRead (6)
A. L. K.
1

голосов
0

ответ
164

Просмотры

нужна помощь для подключения узла MCU нео ого модуля GPS

Несколько раз он выводит сообщение, что GPS кодирование доступна и печать широты и долгота 0 0, но он постоянно выводит сообщение, что программное обеспечение последовательное доступен, но не извлечение координат. # include # include # include # include #define WIFI_SSID "трекер" #define WIFI_PASSWORD "hello123" статический Const INT RXPin = 4, TXPin = 5; // GPIO 4 = D2 (conneect Тх GPS) и GPIO 5 = D1 (соединение Rx из GPS статической сопзЬ uint32_t GPSBaud = 4800; TinyGPSPlus GPS; SoftwareSerial сс (RXPin, TXPin); пустота установки () {Serial.begin (9600 ); WiFi.begin (WIFI_SSID, WIFI_PASSWORD); Serial.print ( "соединения"), в то время (WiFi.status () = WL_CONNECTED) {Serial.print () ""; задержки (500);}! Serial.println (); Serial.print ( "подключен:"); Serial.println (WiFi.localIP ()); } Пустота петли () {если (ss.available ()> 0) {Serial.println ( "SoftwareSerial"); если (gps.encode (ss.read ())) {Serial.println ( "Gps закодировать"); Поплавок широта = (gps.location.lat ()); // Сохранение Lat. и Lon. плавать долгота = (gps.location.lng ()); Serial.println (широта); Serial.println (широта, долгота); Задержка (1000); } Сильный текст}} Как я могу подключить узел?
Faruq Sahir
1

голосов
1

ответ
5.4k

Просмотры

MacOS X Mojave 10,14 Beta FTDI USB Serial Driver

Я только что установил MacOS Мохаве 10.14 Beta и когда я подключить Arduino к порту USB, ничто не появляется в моем списке Arduino IDE портов. если я попробовать Ls /dev/tty.* я просто вижу /dev/tty.Bluetooth-Incoming-Port подключен. На MacOS 10,13 все было нормально работать. Я пытался переустановить драйвер (http://www.ftdichip.com/Drivers/VCP/MacOSX/FTDIUSBSerialDriver_v2_4_2.dmg) много раз, я также попытался следующие https://learn.sparkfun.com/tutorials/how-to-install -ftdi водители / макинтош, но порт никогда не появляются. Предложения?
voidbrain
1

голосов
1

ответ
52

Просмотры

ИК-датчик с Arduino для ресторана парковки

У меня есть проблема в логике кода, я не нашел решения. Мои сомнения, я использую интерфейс датчика два ИК с Arduino, поэтому, когда автомобиль проходит 1-й и 2-й датчика датчика, то я посылаю данные, передаваемые автомобиль. Это хорошо, но всякий раз, когда car1 проходит 1-й датчик и другой автомобиль, скажем, car2 в 2 датчика, то и флаг становится 1, это правда, но я не хочу этого. Как закодировать это так, что автомобиль должен пройти два датчика? Если автомобиль находится в 1 датчик 1 и 2 автомобиля находится в датчике 2, чем флаг не должен быть 1. Пожалуйста, найдите код ниже: #include #define РАССТОЯНИЕ 100 Const INT trigPin1 = 7; Const INT echoPin1 = 6; Const INT trigPin2 = 5; Const INT echoPin2 = 4; INT MOVE_FLAG = 0; недействительные установки () {// инициализация последовательного канала связи: Serial.begin (9600); MOVE_FLAG = 0; wdt_enable (WDTO_8S); } Пустота петли () {// создать переменные для длительности пинг, // и результат расстояния в дюймах и сантиметрах: длинные длительность1, duration2, inches1, inches2, см -1, см2; // Датчик срабатывает при ВЫСОКИМ импульса 10 мкс или более. // Задаем короткий импульс низкого заранее, чтобы обеспечить чистый высокий импульс: pinMode (trigPin1, OUTPUT); digitalWrite (trigPin1, LOW); delayMicroseconds (2); digitalWrite (trigPin1, HIGH); delayMicroseconds (10); digitalWrite (trigPin1, LOW); // прочитать сигнал от датчика: высокий импульс которого // длительность времени (в микросекундах) от передающего // пинга на прием эхо-сигнала от его объекта. pinMode (echoPin1, INPUT); длительность1 = pulseIn (echoPin1, HIGH); inches1 = microsecondsToInches (длительность1); CM1 = microsecondsToCentimeters (длительность1); задержка (10); pinMode (trigPin2, OUTPUT); digitalWrite (trigPin2, LOW); delayMicroseconds (2); digitalWrite (trigPin2, HIGH); delayMicroseconds (10); digitalWrite (trigPin2, LOW); pinMode (echoPin2, INPUT); duration2 = pulseIn (echoPin2, HIGH); // преобразовать время в расстояние inches2 = microsecondsToInches (duration2); см2 = microsecondsToCentimeters (duration2); если (см1 РАССТОЯНИЕ && MOVE_FLAG == 1) {MOVE_FLAG = 0; задержки (500); } Задержки (50); wdt_reset (); } длинные microsecondsToInches (длинные микросекунды) {возврата микросекунды / 74/2; } длинные microsecondsToCentimeters (длинные микросекунды) {возврата микросекунды / 29/2; } duration2 = pulseIn (echoPin2, HIGH); // преобразовать время в расстояние inches2 = microsecondsToInches (duration2); см2 = microsecondsToCentimeters (duration2); если (см1 РАССТОЯНИЕ && MOVE_FLAG == 1) {MOVE_FLAG = 0; задержки (500); } Задержки (50); wdt_reset (); } длинные microsecondsToInches (длинные микросекунды) {возврата микросекунды / 74/2; } длинные microsecondsToCentimeters (длинные микросекунды) {возврата микросекунды / 29/2; } duration2 = pulseIn (echoPin2, HIGH); // преобразовать время в расстояние inches2 = microsecondsToInches (duration2); см2 = microsecondsToCentimeters (duration2); если (см1 РАССТОЯНИЕ && MOVE_FLAG == 1) {MOVE_FLAG = 0; задержки (500); } Задержки (50); wdt_reset (); } длинные microsecondsToInches (длинные микросекунды) {возврата микросекунды / 74/2; } длинные microsecondsToCentimeters (длинные микросекунды) {возврата микросекунды / 29/2; } } длинные microsecondsToCentimeters (длинные микросекунды) {возврата микросекунды / 29/2; } } длинные microsecondsToCentimeters (длинные микросекунды) {возврата микросекунды / 29/2; }
manisrinvas
1

голосов
1

ответ
30

Просмотры

Is keyPressed being activated correctly?

Я был введен в обработку для получения данных от моего Arduino около 5 часов назад. Это, кажется, имеет смысл для меня, и у меня не было опыта Java, но я знаком (но все еще довольно шатким) с C, C + и Matlab, так что ничего из синего. Я собрал мой код, основанный на много другого кода (один метод, который я по сравнению с здесь (официальный сайт) и здесь), и это, кажется, на месте. Моя проблема заключается в том, что файл обработка создает пустое. Кроме того, файл создается непосредственно перед данными в Arduino начинает появляться в консоли. Таким образом, я задаюсь вопросом, почему файл создается, но фактически никогда не изменяется? Я, возможно, понимаю, файл пуст в то время как обработка работает, но когда я нажал кнопку остановки, я бы ожидать, что Keypressed будет называться, по определению Processing о createWriter (ранее связан). обработки импорта. серийный *. // Динамические строковые константы PortNum = "COM4"; // Выберите COM-порт - будет варьироваться в зависимости от компьютера Струнный FileName = «test.txt»; // Имя изменится для сбора данных // Статических константы Серийного myPort; // Создать объект из класса Серийного Струнного вала; // Данные, полученные от последовательного порта вывода PrintWriter; аннулируются установка () {// Строка PortName = Serial.list () [PortNum]; myPort = новый последовательный порт (это, PortNum, 9600); Выход = createWriter (имя_файла); } Аннулируются ничья () {если (myPort.available ()> 0) {// Если имеются данные, Вэл = myPort.readStringUntil ( '\ п'); // прочитать его и хранить его в вал} если (значение = NULL) {// Для действительного output.println данных (значение); Println // печать данных (значение); // Чтобы увидеть, что он работает}} пустота Keypressed () {output.flush (); // Записывает данные, оставшиеся в файле output.close (); // Завершает выход файла (); // Останавливает программу}
Asinine
1

голосов
1

ответ
308

Просмотры

Arduino отправка противоречивых сообщений UDP

Я пытаюсь общаться с помощью UDP в UNO совет Arduino + Ethernet с ПК, но не может сделать это правильно. Факты: Ардуин код имеет 2 блока: первый блок отправку константное сообщения каждые 5 секунд на ПК. Второй блок был реализован в виде ECHO (возвращает то, что получает) UDP правильно initializated В начале, Arduino начинает посылать сообщение «Hello PC!» каждые 5 секунд, но UDP.beginPacket не возвращает 1 (как это предполагается сделать, когда он работает должным образом). в стороне ПК у меня есть Wireshark и PacketSender проверить / ПЕР UDP связи. Wireshart не обнаруживает входящие пакеты с Arduino, когда он был сброшен. UDP-пакет "Hello Arduino!" отправляется с компьютера на Arduino, Повсеместно PacketSender. Это упаковано правильно получил в Arduino и отправлены обратно в компьютер. Wireshark определить УЮ UDP пакета от PC и того же ой UDP пакета от Arduino. Это работает должным образом. Buuuuuuuuuttttttt ...... затем, после отправки UDP сообщения с компьютера и получить ECHO, сообщения из Arduino каждые 5 секунд начинают достигать ПК. Первое сообщение, полученным на ПК после ЭХА, имеют 21 байт (хотя сообщение отослано должно иметь 11 байт). Полученное сообщение «C! Привет hellhello PC!», Так что есть какое-то буферный мусор с «приветом ПК!» в конце. Странно то, что после этого, каждые 5 секунд компьютер получает UDP-пакет, каждый раз 9 байт больше (привет PC! 9 байт сообщения), как и в первом сообщении, полученном от Arduino, в конце сообщения вы можно найти «привет ПК!». Вот пример 9 полученное сообщение «PC! Привет PC !! lhello PC! 45hello! LLO! // локальный порт для прослушивания полукокса сообщения \ [\] = "привет PC!"; // сообщение, предназначенное для отослано из Arduino символ packetBuffer \ [UDP_TX_PACKET_MAX_SIZE \]; // UDP_TX_PACKET_MAX_SIZE = 24 без знака длиной millis_before = Миллис (); // переменная для задержки 5 секунд сообщение EthernetUDP Udp; недействительные установки () {Serial.begin (9600); // последовательный COM для отладки Ethernet.begin (Mac, IP); // начиная Ethernet, если (Udp.begin (локальный_порт) == 1) Serial.println ( "порт UDP открыт"); // начиная UDP на 51115 еще в то время как (1); // если UDP не открыто, infinte bucle} аннулируются петли () {если (millis_before + 5000 <Миллис ()) // цикл для ожидания 5 секунд между сообщениями {если (Udp.beginPacket (link_IP, 51115) == 1) Серийный .print ( "TX готов -"); // UDP пакетов на порт PC 51115, если beginPacket возвращает 1 ОК Serial.print ( "Длинна:"); Serial.print (Udp.write (сообщение, 9)); // возвращает длину сообщения, если (Udp.endPacket () == 1) Serial.println ( "- Переданное!"); // если endPacket возвращает 1, ОК millis_before = Миллис (); // сброс таймера задержки} (10); INT PacketSize = Udp.parsePacket (); // проверка размер UDP пакета, если (PacketSize) {IPAddress дистанционного = Udp.remoteIP (); // сохранить удаленный IP для (INT I = 0; я <4; я ++) // bucle для печати удаленного IP {Serial.print (дистанционное \ [я \], декабрь); если (I <3) Serial.print ( ""); } Serial.print ( "порт"); Serial.println (Udp.remotePort ()); // печать удаленный порт Udp.read (packetBuffer, UDP_TX_PACKET_MAX_SIZE); // прочитать пакет в packetBufffer // отправить эхо на IP-адрес и порт, который послал нам пакет мы получили Udp.beginPacket (ОДП. remoteIP (), Udp.remotePort ()); Udp.write (packetBuffer, PacketSize); Udp.endPacket (); }} Здесь вы можете найти PacketSender и Wireshark захватывает после отправки первого сообщения для Arduino и получить ECHO: Wireshark захвата захвата пакетов отправителя я apreciate любой помощи. заранее спасибо
Fran H
1

голосов
0

ответ
50

Просмотры

C # - Невозможно подключить сокет сервера

Добрый день дорогие сообщества, я работаю над проектом Arduino + Unity, где я должен построить Arduino контроля через Unity. Для этого, я поставил свою Arduino и подключен к Wi-Fi. Я построил сокет сервера с C #. Проблема заключается в том, что: Я могу подключиться к этому сокету серверу через клиентский сокет Node.js, однако, чтобы проверить, если мой Arduino настройка сломана, я построил сервер Node.js сокетов и смог соединить свой Node.js оправа сервер успешно через Arduino. (Единственная причина, я использую Node.js в том, что, поскольку я более свободно на этой платформе, так что я могу проверить, что это неправильно, поэтому окончательный проект не имеет никакого Node.js.) Итак, Node.js Client -> Unity C # Сервер (Works) Arduino Client -> Node.js сервера (работ) (Ниже Arduino выход) AT + CIPSTART = 3, "TCP", "192.168.1.67", 1234 OK Linked Arduino Client -> Unity C # сервер (не работает) (Ниже Arduino выход) AT + CIPSTART = 3, "TCP", "192.168.1.67", 1234 ОШИБКА Unlink Ниже я помещаю мой все C #, узел. JS и коды Arduino. Я не думаю, что есть Arduino аппаратные проблемы здесь, но дон · т понять, почему я не могу подключить Unity сокет сервера. с использованием системы; используя System.Net.Sockets; используя System.Threading; используя system.net; используя UnityEngine; общественный класс SocketScript: MonoBehaviour {Thread tcpListenerThread; аннулируются Start () {tcpListenerThread = новая тема (() => ListenForMessages (1234)); tcpListenerThread.Start (); } общественного недействительными ListenForMessages (интермедиат порт) {TcpListener сервер = NULL; попробуйте {IPAddress localAddr = IPAddress.Parse ( "192.168.1.67"); Сервер = новый TcpListener (localAddr, порт); server.Start (); Byte [] байт = новый байт [256]; Строка данных = NULL; в то время как (истинно) {debug.log ( "Ожидание соединения."); используя (TcpClient клиент = server.AcceptTcpClient ()) {debug.log ( "Connected!"); Данные = NULL; NetworkStream поток = client.GetStream (); Int я; // Пока есть что-то в потоке: в то время как (! (I = stream.Read (байты 0, bytes.Length)) = 0) {// Переводят байты данных в строку ASCII. Данные = System.Text.Encoding.ASCII.GetString (байт, 0, я); Debug.log (String.Format ( "Received: {0}", данные)); байт [] MSG = System.Text.Encoding.ASCII.GetBytes (данные); // Отправляет обратно ответ. stream.write (MSG, 0, msg.Length); Debug.log (String.Format ( "Sent: {0}", данные)); }}}} Задвижка (SocketException е) {Debug.LogError (String.Format ( "SocketException: {0}", е)); } Наконец {server.Stop (); }}} Node.js Клиент: вар нетто = требуется ( 'чистые'); вар HOST = '192.168.1.67'; вар ПОРТ = 1234; вар клиент = новый net.Socket (); client.connect (ПОРТ, ХОЗЯИН, функция () {console.log ( 'Клиент подключен к:' + HOST + ':' + Порт); // Написать сообщение гнезда, как только клиент подключен, сервер будет получать его в виде сообщения от клиента client.write ( «Hello World!»); }); client.on ( 'данные', функция (данные) {console.log ( 'получен Клиент:'. + данные); если (data.toString () EndsWith ( 'выход')) {client.destroy ();}} ); // Добавить 'закрыть' обработчик событий для сокета клиента client.on ( 'закрыть', функция () {console.log ( 'Клиент закрыт');}); client.on ( 'ошибка', функция (ERR) {console.error (ERR);}); Node.js сервера: вар нетто = требуется ( 'чистые'); Параметры конфигурации // уаг HOST = '192.168.1.67'; вар ПОРТ = 1234; // Создание экземпляра сервера вар сервер = net.createServer (onClientConnected); server.listen (PORT, HOST, функция () {консоли. войти ( 'сервер прослушивает% J', server.address ()); }); Функция onClientConnected (носок) {вар remoteAddress = sock.remoteAddress + ':' + sock.remotePort; console.log ( 'новый клиент подключен:% s', remoteAddress); sock.on ( 'данные', функция (данные) {console.log ( '% s говорит:% s', remoteAddress, данные); sock.write (данные); sock.write ( 'выхода');}); sock.on ( 'закрыть', функция () {console.log ( 'соединение от% S' замкнутой, remoteAddress);}); sock.on ( 'ошибка', функция (ERR) {console.log ( 'Ошибка соединения% S:% s', remoteAddress, err.message);}); }; новый клиент подключен:% s', remoteAddress); sock.on ( 'данные', функция (данные) {console.log ( '% s говорит:% s', remoteAddress, данные); sock.write (данные); sock.write ( 'выхода');}); sock.on ( 'закрыть', функция () {console.log ( 'соединение от% S' замкнутой, remoteAddress);}); sock.on ( 'ошибка', функция (ERR) {console.log ( 'Ошибка соединения% S:% s', remoteAddress, err.message);}); }; новый клиент подключен:% s', remoteAddress); sock.on ( 'данные', функция (данные) {console.log ( '% s говорит:% s', remoteAddress, данные); sock.write (данные); sock.write ( 'выхода');}); sock.on ( 'закрыть', функция () {console.log ( 'соединение от% S' замкнутой, remoteAddress);}); sock.on ( 'ошибка', функция (ERR) {console.log ( 'Ошибка соединения% S:% s', remoteAddress, err.message);}); }; Connection% S ошибка:% s', remoteAddress, err.message); }); }; Connection% S ошибка:% s', remoteAddress, err.message); }); };
Uğur Kaya
1

голосов
0

ответ
207

Просмотры

Ардуино MAX6675 к-термопара неожиданный выхода и ответ

Я разрабатываю регистратор данных с к-термопары типа MAX6675 зацепили в Arduino Uno. Я следовал все учебники и проверили и перепроверили свои связи, но я получаю реальный странный выход в серийном плоттера, как показано на рисунке прилагается. Последовательный выход плоттера Что больше в том, что когда я держу до открытого пламени к датчику themocouple или любому другому источник тепла, он изменяет амплитуду колебаний, которая не то, что я ожидал. Наконец, температура ценности сами по себе не очень, кажется, особого смысла, поскольку это оседание примерно в 220 до 240 диапазона. Это не соответствует показаниям Цельсия, как я закодирован его читать, и слишком мало, чтобы быть в Кельвинах и слишком высокий, чтобы быть Фаренгейтом. Спасибо заранее, это, вероятно, что-то простое, но я бодаться головой против этого в течение двух дней, пробуя различные библиотеки и т.д., но не повезло. Мой код ниже, я получил переключатель, чтобы активировать запись данных и светодиоды, чтобы сказать мне, если это вход или нет. #include // Термопара INT ktcSO = 8; INT ktcCS = 9; INT ktcCLK = 10; MAX6675 КТЦ (ktcCLK, ktcCS, ktcSO); // Переключить INT switchPin = 7; INT switchValue = 0; плавать sensorVals [] = {0}; недействительные установки () {pinMode (6, OUTPUT); pinMode (5, OUTPUT); Serial.begin (115200); задержки (500); } Пустота петли () {задержка (50); switchValue = digitalRead (switchPin); если (switchValue == 1) {digitalWrite (6, HIGH); digitalWrite (5, LOW); sensorVals [0] = analogRead (ktc.readCelsius ()); Serial.println (sensorVals [0]); } Еще {digitalWrite (6, LOW); digitalWrite (5, HIGH); }} Ве есть переключатель, чтобы активировать запись данных и светодиоды, чтобы сказать мне, если это вход или нет. #include // Термопара INT ktcSO = 8; INT ktcCS = 9; INT ktcCLK = 10; MAX6675 КТЦ (ktcCLK, ktcCS, ktcSO); // Переключить INT switchPin = 7; INT switchValue = 0; плавать sensorVals [] = {0}; недействительные установки () {pinMode (6, OUTPUT); pinMode (5, OUTPUT); Serial.begin (115200); задержки (500); } Пустота петли () {задержка (50); switchValue = digitalRead (switchPin); если (switchValue == 1) {digitalWrite (6, HIGH); digitalWrite (5, LOW); sensorVals [0] = analogRead (ktc.readCelsius ()); Serial.println (sensorVals [0]); } Еще {digitalWrite (6, LOW); digitalWrite (5, HIGH); }} Ве есть переключатель, чтобы активировать запись данных и светодиоды, чтобы сказать мне, если это вход или нет. #include // Термопара INT ktcSO = 8; INT ktcCS = 9; INT ktcCLK = 10; MAX6675 КТЦ (ktcCLK, ktcCS, ktcSO); // Переключить INT switchPin = 7; INT switchValue = 0; плавать sensorVals [] = {0}; недействительные установки () {pinMode (6, OUTPUT); pinMode (5, OUTPUT); Serial.begin (115200); задержки (500); } Пустота петли () {задержка (50); switchValue = digitalRead (switchPin); если (switchValue == 1) {digitalWrite (6, HIGH); digitalWrite (5, LOW); sensorVals [0] = analogRead (ktc.readCelsius ()); Serial.println (sensorVals [0]); } Еще {digitalWrite (6, LOW); digitalWrite (5, HIGH); }} INT ktcCLK = 10; MAX6675 КТЦ (ktcCLK, ktcCS, ktcSO); // Переключить INT switchPin = 7; INT switchValue = 0; плавать sensorVals [] = {0}; недействительные установки () {pinMode (6, OUTPUT); pinMode (5, OUTPUT); Serial.begin (115200); задержки (500); } Пустота петли () {задержка (50); switchValue = digitalRead (switchPin); если (switchValue == 1) {digitalWrite (6, HIGH); digitalWrite (5, LOW); sensorVals [0] = analogRead (ktc.readCelsius ()); Serial.println (sensorVals [0]); } Еще {digitalWrite (6, LOW); digitalWrite (5, HIGH); }} INT ktcCLK = 10; MAX6675 КТЦ (ktcCLK, ktcCS, ktcSO); // Переключить INT switchPin = 7; INT switchValue = 0; плавать sensorVals [] = {0}; недействительные установки () {pinMode (6, OUTPUT); pinMode (5, OUTPUT); Serial.begin (115200); задержки (500); } Пустота петли () {задержка (50); switchValue = digitalRead (switchPin); если (switchValue == 1) {digitalWrite (6, HIGH); digitalWrite (5, LOW); sensorVals [0] = analogRead (ktc.readCelsius ()); Serial.println (sensorVals [0]); } Еще {digitalWrite (6, LOW); digitalWrite (5, HIGH); }} если (switchValue == 1) {digitalWrite (6, HIGH); digitalWrite (5, LOW); sensorVals [0] = analogRead (ktc.readCelsius ()); Serial.println (sensorVals [0]); } Еще {digitalWrite (6, LOW); digitalWrite (5, HIGH); }} если (switchValue == 1) {digitalWrite (6, HIGH); digitalWrite (5, LOW); sensorVals [0] = analogRead (ktc.readCelsius ()); Serial.println (sensorVals [0]); } Еще {digitalWrite (6, LOW); digitalWrite (5, HIGH); }}
Daniel Sieradzki
1

голосов
0

ответ
69

Просмотры

Interpreting the flags for an adafruit BLE method to set a GATT characteristic

Я использую Adafruit_BLE библиотеку и объект Adafruit_BluefruitLE_SPI для присвоения аналогового выхода GATT характеристики к Adafruit Bluefruit LE SPI другу. Я хочу, чтобы понять формат для установки этих флагов в рамках ГАТТ. В Adafruit HeartRate монитор эскиз примера В characterstic Измерение пульса ГАТТ задается в строке 123: / * Добавьте Измерение пульса характерный * / / * Chars ID для измерения должно быть 1 * / Serial.println (Р ( "Добавление сердца Скорость измерения характеристики (UUID = 0x2A37): «)); Успех = ble.sendCommandWithIntReply (F ( "AT + GATTADDCHAR = UUID = 0x2A37, СВОЙСТВ = 0x10, MIN_LEN = 2, max_len = 3, значение = 00-40"), & hrmMeasureCharId); если (! Успех) {ошибка (F ( "Не удалось добавить HRM характеристику")); } И обслуживание GATT сердечного ритма в строке 115: / * Добавить Heart Rate Service Определение * / / * Идентификатор услуги должен быть 1 * / Serial.println (F ( "Добавление определения сердечного ритма обслуживания (UUID = 0x180D):")); Успех = ble.sendCommandWithIntReply (F ( "AT + GATTADDSERVICE = UUID = 0x180D"), & hrmServiceId); если (! Успех) {ошибка (F ( "Не удалось добавить HRM сервис")); } Как флаги, решаемые в GATTADDCHAR (UUID, свойства, Min_len, max_len, значение) соответствуют полям в Измерение пульса GATT характеристики: Названия, поля Требования, формат, Минимальное значение, Максимальное значение, Дополнительная информация? (Команда объяснение GATTADDCHAR находится здесь в странице 75 PDF) Если бы я хотел, чтобы установить аналоговый выход GATT характеристику (или любую другую характеристику в целом), как именно я должен позвонить sendCommandWithIntReply (AT + GATTADDCHAR = ... ) Для того, чтобы не дать мне ошибку? Некоторые характеристики ГАТТ имеют дополнительные поля, поэтому я хочу, чтобы точно знать, что я устанавливаю и как. В конце концов, я просто хочу, чтобы читать 16-битные байты из буфера и отправить их по Bluetooth.
user P520
1

голосов
0

ответ
173

Просмотры

missing device or architecture after '-mmcu='

Я использую Arduino пакет под названием Arduino-Makefile или Arduino-ки для программирования Arduino Uno из командной строки. Недавно я хотел запрограммировать микроконтроллер ATtiny85 (MC). Это мой Makefile: ################ MAKEFILE ############################ ####### ARDUINO_DIR = / USR / доли / Arduino ################################### ################ ISP_PROG = USBasp ALTERNATE_CORE = ATtiny-мастер BOARD_TAG = ATtiny BOARD_SUB = attiny85 F_CPU = 16000000L ################# ################################## включают /usr/share/arduino/Arduino.mk # !!! Важный. Вы должны использовать «сделать ispload» при использовании Интернет-провайдера. это то, что я хочу, чтобы загрузить на Attiny85 MC: INT привела = 3; // процедура установка запускается один раз при нажатии кнопки сброса: недействительная настройки () {// инициализация цифровой булавки в качестве выходного сигнала. pinMode (во главе, OUTPUT); } // рутина цикл выполняется снова и снова навсегда: недействительным цикл () {digitalWrite (во главе, ВЫСОКИЙ); // поворачивает светодиод (HIGH является уровень напряжения) задержкой (1000); // Ожидаем второй digitalWrite (во главе, LOW); // включить светодиод выключен, делая низкое напряжение задержки (1000); // Ожидает второй} Вот инструкции для создания сборочного файла: Makefile я скачал этот файл boards.txt. Для того, чтобы загрузить код в MC я использую команду Sudo сделать загрузку, которая не работала, поэтому я использовал Sudo сделать ispload. Обе эти команды получают сообщение об ошибке: АРН-G ++: ошибка: отсутствует устройство или после того, как архитектура «-mmcu =» /usr/share/arduino/Arduino.mk:1215: рецепт для цели «построить-ATtiny-attiny85 / ATtinyBlink. о»не удалось марка: *** [строить-ATtiny-attiny85 / ATtinyBlink.o] Ошибка 1 ВЫХОД); } // рутина цикл выполняется снова и снова навсегда: недействительным цикл () {digitalWrite (во главе, ВЫСОКИЙ); // поворачивает светодиод (HIGH является уровень напряжения) задержкой (1000); // Ожидаем второй digitalWrite (во главе, LOW); // включить светодиод выключен, делая низкое напряжение задержки (1000); // Ожидает второй} Вот инструкции для создания сборочного файла: Makefile я скачал этот файл boards.txt. Для того, чтобы загрузить код в MC я использую команду Sudo сделать загрузку, которая не работала, поэтому я использовал Sudo сделать ispload. Обе эти команды получают сообщение об ошибке: АРН-G ++: ошибка: отсутствует устройство или после того, как архитектура «-mmcu =» /usr/share/arduino/Arduino.mk:1215: рецепт для цели «построить-ATtiny-attiny85 / ATtinyBlink. о»не удалось марка: *** [строить-ATtiny-attiny85 / ATtinyBlink.o] Ошибка 1 ВЫХОД); } // рутина цикл выполняется снова и снова навсегда: недействительным цикл () {digitalWrite (во главе, ВЫСОКИЙ); // поворачивает светодиод (HIGH является уровень напряжения) задержкой (1000); // Ожидаем второй digitalWrite (во главе, LOW); // включить светодиод выключен, делая низкое напряжение задержки (1000); // Ожидает второй} Вот инструкции для создания сборочного файла: Makefile я скачал этот файл boards.txt. Чтобы загрузить код в MC я использую команду Sudo сделать загрузку, которая не работала, поэтому я использовал Sudo сделать ispload. Обе эти команды получают сообщение об ошибке: АРН-G ++: ошибка: отсутствует устройство или после того, как архитектура «-mmcu =» /usr/share/arduino/Arduino.mk:1215: рецепт для цели «построить-ATtiny-attiny85 / ATtinyBlink. о»не удалось марка: *** [строить-ATtiny-attiny85 / ATtinyBlink.o] Ошибка 1 } // рутина цикл выполняется снова и снова навсегда: недействительным цикл () {digitalWrite (во главе, ВЫСОКИЙ); // поворачивает светодиод (HIGH является уровень напряжения) задержкой (1000); // Ожидаем второй digitalWrite (во главе, LOW); // включить светодиод выключен, делая низкое напряжение задержки (1000); // Ожидает второй} Вот инструкции для создания сборочного файла: Makefile я скачал этот файл boards.txt. Для того, чтобы загрузить код в MC я использую команду Sudo сделать загрузку, которая не работала, поэтому я использовал Sudo сделать ispload. Обе эти команды получают сообщение об ошибке: АРН-G ++: ошибка: отсутствует устройство или после того, как архитектура «-mmcu =» /usr/share/arduino/Arduino.mk:1215: рецепт для цели «построить-ATtiny-attiny85 / ATtinyBlink. о»не удалось марка: *** [строить-ATtiny-attiny85 / ATtinyBlink.o] Ошибка 1 } // рутина цикл выполняется снова и снова навсегда: недействительным цикл () {digitalWrite (во главе, ВЫСОКИЙ); // поворачивает светодиод (HIGH является уровень напряжения) задержкой (1000); // Ожидаем второй digitalWrite (во главе, LOW); // включить светодиод выключен, делая низкое напряжение задержки (1000); // Ожидает второй} Вот инструкции для создания сборочного файла: Makefile я скачал этот файл boards.txt. Для того, чтобы загрузить код в MC я использую команду Sudo сделать загрузку, которая не работала, поэтому я использовал Sudo сделать ispload. Обе эти команды получают сообщение об ошибке: АРН-G ++: ошибка: отсутствует устройство или после того, как архитектура «-mmcu =» /usr/share/arduino/Arduino.mk:1215: рецепт для цели «построить-ATtiny-attiny85 / ATtinyBlink. о»не удалось марка: *** [строить-ATtiny-attiny85 / ATtinyBlink.o] Ошибка 1 // поворачивает светодиод (HIGH является уровень напряжения) задержкой (1000); // Ожидаем второй digitalWrite (во главе, LOW); // включить светодиод выключен, делая низкое напряжение задержки (1000); // Ожидает второй} Вот инструкции для создания сборочного файла: Makefile я скачал этот файл boards.txt. Для того, чтобы загрузить код в MC я использую команду Sudo сделать загрузку, которая не работала, поэтому я использовал Sudo сделать ispload. Обе эти команды получают сообщение об ошибке: АРН-G ++: ошибка: отсутствует устройство или после того, как архитектура «-mmcu =» /usr/share/arduino/Arduino.mk:1215: рецепт для цели «построить-ATtiny-attiny85 / ATtinyBlink. о»не удалось марка: *** [строить-ATtiny-attiny85 / ATtinyBlink.o] Ошибка 1 // поворачивает светодиод (HIGH является уровень напряжения) задержкой (1000); // Ожидаем второй digitalWrite (во главе, LOW); // включить светодиод выключен, делая низкое напряжение задержки (1000); // Ожидает второй} Вот инструкции для создания сборочного файла: Makefile я скачал этот файл boards.txt. Для того, чтобы загрузить код в MC я использую команду Sudo сделать загрузку, которая не работала, поэтому я использовал Sudo сделать ispload. Обе эти команды получают сообщение об ошибке: АРН-G ++: ошибка: отсутствует устройство или после того, как архитектура «-mmcu =» /usr/share/arduino/Arduino.mk:1215: рецепт для цели «построить-ATtiny-attiny85 / ATtinyBlink. о»не удалось марка: *** [строить-ATtiny-attiny85 / ATtinyBlink.o] Ошибка 1 // включить светодиод выключен, делая низкое напряжение задержки (1000); // Ожидает второй} Вот инструкции для создания сборочного файла: Makefile я скачал этот файл boards.txt. Для того, чтобы загрузить код в MC я использую команду Sudo сделать загрузку, которая не работала, поэтому я использовал Sudo сделать ispload. Обе эти команды получают сообщение об ошибке: АРН-G ++: ошибка: отсутствует устройство или после того, как архитектура «-mmcu =» /usr/share/arduino/Arduino.mk:1215: рецепт для цели «построить-ATtiny-attiny85 / ATtinyBlink. о»не удалось марка: *** [строить-ATtiny-attiny85 / ATtinyBlink.o] Ошибка 1 // включить светодиод выключен, делая низкое напряжение задержки (1000); // Ожидает второй} Вот инструкции для создания сборочного файла: Makefile я скачал этот файл boards.txt. Для того, чтобы загрузить код в MC я использую команду Sudo сделать загрузку, которая не работала, поэтому я использовал Sudo сделать ispload. Обе эти команды получают сообщение об ошибке: АРН-G ++: ошибка: отсутствует устройство или после того, как архитектура «-mmcu =» /usr/share/arduino/Arduino.mk:1215: рецепт для цели «построить-ATtiny-attiny85 / ATtinyBlink. о»не удалось марка: *** [строить-ATtiny-attiny85 / ATtinyBlink.o] Ошибка 1 Для того, чтобы загрузить код в MC я использую команду Sudo сделать загрузку, которая не работала, поэтому я использовал Sudo сделать ispload. Обе эти команды получают сообщение об ошибке: АРН-G ++: ошибка: отсутствует устройство или после того, как архитектура «-mmcu =» /usr/share/arduino/Arduino.mk:1215: рецепт для цели «построить-ATtiny-attiny85 / ATtinyBlink. о»не удалось марка: *** [строить-ATtiny-attiny85 / ATtinyBlink.o] Ошибка 1 Для того, чтобы загрузить код в MC я использую команду Sudo сделать загрузку, которая не работала, поэтому я использовал Sudo сделать ispload. Обе эти команды получают сообщение об ошибке: АРН-G ++: ошибка: отсутствует устройство или после того, как архитектура «-mmcu =» /usr/share/arduino/Arduino.mk:1215: рецепт для цели «построить-ATtiny-attiny85 / ATtinyBlink. о»не удалось марка: *** [строить-ATtiny-attiny85 / ATtinyBlink.o] Ошибка 1
Ramazan
1

голосов
1

ответ
121

Просмотры

CASE stepper IR remote and Arduino

This is my code and i want to control stepper with IR remote. My code work fine but i want to know how can continu my action while a hold button on remote. The HEX code is different when i hold button and i don't know to recall my last function. #include #include #include #include #include int dir; int receiver = 6; // Signal Pin of IR receiver to Arduino Digital Pin 6 IRrecv irrecv(receiver); // create instance of 'irrecv' decode_results results; // create instance of 'decode_results' const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution // for your motor // Ici c'est la nouvelle séquence que j'ai trouvé pour faire fonctionné le moteur (KP4M2) correctement avec le connecteur. // Reste à mettre dans le bon ordre Stepper myStepper(stepsPerRevolution, 2, 3, 4, 5); void setup() { irrecv.enableIRIn(); // Start the receiver // set the speed at 60 rpm: myStepper.setSpeed(100); // initialize the serial port: Serial.begin(9600); } void loop() { if (irrecv.decode(&results)) // have we received an IR signal? { switch (results.value) Here, i start switch with my HEX code fron IR remote { case 0xB4B49A65: //myStepper.step(stepsPerRevolution);//counter clockwise rotation //break; VrDroite(); break; case 0xB4B45AA5: //myStepper.step(-stepsPerRevolution);//counter clockwise rotation //break; VrGauche(); case 0xB4B41AE5: //myStepper.step(-stepsPerRevolution/10);//counter clockwise rotation //break; VrMicro(); } irrecv.resume(); // receive the next value Serial.println(results.value, HEX); } } Use function for calling action void VrDroite() { myStepper.step(+100); } void VrGauche() { myStepper.step(-stepsPerRevolution);//counter clockwise rotation } void VrMicro() { myStepper.step(stepsPerRevolution / 10); //counter clockwise rotation } void VrNone() { myStepper.step(0); }enter code here Thank
diltech
1

голосов
0

ответ
77

Просмотры

Windows Remote Event Arduino StringMessageReceived

Хорошо, я устал прибегая к помощи. Поэтому я работаю над проектом, который использует Windows Remote Arduino. Я только начинаю, так что я нахожусь в «просто взломать его вместе сцену.» Arduino работает стандартный firmata и я звоню функцию SYSEX которая возвращает некоторые данные из некоторых датчиков. Я подписался на StringMessageReceived события, но то, что я вывод, что событие не всегда стрельбы. Я «должен» получать данные каждый раз, когда я отправить команду SYSEX. Я нашел закрытый вопрос на узловом сайте мерзавца для дистанционного подключения, который говорит, чтобы вызвать Flush () на firmata объекта, который я делаю, но я не получаю 1 1 ответ. Вот пример вывода я получаю. Устройство Ready Event Timer Уволен Tick! Таймер Tick! {\ "TEMP1 \": 21,50, \ "рН \": 0,000} Таймер Tick! {\ "TEMP1 \" : 21,50, \ "рН \": 0,000} Таймер Tick! Таймер Tick! Таймер Tick! {\ "TEMP1 \": 21,50, \ "рН \": 0,000} Таймер Tick! Таймер Tick! Таймер Tick! Таймер Tick! {\ "TEMP1 \": 21,50, \ "рН \": 0,000} Таймер Tick! Таймер Tick! Таймер Tick! Таймер Tick! {\ "TEMP1 \": 21,50, \ "рН \": 0,000} {\ "TEMP1 \": 21,50, \ "рН \": 0,000} Таймер Tick! Таймер Tick! Таймер Tick! {\ "TEMP1 \": 21,50, \ "рН \": 0,000} Таймер Tick! {\ "TEMP1 \": 21,50, \ "рН \": 0,000} Таймер Tick! Таймер Tick! Таймер Tick! {\ «TEMP1 \»: 21,50, \ «рН \»: 0,000}.»Я знаю, что Arduino становится все мои команды, потому что я могу видеть светодиоды на одном из моих датчиков обработки команды Вот мой UWP код общественного опечатаны частично. класс MainPage: Page {IStream соединение; RemoteDevice Arduino; UwpFirmata firmata; DispatcherTimer таймер; общественного MainPage () {this.InitializeComponent (); } Частная пустота btnConnect_Click (объект отправителя, RoutedEventArgs е) {Соединение = Новый UsbSerial ( "VID_0403", "PID_6001"); firmata = новый UwpFirmata (); Arduino = новый RemoteDevice (firmata); Таймер = новый DispatcherTimer (); firmata.begin (соединение); connection.begin (57600, SerialConfig.SERIAL_8N1); arduino.DeviceReady + = Настройка; arduino.DeviceConnectionFailed + = ConnectFailed; arduino.StringMessageReceived + = StringRecieved; timer.Interval = новый TimeSpan (0, 0, 5); timer.Tick + = timerTick; timer.Start (); } Частная пустота timerTick (объект отправителя, объект е) {Windows.ApplicationModel.Core. CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync (Windows.UI.Core.CoreDispatcherPriority.Normal, () => {lblPhData.Text + = "Таймер Tick! \ П";}); байт PH_QUERY = 0x44; firmata.sendSysex (PH_QUERY, новый байт [] {} .AsBuffer ()); firmata.flush (); } Частная пустота StringRecieved (строка сообщения) {Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync (Windows.UI.Core.CoreDispatcherPriority.Normal, () => {lblPhData.Text + = сообщение + «\ п «;}); } Общественного недействительными ConnectFailed (String сообщение) {Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync (Windows.UI.Core.CoreDispatcherPriority.Normal, () => {LblPhData.Text + = сообщение; }); } Общественного недействительными Setup () {Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync (Windows.UI.Core.CoreDispatcherPriority.Normal, () => {lblPhData.Text + = «Device Ready Event Уволен \ п «;}); } Частная пустота btnGetData_Click (объект отправителя, RoutedEventArgs е) {Байт PH_QUERY = 0x44; firmata.sendSysex (PH_QUERY, новый байт [] {} .AsBuffer ()); firmata.flush (); }} Я должен быть что-то действительно очень просто отсутствует. RunAsync (Windows.UI.Core.CoreDispatcherPriority.Normal, () => {lblPhData.Text + = "Device Ready Event Уволен \ п";}); } Частная пустота btnGetData_Click (объект отправителя, RoutedEventArgs е) {Байт PH_QUERY = 0x44; firmata.sendSysex (PH_QUERY, новый байт [] {} .AsBuffer ()); firmata.flush (); }} Я должен быть что-то действительно очень просто отсутствует. RunAsync (Windows.UI.Core.CoreDispatcherPriority.Normal, () => {lblPhData.Text + = "Device Ready Event Уволен \ п";}); } Частная пустота btnGetData_Click (объект отправителя, RoutedEventArgs е) {Байт PH_QUERY = 0x44; firmata.sendSysex (PH_QUERY, новый байт [] {} .AsBuffer ()); firmata.flush (); }} Я должен быть что-то действительно очень просто отсутствует.
bjbowen4
1

голосов
1

ответ
84

Просмотры

Johnny-Five Unable to Connect to Arduino

Windows, 10, Arduino Micro. Я был первоначально с использованием стандартного «Blink.js» учебника, но Джонни Пять держали подключение к неправильному последовательному порту. Я жестко закодирован мой COM-порт (порт 8, в данном случае), и миновал начальную ошибку, но новый один остановил меня мертвый. Мой вывод выглядит так: C: \ Users \ ... \ папка> узел Blink.js 1536475383667 Connected COM 8 1536475383673 Ошибки COM Открытие 8: Файл не найдено (узел: 12700) UnhandledPromiseRejectionWarning: отказ обещания Неизвестного (отказ ID: 1) ошибка: Uncaught неуточненное «ошибка» событие. ([Объект Object]) 1536475393671 устройства или встроенного программного обеспечения Ошибка тайм-аут произошел при подключении к Совета. Пожалуйста, убедитесь, что вы правильно прошили доску с правильной прошивкой. См: https: // GitHub. ком / rwaldron / джонни-пять / вики / Начало стартером # Устранение неисправностей При подключении к клону Leonardo или Leonardo, нажмите кнопку «Сброс» на борту, подождите примерно 11 секунд для полного сброса, а затем запустить программу снова. events.js: 165 бросок заблуждается; ^ Ошибка: Uncaught неуточненное «ошибка» событие. ([Объект Object]) в Board.emit (events.js: 163: 17) в Board.log (C: \ Users \ ... \ папка \ node_modules \ джонни-пять \ Lib \ board.js: 648: 8 ) при Совете (анонимной функции) [как ошибка] (C: \ Users. \ ... \ папка \ node_modules \ джонни-пять \ Lib \ board.js: 659: 14) в Совете. (C: \ Users \ ... \ папка \ node_modules \ джонни-пять \ Lib \ board.js: 395: 14) в ontimeout (timers.js: 386: 14) в tryOnTimeout (timers.js: 250: 5) в Timer.listOnTimeout (timers.js: 214: 5) Я сделал все очевидные вещи, которые они рекомендуют: перепрошивки микропрограммного обеспечения, записать загрузчик, повторно установить узел и НПМ пошли шаг за шагом по инструкции по установке для Arduino, хотя я должен был подтолкнуть standardFirmataPlus.ino через графический интерфейс пользователя, а не в командной строке, как Windows, изначально не включает команду инструменты линии для Arduino. Мой код, если это делает никакой разницы, выглядит следующим образом: вар пять = требуется ( «джонни-пять»), доска, во главе; плата = новый five.Board ({порт: "COM-8"}); board.on ( "готов", функция () {console.log ( 'готов'); привело = новый five.Led (8); // Это будет порт 13 на большинстве, но Micro не имеет такой порт led.strobe (100);}); Я изо всех сил для возрастов, чтобы получить какой-либо реакции от Arduino с помощью Johnny-Five, и любая помощь будет принята с благодарностью. пошел шаг за шагом через инструкции по установке для Arduino, хотя я должен был подтолкнуть standardFirmataPlus.ino через GUI вместо командной строки, так как Windows, изначально не включают в себя инструменты командной строки для Arduino. Мой код, если это делает никакой разницы, выглядит следующим образом: вар пять = требуется ( «джонни-пять»), доска, во главе; плата = новый five.Board ({порт: "COM-8"}); board.on ( "готов", функция () {console.log ( 'готов'); привело = новый five.Led (8); // Это будет порт 13 на большинстве, но Micro не имеет такой порт led.strobe (100);}); Я изо всех сил для возрастов, чтобы получить какой-либо реакции от Arduino с помощью Johnny-Five, и любая помощь будет принята с благодарностью. пошел шаг за шагом через инструкции по установке для Arduino, хотя я должен был подтолкнуть standardFirmataPlus.ino через GUI вместо командной строки, так как Windows, изначально не включают в себя инструменты командной строки для Arduino. Мой код, если это делает никакой разницы, выглядит следующим образом: вар пять = требуется ( «джонни-пять»), доска, во главе; плата = новый five.Board ({порт: "COM-8"}); board.on ( "готов", функция () {console.log ( 'готов'); привело = новый five.Led (8); // Это будет порт 13 на большинстве, но Micro не имеет такой порт led.strobe (100);}); Я изо всех сил для возрастов, чтобы получить какой-либо реакции от Arduino с помощью Johnny-Five, и любая помощь будет принята с благодарностью. ин через GUI вместо командной строки, поскольку Windows, изначально не включает в себя инструменты командной строки для Arduino. Мой код, если это делает никакой разницы, выглядит следующим образом: вар пять = требуется ( «джонни-пять»), доска, во главе; плата = новый five.Board ({порт: "COM-8"}); board.on ( "готов", функция () {console.log ( 'готов'); привело = новый five.Led (8); // Это будет порт 13 на большинстве, но Micro не имеет такой порт led.strobe (100);}); Я изо всех сил для возрастов, чтобы получить какой-либо реакции от Arduino с помощью Johnny-Five, и любая помощь будет принята с благодарностью. ин через GUI вместо командной строки, поскольку Windows, изначально не включает в себя инструменты командной строки для Arduino. Мой код, если это делает никакой разницы, выглядит следующим образом: вар пять = требуется ( «джонни-пять»), доска, во главе; плата = новый five.Board ({порт: "COM-8"}); board.on ( "готов", функция () {console.log ( 'готов'); привело = новый five.Led (8); // Это будет порт 13 на большинстве, но Micro не имеет такой порт led.strobe (100);}); Я изо всех сил для возрастов, чтобы получить какой-либо реакции от Arduino с помощью Johnny-Five, и любая помощь будет принята с благодарностью. на ( «готов», функция () {console.log ( «готов»); привело = новый five.Led (8); // Это будет порт 13 на большинстве, но Micro не имеет, что порт вел. строба (100);}); Я изо всех сил для возрастов, чтобы получить какой-либо реакции от Arduino с помощью Johnny-Five, и любая помощь будет принята с благодарностью. на ( «готов», функция () {console.log ( «готов»); привело = новый five.Led (8); // Это будет порт 13 на большинстве, но Micro не имеет, что порт вел. строба (100);}); Я изо всех сил для возрастов, чтобы получить какой-либо реакции от Arduino с помощью Johnny-Five, и любая помощь будет принята с благодарностью.
Noah Tatko
1

голосов
0

ответ
103

Просмотры

RPi/Arduino I2C - Losing connection after some time (C++)

i have a Raspberry Pi 3 Model B connected to an Arduino Mega 2560 trough I2C using a level shifter because of the different GPIO voltages. Raspberry Pi --- 3.3V --- Level Shifter --- 5V --- Arduino Mega In my code i have the Arduino reading the analog value of a Potentiometer and sending it to the Raspberry Pi in 2 Bytes (max value = 1023). The Raspberry Pi receives the 2 Bytes and combine them together in 16 Bits, and divides the value by 4, to achieve a max value of 255. The Raspberry Pi send this value back to the Arduino, which sets the PWM value of a LED to dimm it. The code works fine, but just if i have a 2 seconds delay on the main Loop of the Raspberry Pi. As long as i remove it, the code runs for just 1 - 2 seconds before freezing the I2C Bus. If i run i2cdetect on terminal after the I2C stop working, i cant see its address anymore until i remove the I2C Connections and build it again before running the Programm again. The smalles value for sleep in which the code works without losing I2C Connection ist 5ms. Master Code (RPi): #include #include #include #include #include #include #include #include #include #include using namespace std; int file_i2c; int length_rcv = 30; int length_snd = 9; unsigned char buffer_rcv[30] = {0}; unsigned char buffer_snd[9] = {0}; uint8_t addr = 0x06; using namespace std; uint16_t ang; int main(void) { char *filename = (char*)"/dev/i2c-1"; if((file_i2c = open(filename, O_RDWR))< 0 ){ cout
Pedro Romano
1

голосов
0

ответ
102

Просмотры

Custom class for EEPROM Read / Write bytes

Я не могу понять, как для чтения / записи в ЭСППЗУ, используя следующий класс: #include #include «myclass.hpp» uint16_t ARRAYSIZE = 0; структура пары {имя символа [10]; символьное значение [20]; }; станд :: вектор arrayOfParams; станд :: вектор :: итератор итератор; МойКласс :: Myclass () {чтение (0, & ArraySize, SizeOf (ArraySize)); }; недействительный МойКласс :: сброса () {ArraySize = 0; uint16_t адр = SizeOf (ArraySize); написать (0, & ArraySize, адр); uint8_t буфера [16]; MemSet (буфер, 0xFF, SizeOf (буфер)); в то время как (адр <1024) {eeprom_write_block (буфер, (недействительными *) адр, SizeOf (буфер)); адр + = SizeOf (буфер); }}; МойКласс недействительной :: чтения (uint16_t из, пустот * результат, uint16_t размера) {Байт * Ь = (байты *) результат; для (uint16_t = 0; я <размер; я ++) {* Ь ++ = eeprom_read_byte (с ++); }}; недействительный MyClass :: написать (uint16_t из, недействительным * данные, размер uint16_t) {константный байт * B = (константный байт *) данных; для (uint16_t I = 0; я <размер; я ++) {eeprom_write_byte (с ++, * б ++); }}; Цель состоит в том, чтобы сохранить «контрольные байты», который содержит размер основного массива - arrayOfParams структур. Прежде всего, сценарий записывает в управляющие байты пространства, что когда-либо значение, но 0x00. Тогда отказывается писать основные структуры arrayOfParams. Любые идеи, что я делаю неправильно? Прежде всего, сценарий записывает в управляющие байты пространства, что когда-либо значение, но 0x00. Тогда отказывается писать основные структуры arrayOfParams. Любые идеи, что я делаю неправильно? Прежде всего, сценарий записывает в управляющие байты пространства, что когда-либо значение, но 0x00. Тогда отказывается писать основные структуры arrayOfParams. Любые идеи, что я делаю неправильно?
Sergio
1

голосов
0

ответ
35

Просмотры

Как настроить blockwatcher на Arduino Nano от web3 && node.js

Я не могу подключить Node.js клиента к testnetwork для отображения текущего blockheader на моем Arduino Nano. Для подписки я использую infura в качестве поставщика услуг. Прежде чем я использовал соединение WebSocket, но я понятия не имел, как использовать WebSocket для запроса текущего blockheader. Я был бы очень рад, если вы могли бы объяснить мне разницу между подпиской HttpRequest и подпиской WebSocket. В конце концов, я хотел бы знать, что главная задача Web3 при подключении к узлу Эфириума. Спасибо за помощь! Сообщение текущей ошибки заключается в следующем. Код: вар Web3 = требуется ( 'web3'); вар пять = требуется ( «джонни-пять»); вар OledJs = требуется ( 'ОСИД-JS'); вар Font = требуется ( 'OLED-шрифт 5x7'); // подключение к blockchain клиента // на основе infura вар web3ws = новый Web3 (новый Web3. providers.HttpProvider ( 'https://ropsten.infura.io/...mySocket')) // доска Ressources нагрузки // Инициализировать доска Ressources уаг доска = новый Five.Board (); вар ОСИД; board.on ( "готова", функция () {// Параметры ОСИД Const выбирает = {ширина: 128, высота: 64, адрес: 0x3C}; // инициализация ЖК-дисплее = новые OledJs (доска, пять, выбирает); ОСИД .clearDisplay (истина); oled.update (); // Ожидаем blockheader listenToBlockchain ();}) // слушать blockchain событий (работает только на соединениях веб-сокетов) функция listenToBlockchain () {// слушателя событий web3ws.eth. подписаться ( 'newBlockHeaders') .На ( "данные", функция (blockHeader) {// Dieser Стелле WIRD console.log ( "Block: "+ blockHeader.number); выход (blockHeader);}) .На (" ошибка », Функция (е) {console.log ( "Fehler:" + е); }) // функция выхода функция выхода (блок) {oled.setCursor (1,1); oled.writeString (шрифт, 1 '' + blockHeader.number, 1, ложным, 2); oled.setCursor (1,15); oled.writeString (шрифт, 1 '' + blockHeader.hash, 1, правда, 2); }} Сообщение об ошибке: C: \ Users \ Андра \ Desktop \ ArduinoIOTblockchainsession \ node_modules \ Web3-ядро-подписок \ SRC \ subscription.js: 208 this.callback (ERR2, нуль, это); ^ TypeError: this.callback не является функцией в Subscription.subscribe (C: \ Users \ Андра \ Desktop \ ArduinoIOTblockchainsession \ node_modules \ Web3-ядро-подписок \ SRC \ subscription.js: 208: 14) в Eth.subscribe (C : \ Users \ Андра \ Desktop \ ArduinoIOTblockchainsession \ node_modules \ web3 одножильных-подписок \ SRC \ index.js: 68: 39) в listenToBlockchain (C: \ Users \ Андра \ Desktop \ ArduinoIOTblockchainsession \ infura_test.js: 38: 13) при Совете. (C: \ Users \ Andra \ Desktop \ ArduinoIOTblockchainsession \ infura_test.js: 31: 2) при emitNone (events.js: 111: 20) при Board.emit (events.js: 208: 7) при _combinedTickCallback (внутренний / процесс /next_tick.js:131:7) в process._tickDomainCallback (внутренний / процесс / next_tick.js: 218: 9)
Twixx
1

голосов
1

ответ
270

Просмотры

Ошибка при отправке сообщения Firebase с Arduino

Я пытаюсь запустить firebase эскиза сообщений из главной библиотеки здесь с помощью nodeMCU: https://github.com/FirebaseExtended/firebase-arduino Он подключается к Wi-Fi, но продолжает давать мне соединение номер 1 отказалось ошибка при попытке подключиться к Firebase сервер. Я получил индивидуальный маркер из моего Android приложения с помощью маркеров получить метод экземпляра ID и вход на консоль на Android Studio и успешно отправил сообщение самому себе через стандартный Firebase консоль, используя этот маркер, так что маркер правильно я предполагать. Я вошел в маркер в CLIENT_REGISTRATION_ID определения. Таким образом, я вошел в маркер вместе с ключом сервера из мест, отмеченных стрелками на фото ниже в эскиз, но не получаю никакого успеха с подключением. вот пустой оригинальный эскиз: #include #include // Установить эти запустить пример. #define WIFI_SSID "идентификатор SSID" #define WIFI_PASSWORD "ПАРОЛЬ" #define SERVER_KEY "key_from_dashboard" #define CLIENT_REGISTRATION_ID "key_from_client_after_registration" недействительные установки () {Serial.begin (9600); // подключение к Wi-Fi. WiFi.begin (WIFI_SSID, WIFI_PASSWORD); Serial.print ( "соединение"); в то время как (WiFi.status () = WL_CONNECTED!) {Serial.print ( ""); задержки (500); } Serial.println (); Serial.print ( "подключен:"); Serial.println (WiFi.localIP ()); FirebaseCloudMessaging FCM (SERVER_KEY); FirebaseCloudMessage сообщение = FirebaseCloudMessage :: SimpleNotification ( "Hello World!", "Что происходит?"); FirebaseError ошибки = fcm.SendMessageToUser (CLIENT_REGISTRATION_ID, сообщение); если (ошибка) {Serial.print ( "Ошибка:"); Serial.print (error.code ()); Serial.print ( "::"); Serial.println (. Error.message () c_str ()); } Еще {Serial.println ( "Отправленный OK!"); }} Недействительным цикл () {} Для ключевых переменного сервера я попытался использовать поля подсвеченных стрелок на фото: СОПУТСТВУЮЩИЕ ОБРАЗА КЛЮЧЕЙ ИСПОЛЬЗУЕМЫХ Кто-нибудь имели никакого успеха, используя этот эскиз или знают, где я буду неправильно ? Спасибо за любую помощь. СВЯЗАННЫЕ ОБРАЗА КЛЮЧЕЙ ИСПОЛЬЗУЕМЫХ Кто-нибудь имели никакого успеха, используя этот эскиз или знают, где я неправильно? Спасибо за любую помощь. СВЯЗАННЫЕ ОБРАЗА КЛЮЧЕЙ ИСПОЛЬЗУЕМЫХ Кто-нибудь имели никакого успеха, используя этот эскиз или знают, где я неправильно? Спасибо за любую помощь.
wdbwbd1
1

голосов
1

ответ
56

Просмотры

Data sent through serial on arduino gets byte-shifted sometimes

Я отправляю данные через USART на Arduino Due. Я в настоящее время заполнения буфера, так что данные посылают только тогда, когда буфер заполнен. Данные я помещаю в буфер представляет собой таблицу поиска различных форм волны с 12 битами глубины (значения от 0 до 4095). Поэтому я помещаю в буферных значений, которые являются 2 байта глубины, а самый младший байт всегда равен 0. Моя проблема заключается в том, что everyonce в то время весь период волны сдвигается байт (каждое значение получает multiplicated на 256). Ошибка непредсказуем: это может произойти на 2-й или 3-й период, чтобы быть отправленными, но это происходит в ближайшее время. Я пытался медленнее скорость обмена, или добавив два стоповых бит, но ничего не фиксирует его. Соответствующий фрагмент кода: сопзЬ междунар buflen = 2048; INT = 0; Int J = 0; INT = 1; INT волны = 0; короткий положительный эффект [buflen]; летучий PROGMEM короткий sintab [3] [512] = ... // там» s нет необходимости вставлять здесь справочные таблицы недействительными установки (Недействительными) {Serial3.begin (115200, SERIAL_8N2); } Недействительных петли (недействительный) {любитель [J] = sintab [волна] [I]; I + = к; j ++; если (я> 511) {i-= 512; } Если (J> = buflen) {Байт * bytePointer = (байт *) положительный эффект; для (целое л = 0; л
Dan Berezin
1

голосов
0

ответ
18

Просмотры

Boolean operations and binary protocol definitions within data type constraints in Arduino or C

Я строй двоичного протокола для обработки п числа 10 битовых аналоговых входных значений. Я пытаюсь найти способ, чтобы лучше вместить серию из 10 битовых значений с типом данных, что позволяет легко выполнять логические операции. Так, например, Int основных () {INT массив [] = {1024.343.512.256.223}; символ вывода [7]; для (INT I = 0; I <5; я ++) {INT = сложение (массив [я]> (10 * 1)) && 0b1111111111); // этот код не работает, но должен передать идею с предполагаемым выходным быть элементами массива в порядке. Е ( "Массив% d:% d \ п", я, printval); }} Если бы я был в состоянии установить размер переменных 7 байт, как я сделал с выходом которого достаточно для хранения 5 типов 10bit данных, а также возможность выполнения Bitshift против замаскированных элементов массива следующих могут работать. Проще говоря, у меня есть 5 переменных, в этом примере мы будем говорить, что они 4 бит длиной; 1101, 1011, 1111, 0010, 0001, и я хочу, чтобы поместить их вместе таким образом, что они сохраняются последовательно в массиве байт / полукокса так что в данном случае массив [0] = 11011011 массив [1] = 11110010 массив [2] = 00010000 А написать средство для извлечения данных из п бит, основываясь на его положение (не элемент, но немного положения) в массиве, где каждый переменные данных, которая должна быть извлечена составляют 10 бит.
Alex Turner
1

голосов
0

ответ
71

Просмотры

Почему код для Arduino LCD Мессинг код для шагового двигателя?

У меня есть базовый код для шагового двигателя, который показан ниже, но по какой-то причине, когда я пытаюсь добавить код для моих 2-х ЖК-дисплеев это портит все. Выход на двигатель только продолжает стрелять снова и снова без задержки, и ЖК-дисплеи даже не печатать ничего. Что я делаю неправильно? Простой Шаговый код (Это работает одна) #define IN1 52 #define IN2 50 #define IN3 48 #define IN4 46 INT Шаги = 4096; // 4096 или 768 INT cstep = 0; недействительные установки () {Serial.begin (9600); pinMode (IN1, OUTPUT); pinMode (IN2, OUTPUT); pinMode (IN3, OUTPUT); pinMode (IN4, OUTPUT); } Пустота петли () {для (целое х = 0; х
კΙбthebraɨɴs
1

голосов
0

ответ
28

Просмотры

Невозможно переопределить board_vendor (производитель USB) через platformio.ini

Я хочу, чтобы переопределить USB_PRODUCT и строки USB_MANUFACTURER на моем SparkFun Pro Micro. Согласно документации (http://docs.platformio.org/en/latest/boards/atmelavr/sparkfun_promicro16.html#configuration), я могу переопределить настройки по умолчанию SparkFun Pro Micro 5V / 16MHz в строительной среде с использованием доски _ *** опция настройки борта Pro Micro, JSON имеет build.usb_product и поставщик полей (по умолчанию является SparkFun Pro Micro и SparkFun). Я могу переопределить USB_PRODUCT с этим platformio.ini: [окр: sparkfun_promicro16] платформа = atmelavr плата = sparkfun_promicro16 структура = Arduino board_build.usb_product = "MyProduct" board_vendor = "моякомп" Правильные определяет будет отображаться в .vscode / c_cpp_properties.json : ... "определяет": [ "PLATFORMIO = 30602", " SparkFun [119019.346978] cdc_acm 1-1: 1,0: ttyACM0: USB ACM устройство Соответствующий код находится в https://github.com/platformio/platform-atmelavr/blob/master/builder/frameworks/arduino.py#L40. Похоже, что установка build_vendor должна работать? Что мне не хватает?
Laurenz
1

голосов
1

ответ
259

Просмотры

Настройка ATSAM3X8E на Arduino Due для ведомого SPI эксплуатации

Я пытаюсь построить связь между Raspberry Pi 3В + и Arduino Due через SPI. Я выбрал Raspberry Pi, чтобы действовать в качестве ведущего и ведомого Arduino как. Поэтому я написал несколько C кода для Малины, что configurates интерфейса и посылает два байта данных по линии MOSI. Я наблюдал сигналы с логическим анализатором, они, как и ожидалось, Chip Select падает до нуля в начале процесса отправки, а затем снова поднимается. Для программирования Arduino Due Я работаю с Arduino IDE. Поскольку Arduino SPI.h не поддерживает режим ведомого, я хочу, чтобы получить доступ соответствующих регистров на ATSAM3X8E непосредственно. Во-первых, я определяю режим работы SPI-Пен (номера контактов с «неофициальной» Due пинаут) в качестве ввода / вывода. После этого я настроить регистры ATSAM3X8E для работы ведомого SPI. Установки для CPOL и CPHA такие же, как на малина. Поскольку devider для скорости последовательной синхронизации передачи данных не допускается равным нулю, я выбрал самый большой доступный devider, хотя я предполагаю, что этот параметр не имеет никакого эффекта, потому что мастер определяет скорость передачи данных. Это код для конфигурации: pinMode (74, OUTPUT); // PIN_SPI_MISO pinMode (75, INPUT); // PIN_SPI_MOSI pinMode (76, INPUT); // PIN_SPI_SCK pinMode (10, INPUT); // Выбор ведомого REG_SPI0_CR = 0x00000001; // SPI Enable REG_SPI0_MR = 0x00000000; // Подчиненный-Mode, Fixed Периферийное Select, // Chip Select напрямую подключен обнаружение // ошибки режима включен, // Loopback отключен REG_SPI0_WPMR = 0x00000000; // записываем защита отключена REG_SPI0_CSR = 0x0000ff02; // Чип выбора Регистр // CPOL = 0, CPHA = 1 // 8 бит на передачу // последовательного тактового сигнала Скорость передачи 84 МГц / 255 = 330 кГц После этого в цикле биты данных регистра приема хранятся в буфер: беззнаковое целочисленное значение ЬиЕ = 0; ЬиЕ = REG_SPI0_RDR & 0x0000ffff; // магазин 16 биты приемные регистры данных в буфере Однако буфер остается пустым. Если я читаю биты регистра состояния, все биты равны нулю, даже немного для «NSS Восходящего Краю Обнаруженные» или «SPI Enbled» равны нулю. Поэтому я предполагаю, что, инициализация интерфейса не является правильной / полнами. Я не пропустить что-нибудь? Любая помощь очень ценится. CPHA = 1 // 8 бит на передачу // последовательного тактового сигнала Скорость передачи данных 84 МГц / 255 = 330 кГц После этого в цикле биты данных регистра приема сохраняются в буфере: беззнаковое INT ЬиЕ = 0; ЬиЕ = REG_SPI0_RDR & 0x0000ffff; // магазин 16 биты приемные регистры данных в буфере Однако буфер остается пустым. Если я читаю биты регистра состояния, все биты равны нулю, даже немного для «NSS Восходящего Краю Обнаруженные» или «SPI Enbled» равны нулю. Поэтому я предполагаю, что, инициализация интерфейса не является правильной / полнами. Я не пропустить что-нибудь? Любая помощь очень ценится. CPHA = 1 // 8 бит на передачу // последовательного тактового сигнала Скорость передачи данных 84 МГц / 255 = 330 кГц После этого в цикле биты данных регистра приема сохраняются в буфере: беззнаковое INT ЬиЕ = 0; ЬиЕ = REG_SPI0_RDR & 0x0000ffff; // магазин 16 биты приемные регистры данных в буфере Однако буфер остается пустым. Если я читаю биты регистра состояния, все биты равны нулю, даже немного для «NSS Восходящего Краю Обнаруженные» или «SPI Enbled» равны нулю. Поэтому я предполагаю, что, инициализация интерфейса не является правильной / полнами. Я не пропустить что-нибудь? Любая помощь очень ценится. беззнаковое INT ЬиЕ = 0; ЬиЕ = REG_SPI0_RDR & 0x0000ffff; // магазин 16 биты приемные регистры данных в буфере Однако буфер остается пустым. Если я читаю биты регистра состояния, все биты равны нулю, даже немного для «NSS Восходящего Краю Обнаруженные» или «SPI Enbled» равны нулю. Поэтому я предполагаю, что, инициализация интерфейса не является правильной / полнами. Я не пропустить что-нибудь? Любая помощь очень ценится. беззнаковое INT ЬиЕ = 0; ЬиЕ = REG_SPI0_RDR & 0x0000ffff; // магазин 16 биты приемные регистры данных в буфере Однако буфер остается пустым. Если я читаю биты регистра состояния, все биты равны нулю, даже немного для «NSS Восходящего Краю Обнаруженные» или «SPI Enbled» равны нулю. Поэтому я предполагаю, что, инициализация интерфейса не является правильной / полнами. Я не пропустить что-нибудь? Любая помощь очень ценится. Я не пропустить что-нибудь? Любая помощь очень ценится. Я не пропустить что-нибудь? Любая помощь очень ценится.
ArduinoNewbie
1

голосов
2

ответ
131

Просмотры

ESP32 external pin wakeup with internal pullup resistor

Я очень новой для работы с Arduino и любого рода схем. Я пытаюсь создать доску ESP32, чтобы проснуться с внешним триггером с помощью команды esp_sleep_enable_ext0_wakeup аннулируются настройки () {Int MY_PIN = 13; pinMode (MY_PIN, INPUT_PULLUP); INT = чтение digitalRead (MY_PIN); если (чтение == 1) {esp_sleep_enable_ext0_wakeup (GPIO_NUM_13,0); } Еще {esp_sleep_enable_ext0_wakeup (GPIO_NUM_13,1); } // Я хочу совет, чтобы просыпаться каждый раз, когда изменяется состояние переключателя. esp_deep_sleep_start (); } Я бегу в проблемы с этим. Пробуждения не происходят, когда я ожидаю, что это. Я предполагаю, что он должен делать с помощью внешнего нагрузочного резистора. Я не связывал один. Есть ли способ, чтобы использовать внутренний подтягивающий резистор для этой цели? Я был бы признателен всем, кто мог бы объяснить, как это работает в целом. В документации сказано: @note Эта функция не изменяет конфигурацию контактов. Вывод настроен в esp_sleep_start, непосредственно перед переходом в режим ожидания. Может быть, мне нужно, чтобы правильно настроить его с esp_sleep_pd_config. Может ли это быть причиной для нагрузочного резистора не работает?
Morten Twellmann
1

голосов
1

ответ
55

Просмотры

Преобразование Ина эскиз C ++ класс, неправильное использование не-статической функции-члена

Я пытаюсь преобразовать .ino эскиз, который отлично компилируется в класс C ++ рабочего кода является: байты statusLed = 13; байт sensorInterrupt = 0; // 0 = цифровой контакт 2 байта sensorPin = 2; // Датчик расхода на основе эффекта Холла выдает около 4,5 импульсов в секунду на // литр / минуту потока. плавать calibrationFactor = 4,5; летучее байт pulseCount; плавать РАсХОД; неподписанных INT flowMilliLitres; неподписанные длинные totalMilliLitres; неподписанных долгое Oldtime; аннулируется установка () {// Инициализация последовательного соединения для представления значений хоста Serial.begin (38400); // Установка светодиодного индикатора состояния линии, как выход pinMode (statusLed, OUTPUT); digitalWrite (statusLed, HIGH); // У нас есть активный низкий светодиод прикрепленной pinMode (sensorPin, INPUT); digitalWrite (sensorPin, HIGH); pulseCount = 0; РАсХОД = 0,0; flowMilliLitres = 0; totalMilliLitres = 0; Oldtime = 0; // Датчик Холла подключен к контакту 2, который использует прерывание 0. // сконфигурированных для запуска на падающем изменения состояния (переход от высокого // состояния в состояние низкого) attachInterrupt (sensorInterrupt, pulseCounter, FALLING); } / ** * Основной цикл программы * / недействительным цикл () {если ((Миллис () - Oldtime)> 1000) // только счетчики процесса один раз в секунду {// Запретить прерывание при расчете скорости потока и отправки значение // хост detachInterrupt (sensorInterrupt); // Поскольку этот цикл не может завершиться в ровно 1 секундные интервалы вычислим // число миллисекунд, прошедших с момента последнего выполнения и использования // что масштаб вывода. Мы также применить calibrationFactor для масштабирования выходного сигнала // на основании количества импульсов в секунду на единицах измерения (л / мин в // этом случае), поступающего из датчика. РАсХОД = ((1000,0 / (Миллис () - Oldtime)) * pulseCount) / calibrationFactor; // Обратите внимание на время этой обработки была выполнена передача. Обратите внимание, что поскольку мы // отключены перебивает Миллис () функция не будет на самом деле Инкрементирование права // в этой точке, но он все равно будет возвращать значение, которое он был установлен как раз перед // перебивает пошел прочь. Oldtime = Миллис (); // Деление расход в л / мин на 60, чтобы определить, сколько литров было // прошли через датчик в этом 1 втором интервале, затем умножить на 1000, чтобы // преобразовать в миллилитрах. flowMilliLitres = (РАсХОД / 60) * 1000; // Добавление миллилитров прошли в этом втором сводного общего totalMilliLitres + = flowMilliLitres; неподписанные INT гидроразрыв; // Печать скорости потока для второго в л / мин Serial.print ( «Скорость потока:»); Serial.print (интермедиат (РАсХОД)); // Вывести целую часть переменной Serial.print ( «»); // Печать десятичной точки // Определить дробную часть. 10 мультипликатор дает нам 1 знак после запятой. гидроразрыв = (РАсХОД - Int (РАсХОД)) * 10; Serial.print (ГРП, декабрь); // Печать дробной части переменной Serial.print ( «л / мин»); // Печатает количество литров протекало во втором Serial.print ( «Current Liquid Измельчитель:»); // Выходной сепаратор Serial.print (flowMilliLitres); Serial.print ( "мл / сек"); // Вывести совокупный объем литров протекала с момента начала Serial.print ( «Выход Жидкое Количество:»); // Выходной сепаратор Serial.print (totalMilliLitres); Serial.println ( "мл"); // Сброс счетчика импульсов таким образом, мы можем начать приращение снова pulseCount = 0; // Включить прерывания снова теперь, когда мы закончили отправку выходного attachInterrupt (sensorInterrupt, pulseCounter, ГОДА); }} / * Insterrupt служба Рутинное * / пустота pulseCounter () {// увеличиваем счетчик импульсов pulseCount ++; } Моя попытка преобразовать следующий: файл .H: класс FlowSensor {общественности: FlowSensor (интермедиат штырьковый); недействительный начинают (); недействительный запуск (); частные: INT _pin; байт sensorInterrupt = 0; // 0 = цифровой контактный датчик потока 2 // Холл-эффект выдает около 4. 5 импульсов в секунду на // л / мин потока. плавать calibrationFactor = 4,5; плавать РАсХОД; неподписанных INT flowMilliLitres; неподписанные длинные totalMilliLitres; неподписанных долгое Oldtime; летучий неподписанных долгое pulseCount; // летучих байт pulseCount; pulseCounter недействительными (); }; и файл C: FlowSensor :: FlowSensor (интермедиат контактный) {_pin = контактный; } Недействительного FlowSensor :: начинает () {pinMode (_pin, INPUT); digitalWrite (_pin, HIGH); pulseCount = 0; РАсХОД = 0,0; flowMilliLitres = 0; totalMilliLitres = 0; Oldtime = 0; sensorInterrupt = digitalPinToInterrupt (_pin); // Датчик Холла подключен к контакту 2, который использует прерывание 0. // Сконфигурирован, чтобы вызвать на падающем изменении состояния (переход от высокого // состояния в низкое состояние) attachInterrupt (sensorInterrupt, pulseCounter, ПАДЕНИЕ); } Недействительного FlowSensor :: Run () {если ((Миллис () - Oldtime)> 1000) // Обработать только счетчики один раз в секунду {// Запретить прерывание при расчете скорости потока и отправок значения // хост detachInterrupt ( sensorInterrupt); // Поскольку этот цикл не может завершиться в ровно 1 секундные интервалы вычислим // число миллисекунд, прошедших с момента последнего выполнения и использования // что масштаб вывода. Мы также применить calibrationFactor для масштабирования выходного сигнала // на основании количества импульсов в секунду на единицах измерения (л / мин в // этом случае), поступающего из датчика. РАсХОД = ((1000,0 / (Миллис () - Oldtime)) * pulseCount) / calibrationFactor; // Обратите внимание на время этой обработки была выполнена передача. Обратите внимание, что, потому что мы ве // отключено прерывает Миллис () функция не будет на самом деле Инкрементирование права // в этой точке, но он все равно будет возвращать значение, которое он был установлен как раз перед // перебивает пошел прочь. Oldtime = Миллис (); // Деление расход в л / мин на 60, чтобы определить, сколько литров было // прошли через датчик в этом 1 втором интервале, затем умножить на 1000, чтобы // преобразовать в миллилитрах. flowMilliLitres = (РАсХОД / 60) * 1000; // Добавление миллилитров прошли в этом втором сводного общего totalMilliLitres + = flowMilliLitres; неподписанные INT гидроразрыв; // Печать скорости потока для второго в л / мин Serial.print ( «Скорость потока:»); Serial.print (интермедиат (РАсХОД)); // Вывести целую часть переменной Serial.print ( «»); // Печать десятичной точки // Определить дробную часть. 10 мультипликатор дает нам 1 знак после запятой. гидроразрыв = (РАсХОД - Int (РАсХОД)) * 10; Serial.print (ГРП, декабрь); // Печать дробной части переменной Serial.print ( «л / мин»); // Печатает количество литров протекало во втором Serial.print ( «Current Liquid Измельчитель:»); // Выходной сепаратор Serial.print (flowMilliLitres); Serial.print ( "мл / сек"); // Вывести совокупный объем литров протекала с момента начала Serial.print ( «Выход Жидкое Количество:»); // Выходной сепаратор Serial.print (totalMilliLitres); Serial.println ( "мл"); // Сброс счетчика импульсов таким образом, мы можем начать приращение снова pulseCount = 0; // Включить прерывания снова теперь, когда мы закончили отправку выходного attachInterrupt (sensorInterrupt, pulseCounter, ГОДА); }} / * * Обслуживание прерываний * / недействительными FlowSensor :: pulseCounter () {// увеличиваем счетчик импульсов pulseCount ++; } Ошибка я получаю: C: \ Users \ marcp \ Dropbox \ Arduino \ FlowSensor \ FlowSensor.cpp: В функции члена "ничтожной FlowSensor :: начать (): C: \ Users \ marcp \ Dropbox \ Arduino \ FlowSensor \ FlowSensor.cpp: 24: 56: ошибка: неправильное использование нестатической функции члена attachInterrupt (sensorInterrupt, pulseCounter, FALLING); ^ C: \ Users \ marcp \ Dropbox \ Arduino \ FlowSensor \ FlowSensor.cpp: В функции члена Пустота FlowSensor :: Run () ': C: \ Users \ marcp \ Dropbox \ Ардуина \ FlowSensor \ FlowSensor.cpp: 80: 57: ошибка: неправильное использование нестатической функции члена attachInterrupt (sensorInterrupt, pulseCounter, FALLING); Должно быть отмечен как статические?
Marc
1

голосов
0

ответ
68

Просмотры

Не удается скомпилировать Arduino эскиз на MacOSX

У меня возникли проблемы компиляция простого эскиза на Mac, я использую Мохав VERSION и у меня есть Arduino IDE 1.8.7. После ввода нажмите на проверке или загрузить Он получает заморожен на «компиляцию эскизе». Я попытался бегала как Судо и ничего не случится. Вот мои журналы, я использую Java 1.8 имеет значение по умолчанию. Надеюсь, что вы можете мне помочь. Спасибо! [JmDNS (fe80-0-0-0-aede-48ff-fe00-1122-en5.local.) State.Timer.] WARN javax.jmdns.impl.tasks.state.DNSStateTask - компенсатора (fe80-0-0- 0-aede-48ff-fe00-1122-en5.local) запустить () исключение java.io.IOException:.. нет маршрута к хосту (SendTo не удалось) на java.net.PlainDatagramSocketImpl.send (Native Method) в java.net .DatagramSocket.send (DatagramSocket.java:693) при javax.jmdns.impl.JmDNSImpl.send (JmDNSImpl.java:1618) при javax.jmdns.impl.tasks.state.DNSStateTask.run (DNSStateTask.java:131) в java.util.TimerThread. MainLoop (Timer.java:555) при java.util.TimerThread.run (Timer.java:505) [fe80-0-0-0-1865-b6b4-2043-2516-en0.local..recover ()] WARN javax.jmdns.impl.DNSStatefulObject $ DefaultImplementation - подождите, отмененные истекло: DNS: fe80-0-0-0-1865-b6b4-2043-2516-en0.local. [FE80: 0: 0: 0: 1865: b6b4: 2043: 2516% en0 / FE80: 0: 0: 0: 1865: b6b4: 2043: 2516% en0] состояние: отмена 1 задача: нуль [fe80-0-0 -0-1865-b6b4-2043-2516-en0.local..recover ()] WARN javax.jmdns.impl.JmDNSImpl - fe80-0-0-0-1865-b6b4-2043-2516-en0.local .. восстановить () не удалось восстановить нас вниз! [Fe80-0-0-0-aede-48ff-fe00-1122-en5.local..recover ()] WARN javax.jmdns.impl.DNSStatefulObject $ DefaultImplementation - Подождите, отмененные тайм-аут: DNS: fe80-0-0 -0-aede-48ff-fe00-1122-en5.local. [FE80: 0: 0: 0: aede: 48ff: FE00: +1122% EN5 / FE80: 0: 0: 0: aede: 48ff: FE00: +1122% EN5] состояние: отмена 1 задачи: нуль [fe80-0-0-0-aede-48ff-fe00-1122-en5.local..recover ()] WARN javax.jmdns.impl.JmDNSImpl - fe80-0-0-0-aede-48ff-fe00- 1122-en5.local..recover () не удалось восстановить нас вниз! /Applications/Arduino.app/Contents/Java/arduino-builder -dump-префы -logger = машин -Аппаратного /Applications/Arduino.app/Contents/Java/hardware -Инструменты /Applications/Arduino.app/Contents/Java/tools -builder -Инструменты /Applications/Arduino.app/Contents/Java/hardware/tools/avr -Встроенная-библиотек /Applications/Arduino.app/Contents/Java/libraries -libraries / Пользователи / zreactor / Документы / Arduino / библиотеки -fqbn = Arduino: АРНЫ: у -vid-PID = 0X2341_0X0043 -ide-версия = 10807 -Build-путь / вар / папки / _b / 8334gfj95qq4lk91rv1yl_3h0000gn / T / arduino_build_939925 -warnings = все -Build-кэш / вар / папки / _b / 8334gfj95qq4lk91rv1yl_3h0000gn / Т / arduino_cache_484968 -prefs = построить.
rfcabal
1

голосов
0

ответ
55

Просмотры

Arduino ATMega2560 use Assembler instead of C

У меня есть доска ATmega2560 Arduino, и я хотел бы ассемблерный код на нем. Я сделал некоторый код в C для показа температуры на LCD16x2 с помощью датчика температуры. Но я хотел бы кодировать ту же функциональность, но на ассемблере на этот раз. Я довольно новый для ассемблера, и я хотел бы знать, как я должен начать это делать, и, может быть, есть кто-то, кто может помочь мне преобразовать мой текущий код в ассемблер? Я не мог найти, что многие учебники для этой платы. Мой C код выглядит следующим образом: #include INT тим = 50; // значение времени задержки // инициализировать библиотеку с номерами интерфейса булавки LiquidCrystal LCD (4, 6, 10, 11, 12, 13); INT thermistorPin = 0; // термистора подключен к аналоговому штифтом 3 пустот настройки () {lcd.begin (16, 2); // установить количество ЖК-дисплея столбцов и строк: LCD. Чисто(); // Очистка экрана ЖКД и позиционирует курсор в верхнем левом углу} пустота петли () {плавать = analogRead (thermistorPin); // вычислительной формула температура флоит резистор = (1023,0 * 10000) / а-10000; плавать tempC = (3435.0 / (журнал (резистор / 10000) + (3435,0 / (273,15 + 25)))) - 200.00; lcd.setCursor (0, 0); // установить курсор в столбец 0, строка 0 lcd.print ( «это тест»); // Вывести сообщение о «Temp:» на ЖК-дисплее. lcd.setCursor (0, 1); // установить курсор в столбец 0, строка 0 lcd.print ( "Temp:"); // Вывести сообщение о "Temp:" на ЖК-дисплее. lcd.print (tempC); // Печать температуры по Цельсию на ЖК-дисплее. lcd.print ( "С"); // Печать единицы температуры по Цельсию на ЖК-дисплее. задержки (500); } // Очистка экрана ЖКД и позиционирует курсор в верхнем левом углу} пустота петли () {плавать = analogRead (thermistorPin); // вычислительной формула температура флоит резистор = (1023,0 * 10000) / а-10000; плавать tempC = (3435.0 / (журнал (резистор / 10000) + (3435,0 / (273,15 + 25)))) - 200.00; lcd.setCursor (0, 0); // установить курсор в столбец 0, строка 0 lcd.print ( «это тест»); // Вывести сообщение о «Temp:» на ЖК-дисплее. lcd.setCursor (0, 1); // установить курсор в столбец 0, строка 0 lcd.print ( "Temp:"); // Вывести сообщение о "Temp:" на ЖК-дисплее. lcd.print (tempC); // Печать температуры по Цельсию на ЖК-дисплее. lcd.print ( "С"); // Печать единицы температуры по Цельсию на ЖК-дисплее. задержки (500); } // Очистка экрана ЖКД и позиционирует курсор в верхнем левом углу} пустота петли () {плавать = analogRead (thermistorPin); // вычислительной формула температура флоит резистор = (1023,0 * 10000) / а-10000; плавать tempC = (3435.0 / (журнал (резистор / 10000) + (3435,0 / (273,15 + 25)))) - 200.00; lcd.setCursor (0, 0); // установить курсор в столбец 0, строка 0 lcd.print ( «это тест»); // Вывести сообщение о «Temp:» на ЖК-дисплее. lcd.setCursor (0, 1); // установить курсор в столбец 0, строка 0 lcd.print ( "Temp:"); // Вывести сообщение о "Temp:" на ЖК-дисплее. lcd.print (tempC); // Печать температуры по Цельсию на ЖК-дисплее. lcd.print ( "С"); // Печать единицы температуры по Цельсию на ЖК-дисплее. задержки (500); } // вычислительной формула температура флоит резистор = (1023,0 * 10000) / а-10000; плавать tempC = (3435.0 / (журнал (резистор / 10000) + (3435,0 / (273,15 + 25)))) - 200.00; lcd.setCursor (0, 0); // установить курсор в столбец 0, строка 0 lcd.print ( «это тест»); // Вывести сообщение о «Temp:» на ЖК-дисплее. lcd.setCursor (0, 1); // установить курсор в столбец 0, строка 0 lcd.print ( "Temp:"); // Вывести сообщение о "Temp:" на ЖК-дисплее. lcd.print (tempC); // Печать температуры по Цельсию на ЖК-дисплее. lcd.print ( "С"); // Печать единицы температуры по Цельсию на ЖК-дисплее. задержки (500); } // вычислительной формула температура флоит резистор = (1023,0 * 10000) / а-10000; плавать tempC = (3435.0 / (журнал (резистор / 10000) + (3435,0 / (273,15 + 25)))) - 200.00; lcd.setCursor (0, 0); // установить курсор в столбец 0, строка 0 lcd.print ( «это тест»); // Вывести сообщение о «Temp:» на ЖК-дисплее. lcd.setCursor (0, 1); // установить курсор в столбец 0, строка 0 lcd.print ( "Temp:"); // Вывести сообщение о "Temp:" на ЖК-дисплее. lcd.print (tempC); // Печать температуры по Цельсию на ЖК-дисплее. lcd.print ( "С"); // Печать единицы температуры по Цельсию на ЖК-дисплее. задержки (500); } линия 0 lcd.print ( «это тест»); // Вывести сообщение о «Temp:» на ЖК-дисплее. lcd.setCursor (0, 1); // установить курсор в столбец 0, строка 0 lcd.print ( "Temp:"); // Вывести сообщение о "Temp:" на ЖК-дисплее. lcd.print (tempC); // Печать температуры по Цельсию на ЖК-дисплее. lcd.print ( "С"); // Печать единицы температуры по Цельсию на ЖК-дисплее. задержки (500); } линия 0 lcd.print ( «это тест»); // Вывести сообщение о «Temp:» на ЖК-дисплее. lcd.setCursor (0, 1); // установить курсор в столбец 0, строка 0 lcd.print ( "Temp:"); // Вывести сообщение о "Temp:" на ЖК-дисплее. lcd.print (tempC); // Печать температуры по Цельсию на ЖК-дисплее. lcd.print ( "С"); // Печать единицы температуры по Цельсию на ЖК-дисплее. задержки (500); }
Eduard Costea
1

голосов
0

ответ
41

Просмотры

Почему GPS не может прочитать данные в Arduino

Я пытаюсь читать данные GPS на последовательный монитор от Arduino УНО. Я использую TinyGPS ++ библиотеки для чтения данных GPS и модуль GPS используется «em506». Я могу прочитать данные GPS (не постоянно), если он находится вне состояния (если ((а> 0) && (Ь> 0))), если он находится внутри состоянии я не могу читать. # include # include # include # include SoftwareSerial сс (4,3); // для DHT11 DHT DHT; TinyGPSPlus GPS; Const INT MPU = 0x68; int16_t АсЙ, НКД, ACZ, Tmp, GYX, гыо, Гыз; недействительные установки () {Wire.begin (); Wire.beginTransmission (МПУ); Wire.write (0x6B); Wire.write (0); Wire.endTransmission (истина); Serial.begin (9600); ss.begin (4800); } Пустота петли () {плавать, B; а = DHT.temperature; б = DHT.humidity; DHT.read22 (7); // readGPS2 (); Serial.print ( "Температура:"); Serial.println (а); Serial.print ( "Влажность:"); Serial.println (б); если ((а> 0) && (Ь> 0)) {readGyro (); Serial.println (а); Serial.println ( "#"); Serial.println (б); readGPS (); }} пустота readGPS () {в то время как (ss.available ()> 0), если (gps.encode (ss.read ())) displayInfo (); Serial.println ( "$"); если (Миллис ()> 7000 && gps.charsProcessed () <10) {Serial.println (F ( "Нет GPS не обнаружено:. проверить проводку")); в то время как (истинно); }} Пустота readGyro () {Wire.beginTransmission (МПУ); Wire.write (0x3B); Wire.endTransmission (ложь); Wire.requestFrom (МПУ, 12, правда); GYX = Wire.read () 0), если (gps.encode (ss.read ())) displayInfo (); Serial.println ( "$"); если (Миллис ()> 7000 && gps.charsProcessed () <10) {Serial.println (F ( "Нет GPS не обнаружено:. проверить проводку")); в то время как (истинно); }} Пустота readGyro () {Wire.beginTransmission (МПУ); Wire.write (0x3B); Wire.endTransmission (ложь); Wire.requestFrom (МПУ, 12, правда); GYX = Wire.read () 0), если (gps.encode (ss.read ())) displayInfo (); Serial.println ( "$"); если (Миллис ()> 7000 && gps.charsProcessed () <10) {Serial.println (F ( "Нет GPS не обнаружено:. проверить проводку")); в то время как (истинно); }} Пустота readGyro () {Wire.beginTransmission (МПУ); Wire.write (0x3B); Wire.endTransmission (ложь); Wire.requestFrom (МПУ, 12, правда); GYX = Wire.read ()
Lucky
1

голосов
0

ответ
179

Просмотры

Changing LED brightness in Atmel AVR using Assembly without PWM & Analog

I'm working on a simple LED project using Atmega2560 microcontroller. I don't know how I can adjust the led brightness to the level I want. I need to do all the processing with digital signals. In this case, PWM and Analog signals not allowed. DEF consts: LEDS : Which LEDs will be work LED_DATA : I will use it to out DDRC Theory To get 50% brightness: Turn on the LED (logic-1) Delay 5ms Turn off the LED (logic-0) Delay 5ms Main Loop .def LEDS = R16 .def LED_DATA = R21 .org 0 rjmp MAIN MAIN: ldi LEDS, 0xFF ; 0xFF = 1111 1111 out DDRC, LEDS ; make PORTC's all pins to output sbi PORTB, 0 sbi PORTB, 1 sbi PORTB, 2 LOOP_MAIN: out PORTC, LED_DATA call DELAY out PORTC, 0x00 call DELAY rjmp LOOP_MAIN My wait700ms command: wait700ms: push r17 ldi r16,0x40 ; run 0x400000 times ldi r17,0x00 ; ~12 million cycle ldi r18,0x00 ; for 16Mhz: ~0.7s delay _w0: dec r18 brne _w0 dec r17 brne _w0 dec r16 brne _w0 pop r17 ret As you can see above, my delay command is insufficient even when i set the ldi r16,0x01 instead of ldi r16,0x40. With 0x01, It happens so fast, but it's not enough. I can see it with my eye and it flashes in full brightness. It's a situation we don't want. On average, it should blink between 90 Hz and 120 Hz to adjust brightness. P.S: Creating duty-cycle with analog pulse not allowed. Questions How can I generate a 5ms delay? Can we solve this problem by using (ISR) timer interrupts? *(If possible, how can i generate 5ms delay with timer? (TCCR, OCR0 (for presaceler), ...))*
Dentrax

Просмотр дополнительных вопросов