3 термопары и tft дисплей SPI ILI9225 к шине SPI

Так и было. Он там бит пхает, без передёргивания SCK. В итоге на шине при опр. условиях, может образоваться “лишний бит”.

@123 Алексей

Подводя итог - просто перенесите пины SCK и MISO термопар на любые два свободных пина и все должно заработать.

Не надо трогать Черчилля! Он как мог защищался.

1 лайк

Перекинул контакт SCK термопар на другой и заработало!
СПАСИБО БОЛЬШОЕ!!!
Подскажите пожалуйста еще
в монитор поорта команда Serial.print(thermocouple3.readCelsius()); печатает данные
,а команда tft.drawText(50, 40, thermocouple3.readCelsius(), COLOR_RED); на дисплей нет?

double readCelsius(void); и tft.drawText?

наверно надо в текст превратить видимо

Подскажите как это програмно написать?

1 лайк

@ua6em вперёд и с песнЯми! :stuck_out_tongue_winking_eye:

@ЕвгенийП я же не для того, чтобы отметиться, задать направление для, библиотеки как правило могут и циферки на экран печатать
PS четвёртый курс Бауманки, чему их там учат…

Вы не про бауманку тут рассуждайте, а показывайте гражданину

:stuck_out_tongue_winking_eye:

существует 99 способов, но профессор утверждает, что сто )))

PS хотел отмазаться, а его библиотека цифру то и не умеет…

begin				KEYWORD2
clear				KEYWORD2
invert				KEYWORD2
setBacklight		KEYWORD2
setBacklightBrightness		KEYWORD2
setDisplay			KEYWORD2
setOrientation		KEYWORD2
getOrientation		KEYWORD2
fontX				KEYWORD2
fontY				KEYWORD2
maxX				KEYWORD2
maxY				KEYWORD2
drawCircle			KEYWORD2
fillCircle			KEYWORD2
setBackgroundColor	KEYWORD2
drawLine			KEYWORD2
drawRectangle		KEYWORD2
fillRectangle		KEYWORD2
drawPixel			KEYWORD2
drawText			KEYWORD2
getTextWidth		KEYWORD2
setColor			KEYWORD2
splitColor			KEYWORD2
drawTriangle		KEYWORD2
fillTriangle		KEYWORD2
setFont				KEYWORD2
getFont				KEYWORD2
drawChar			KEYWORD2
drawBitmap	KEYWORD2
drawXBitmap	KEYWORD2

Да походу програмировапние для меня темный лес в в вашем собщении не понял ничего. вижу команды там есть и команда которую я использовал drawText. Но как заставить печатать значение переменной thermocouple3.readCelsius() на дисплее в цифрах так и не понял . в порт температуру печатает без проблем.

А собираю я панель приборов для моего старого советского снегохода тайга. Что у меня почти получилось подключить:

  1. 3 термопары для температуры двух цилиндров и температуру выхлопных газов
  2. Вольтметр
    Что хочу еще подключить:
  3. Тахометр от переменки с генератора
  4. Спидометр от GPS c функцией одометра
    3.И раз есть GPS компас

Заказал еще модуль расширения портов ввода-вывода .
ПРОШУ ОЦЕНИТЬ ВОЗМОЖНОСТЬ РЕАЛИЗАЦИИ МОЕГО ПРОЕКТА

Примерно полгода-год и вероятность возможности станет чуть выше 0

Проблема в написании програмного кода?

У меня - нет.

Что вы имели в виду ? Вы можете написать такой код и подсказать с правильным подключением?

Это я к тому, что если

то максимум, что ты в данный момент можешь - скопировать чужой проект. А вот чтобы внести в него изменения под свои хотелки надо полгода-год учиться, тогда вероятность успешного успеха станет чуть выше 0. Так-то людей программированию и схемотехнике 5 лет обучают, и то не все из них доходят до диплома.

1 лайк

Я согласен писать программу не умею могу только подредактировать. Может ли ктонибудь взятся мне помочь и за сколько?

Здесь есть платный раздел, создай тему там и спроси. Я не профессиональный программист, меня не обучали ни программированию, ни схемотехнике, и за 35 лет самостоятельного изучения я еле-еле на первую, самую низкую, ступеньку знаний в этих областях залез. И то с трудом.

3 лайка

Спасибо :+1: :+1:

Запустил дисплей и термопары подключены к апаратному SPI разные только Контакты CS выбора все работает
заменил библиотеку термопары. осталось вольты вывести :face_with_monocle:

#include <GyverMAX6675.h>
#include <GyverMAX6675_SPI.h>


//подключение термопар   по  аппаратному SPI указываем пин CS
//остальные подключены к аппаратному SPI (SCK и MISO)
GyverMAX6675_SPI<7> sens1;
GyverMAX6675_SPI<6> sens2;
GyverMAX6675_SPI<5> sens3;



//Подключение Вольтметра
#define analog_pin A0  // Вывод которому подключен датчик

float adc_voltage = 0.0;  // Создаем переменную adc_voltage
float in_voltage = 0.0;   // Создаем переменную in_voltage
float R1 = 30000.0;       // Задаем номинал резистора R1
float R2 = 7500.0;        // Задаем номинал резистора R2
float ref_voltage = 5.0;  // Задаем опорное напряжение
int adc_value = 0;        // Создаем переменную для хранения показаний

//  Подключения дисплея
#include "SPI.h"             // библиотека  работы по интерфейсу (шине) SPI
#include "TFT_22_ILI9225.h"  // библиотека дисплея
  // назначаем имена контактам дисплея
#define TFT_LED 3  // шим вывод для управления подсветкой (любой шим выход ардуино)
#define TFT_RST 8  // Reset          (любой  выход ардуино)
#define TFT_RS 9   //SPI Data/Command Select  (любой  выход ардуино)
  // назначаем имена контактам дисплея SPI шине  (использую аппаратные контакты SPI шины  работают быстрей) фиксированые выводы ардуино уно
#define TFT_CS 10   // SS(Slave Select).- на контроллере. другое обознач CS(Chip Select)на подключеном устройстве
#define TFT_SDI 11  // MOSI на контроллере.  линия MOSI отвечает за предачу в данном случае на дисплей.на дисплее пин SDI
#define TFT_CLK 13  // SCK -Serial clock генерируется синхронизирующие импульсы

#define TFT_BRIGHTNESS 100  // яркость дисплея

TFT_22_ILI9225 tft = TFT_22_ILI9225(TFT_RST, TFT_RS, TFT_CS, TFT_LED, TFT_BRIGHTNESS);  // подключаем дисплей к проименованым контактам


void setup() {
  Serial.begin(9600);                 //активируем порт передачи используется когда нужно выводить информацию на компьютер
  Serial.println("MAX6675 test");     //ждем стабилизации чипа MAX
  Serial.println("DC Voltage Test");  // Отправляем текст волтметр

  tft.begin();  // инициализация ЖК дисплея
  tft.clear();
  tft.setOrientation(0);  // Отрентация текста 0,1,2,3,

  tft.setBackgroundColor(COLOR_YELLOW);  // фон текста
  tft.setFont(Terminal12x16);
  tft.drawText(0, 20, "t1=", COLOR_RED);
  tft.drawText(0, 40, "t2=", COLOR_RED);
  tft.drawText(0, 60, "t3=", COLOR_RED);
  tft.drawText(0, 80, "V=", COLOR_RED);

  delay(1000);
}

void loop() {
  // Волтметр
  adc_value = analogRead(analog_pin);                // Считываем показания с аналогово вывода
  adc_voltage = (adc_value * ref_voltage) / 1024.0;  // Определение на входе АЦП
  in_voltage = adc_voltage / (R2 / (R1 + R2));       // Расчет напряжения

  //Выводим показания в монитор порта с термопар
  Serial.print("  C1= ");
  sens1.readTemp();               // Читаем температуру
  Serial.print(sens1.getTemp());  // Забираем температуру через getTemp


  Serial.print(";   C2= ");  // печатаем в порте C2 =
  sens2.readTemp();
  Serial.print(sens2.getTemp());

  Serial.print(";   C3= ");  // печатаем в порте C3 =
  sens3.readTemp();
  Serial.print(sens3.getTemp());
  //Выводим показания в монитор порта показания вольтметра
  adc_value = analogRead(analog_pin);                // Считываем показания с аналогово вывода
  adc_voltage = (adc_value * ref_voltage) / 1024.0;  // Определение на входе АЦП
  in_voltage = adc_voltage / (R2 / (R1 + R2));       // Расчет напряжения
  Serial.print(";   V= ");                           // печатаем в порте V =
  Serial.println(in_voltage, 2);                     // выводим в порт показания вольтметра



  tft.setBackgroundColor(COLOR_YELLOW);
  tft.setFont(Terminal12x16);
  tft.drawText(50, 20, String(sens1.getTemp(), 2), COLOR_RED);
  tft.drawText(50, 40, String(sens2.getTemp(), 2), COLOR_RED);
  tft.drawText(50, 60, String(sens3.getTemp(), 2), COLOR_RED);
  tft.drawText(50, 80, "String(in_voltage()", 2), COLOR_RED);



  delay(2000);
}