SoftwareSerial - один код, но работает по-разному на разных платах
- Войдите на сайт для отправки комментариев
Привет всем! В основном я читатель, но зашел в тупик с логикой работы софтового UART.
Решил я сотворить автомобильные часы-термометр на базе Arduino, пары OLED дисплеев, RTC ds3231 и датчика температуры DS18b20. Удалось все собрать вместе и подружить друг с другом. И тут решил я его дополнить GPS модулем, чтобы синхронизировать время и забыть о необходимости его переводить или подстраивать.
Споткнулся я там, где не ожидал - оказалось, что ни один пример SoftwareSerial не работает на Arduino Pro Mini (Атмега328 16 МГц, 5В) с модулем GPS ublox NEO-6m! В тоже время - этот же код без проблем работает в плате UNO, которая как и ПроМини выполнена на Атмеге328!
Ниже код, который просто траснлирует из софтового в аппаратный УАРТ и обратно. Цифровые выходы перебирал - результат одинаков - на УНО все работает, на ПроМини - нет!
В проект УНО не влезет по габаритам :( Потому или победю ПроМини или дождусь АруиноМикро со свободным УАРТом.
Проблемы в железе ПроМини или куда копать?
Спасибо
#include <SoftwareSerial.h> SoftwareSerial SoftSerial(4, 5); unsigned char buffer[64]; // buffer array for data receive over serial port int count=0; // counter for buffer array void setup() { SoftSerial.begin(9600); // the SoftSerial baud rate Serial.begin(9600); // the Serial port of Arduino baud rate. } void loop() { if (SoftSerial.available()) // if date is coming from software serial port ==> data is coming from SoftSerial shield { while(SoftSerial.available()) // reading data into char array { buffer[count++]=SoftSerial.read(); // writing data into array if(count == 64)break; } Serial.write(buffer,count); // if no data transmission ends, write buffer to hardware serial port clearBufferArray(); // call clearBufferArray function to clear the stored data from the array count = 0; // set counter of while loop to zero } if (Serial.available()) // if data is available on hardware serial port ==> data is coming from PC or notebook SoftSerial.write(Serial.read()); // write it to the SoftSerial shield } void clearBufferArray() // function to clear buffer array { for (int i=0; i<count;i++) { buffer[i]=NULL; } // clear all index of array with command NULL }