SoftwareSerial - один код, но работает по-разному на разных платах

Нет ответов
Xabr
Offline
Зарегистрирован: 12.02.2017

Привет всем! В основном я читатель, но зашел в тупик с логикой работы софтового 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
}