#1 2018-06-07 10:02:09

creator__
Учасник
Зареєстрований: 2018-06-07
Повідомлень: 1

конфликт spi и serial

Всем привет! Программа читает данные из игры и шлет в ардуинку (мега 328), мк ловит нужный пакет данных и дергает ногами как надо.
Появилась необходимость добавить дисплей (12864 на st7920). Подключил отдельно по spi, написал все что там необходимо, все работает.
Но когда объединяю скетчи, на дисплей инфа выводится нормально, но остальными ногами (из основного кода) начинает хаотично дергать.
Получается когда идут данные по spi в основном порту сыпется мусор.
пробовал spi на другие ноги (хардварные ноги меги заняты, на них не пробовал. либа u8glib.
подскажите куда копать. спасибо.

#include "U8glib.h"
U8GLIB_ST7920_128X64_4X u8g(8, 10, 9);
//U8GLIB_ST7920_128X64 u8g(13, 11, 12, U8G_PIN_NONE);

#define RPM_PIN 23
#define RPM_MAX 45
#define RPM_MIN 170

#define SPEED_PIN 22
#define SPEED_MAX1 65
#define SPEED_MIN1 180
#define SPEED_MAX 1
#define SPEED_MIN 64

#define LTR_PIN 24
#define LTR_MAX 70
#define LTR_MIN 165

#define TEMP_PIN 25
#define TEMP_MAX 80
#define TEMP_MIN 165

#define ONOFF_PIN 12

#include <Servo.h>

Servo rpmServo;
Servo speedServo;
Servo ltrServo;
Servo tempServo;

void setup(){

  
  digitalWrite(ONOFF_PIN, 1);
  
  Serial.begin(57600);
  
  pinMode(ONOFF_PIN, OUTPUT);
  
   rpmServo.attach(RPM_PIN);
  speedServo.attach(SPEED_PIN, 450, 2145);
  ltrServo.attach(LTR_PIN);
  tempServo.attach(TEMP_PIN); 
  
  }
 
void loop(){ 

   u8g.firstPage();  
  do {
    draw();
     
  } while( u8g.nextPage() );

  
  if (Serial.find("U")) {
          
          int x = Serial.readBytes(bufferArray, a);
          
          if (x == 33) {  
 
        
         if (bufferArray[0]  == 'R'){
           unsigned int rpmSmTools = ((bufferArray[1]-48)*10000) + ((bufferArray[2]-48)*1000) + // Take values 1-5.
                               ((bufferArray[3]-48) *100) + ((bufferArray[4]-48)*10) + (bufferArray[5]-48);
           Rpm = rpmSmTools;
           //Serial.println("You have set the Rpm to a Value of:");     
           //Serial.println(rpmSmTools);
           }
           
         if (bufferArray[6] == 'G'){
           unsigned int gearSmTools = ((bufferArray[7]-48)*1);
           Gear = gearSmTools;
            //Serial.println("You have set the Gear to a Value of:");     
            //Serial.println(gearSmTools);
            }
        
         if (bufferArray[8]  == 'S'){
           unsigned int speedSmTools = ((bufferArray[9]-48)*100) + ((bufferArray[10]-48)*10) + (bufferArray[11]-48); // Take values 1-5.
           Speed = speedSmTools;                     
           //Serial.println("You have set the Speed to a Value of:");     
           //Serial.println(speedSmTools);
            }
            
          if (bufferArray[12]  == 'F'){
           unsigned int fuelSmTools =  ((bufferArray[13]-48)*10) + (bufferArray[14]-48); // Take values 1-5.
           Ltr = Ltrmax * fuelSmTools / 100; 
           //Serial.println("You have set the Fuel to a Value of:");     
           //Serial.println(fuelSmTools);
             }

           if (bufferArray[15] == 'T'){
           unsigned int tempSmTools = ((bufferArray[16]-48)*100) + ((bufferArray[17]-48)*10) + (bufferArray[18]-48); // Take values 1-5.
           Temp = tempSmTools;                      
           //Serial.println("You have set the Water to a Value of:");     
           //Serial.println(tempSmTools);
             }

           if (bufferArray[19]  == 'M'){
           unsigned int maxrpmSmTools = ((bufferArray[20]-48)*10000) + ((bufferArray[21]-48)*1000) + // Take values 1-5.
                               ((bufferArray[22]-48) *100) + ((bufferArray[23]-48)*10) + (bufferArray[24]-48);
           Rpmmax = maxrpmSmTools + 300;
           //Serial.println("You have set the max to a Value of:");     
           //Serial.println(maxrpmSmTools);
           }

           if (bufferArray[25]  == 'O'){
           unsigned int otempSmTools = ((bufferArray[26]-48)*100) + ((bufferArray[27]-48)*10) + (bufferArray[28]-48); // Take values 1-5.
           Otemp = otempSmTools;                     
           //Serial.println("You have set the Speed to a Value of:");     
           //Serial.println(otempSmTools);
            }

           if (bufferArray[29]  == 'P'){
           unsigned int opresSmTools = ((bufferArray[30]-48)*100) + ((bufferArray[31]-48)*10) + (bufferArray[32]-48); // Take values 1-5.
           Opres = opresSmTools;                     
           //Serial.println("You have set the Speed to a Value of:");     
           //Serial.println(opresSmTools);
            }
  }     
 } 
  
   //if (Serial.available()>40)
 Serial.flush(); 
 
  if (Speed < 140){
  speedServo.write(constrain(map(Speed, 0, Speedsto, SPEED_MIN1, SPEED_MAX1), SPEED_MAX1, SPEED_MIN1));
 }
 else {
  speedServo.write(constrain(map(Speed, Speedsto, Speedmax, SPEED_MIN, SPEED_MAX), SPEED_MAX, SPEED_MIN));
 }
 
 rpmServo.write(constrain(map(Rpm, 0, Rpmmax, RPM_MIN, RPM_MAX), RPM_MAX, RPM_MIN));
 ltrServo.write(constrain(map(Ltr, 0, Ltrmax, LTR_MAX, LTR_MIN), LTR_MAX, LTR_MIN));
 tempServo.write(constrain(map(Temp, 0, Tempmax, TEMP_MAX, TEMP_MIN), TEMP_MAX, TEMP_MIN));
 
 void draw(void) {
  
  u8g.drawFrame(0,0,128,25);
  
  char nameArray[15] = "Creator";
  char carArray[15] = "Pushka-Gonka";
  char trackArray[15] = "Trassa E95";

  // graphic commands to redraw the complete screen should be placed here  
  //u8g.setFont(u8g_font_unifont);
  //u8g.setFont(u8g_font_osb21);
  
  u8g.setFont(u8g_font_gdb12);
  u8g.drawStr( 13, 18, "Reality Club");
  
  u8g.setFont(u8g_font_profont15);
  u8g.drawStr( 0, 35, "Name:");

  u8g.setPrintPos(40, 35 );
  u8g.print(nameArray);

  u8g.setFont(u8g_font_profont15);
  u8g.drawStr( 0, 48, "Car:");

  u8g.setPrintPos(33, 48 );
  u8g.print(carArray);
  
  u8g.setFont(u8g_font_profont15);
  u8g.drawStr( 0, 60, "Track:");

  u8g.setPrintPos(45, 60 );
  u8g.print(trackArray);
  
}
 

Неактивний

#2 2018-06-07 10:35:18

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: конфликт spi и serial

Не успевает.

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму