Доброго времени суток.
Столкнулся с проблемой, ответа на который на просторах интернета найти не удалось…
Суть проблемы:
есть Uno R3 с преобразователем atmega16u2,
есть китайская Uno c CH340G,
есть экран Nextion NX8048p070_11.
И есть код, который отлично работает как задумано на старой Uno atmega 16u2, а на китайской ch340g отказывается принимать данные с экрана..
драйвер ch341 устанавливал/переустанавливал - не помогает..
Использовал заведомо рабочую mega 2560, проверял на всех 4х портах - не помогает.
В чем может загвоздка, если на одной все работает а вторая молчит?
int in2 = 5; //пин двигателя пилы
int in3 = 6; //пин зажима пилы
int in4 = 7; //пин зажима коретки
int PUL1 = 9; //пин перемешения каретки
int DIR1 = 8; //пин перемещения каретки
int PUL2 = 11; //пин перемещения пилы
int DIR2 = 10; //пин перемещения пилы
String data;
char inc;
String params[10];
int d=0;
long maxlength=20000; //максимальная дистанция отьезда
long alllength=0; //необходимая длина трубки
int quality=0; //количество штук
long length=0; //промежуточная переменная
int speed=270; //скорость вращения
long L=0; //промежкточная переменная измерения остаточной длины
////////////////////////////// конец команды///////////////////////
void comandEnd() {
for (int i = 0; i < 3; i++) {
Serial.write(0xff);
}
}
/////////////////////////////////////отправка команды///////////////////
void SendInt(String dev, int data)
{
Serial.print(dev); // Отправляем данные dev(номер экрана, название переменной) на Nextion
Serial.print("="); // Отправляем данные =(знак равно, далее передаем сами данные) на Nextion
Serial.print(data); // Отправляем данные data(данные) на Nextion
comandEnd();
dev = ""; // Очищаем переменную
data = ""; // Очищаем переменную
}
///////////////////////////////////перезод на новую страницу/////////////////
void Nextpage(String dev)
{
Serial.print("page");
Serial.print(" ");
Serial.print(dev);
comandEnd();
dev = "";
}
////////////////////////////////////////////////////////
void Waiting(String search)
{
while(params[0].indexOf(search)<0)
{ //проверка старта экранаю Когда приходит Start выходитм из петли и идем по программе
if(Serial.available()==false){
}
else
Reading();
}
}
/////////////////////////////////////////////////////////////
void Reading(){
int i=0;
int p=0;
int l=0;
while(Serial.available()){
p=Serial.read();
Serial.println(char(p));
delay(100);
if(p==33){
delay(200);
params[i].remove(0);
params[i]=data;
Serial.println(params[i]);
delay(200);
i++;
data="";
}
else
data+=char(p);
}
}
////////////////////////////////////////пауза//////////////////////////////////
void Pause(){
Serial.println(params[0]);
if(params[0].indexOf("Pause")>0)
while(params[0].indexOf("Pauseoff")<0)
Reading();
}
/////////////////////////////////////////////////////////////////////////////////
void Stop(){
}
////////////////////////////////////////////////////////
void setup()
{
pinMode (in2, OUTPUT);// Двигатель пилы
pinMode (in3, OUTPUT);// Зажим пилы
pinMode (in4, OUTPUT);// Основной зажим каретки
pinMode (DIR1, OUTPUT);// Двигатель перемещение каретки
pinMode (PUL1, OUTPUT);// Двигатель перемещение каретки
pinMode (DIR2, OUTPUT);// Двигатель перемещение пилы
pinMode (PUL2, OUTPUT);// Двигатель перемещение пилы
/////////новый блок
Serial.begin(9600);
}
void loop()
{
///////////////////////////////ожидание ответа экрана//////////////////
Serial.println("Старт");
Waiting("Start");
delay(150);
Serial.println("Проверка пройдена");
delay(500);
while(d<=100){ // запорняем прогресс бар
SendInt("page0.j0.val",d);
d+=10;
delay(100);
comandEnd();
}
delay(3000);
Nextpage("page1");
delay(100); //внести свич кейс для выбора внесений параметров
Waiting("params");
Serial.println("params yes");
Serial.println(params[0]);
delay(1000);
//конец блока загрузки данных
alllength=params[1].toInt();
quality=params[2].toInt();
Serial.println(alllength);
Serial.println(quality);
////////////////////////////////////////// Первый отпил ////////////////////////////////
digitalWrite(in3, HIGH); // вкл. зажим пилы
digitalWrite(in4, HIGH); // вкл. осн.зажима каретки
delay( 300 );
digitalWrite(in2, HIGH); // вкл. двигателя пилы
movesaw(6300,1700,HIGH);
movesaw(6300, 300, LOW);
digitalWrite(in2, LOW); // откл. двигателя пилы
digitalWrite(in4, LOW); // откл. осн.зажима каретки
delay( 200 );
////////////////////////////////////// Основная программа //////////////////////////////////
for (int i = 0; i < quality ; i++) { // кол-во циклов
Serial.println(i);
length=alllength;
do{
digitalWrite(in4, LOW); // откл. зажима каретки
delay( 200 );
if(length>maxlength){
L=maxlength;}
else{
L=length;}
movedetail(L, speed, HIGH);
delay( 200 );
digitalWrite(in4, HIGH); // вкл. осн.зажима каретки
delay(300);
digitalWrite(in3, LOW); // откл. зажим пилы
delay( 200 );
movedetail(L, speed, LOW);
length=length-maxlength;
delay( 200 );
digitalWrite(in3, HIGH); // вкл. зажима пилы
delay(300);
}while(length>0);
digitalWrite(in2, HIGH); // вкл. двигателя пилы
movesaw(6300,1700,HIGH);
movesaw(6300, 300, LOW);
digitalWrite(in2, LOW); // откл. двигателя пилы
digitalWrite(in4, LOW); // откл. осн.зажима каретки
delay( 200 );
/////////////////////////////пауза и стоп/////////////////////////////////////////////
Pause();
}
///// дописать выталкивание детали
pinMode (in2, INPUT);// Двигатель пилы
pinMode (in3, INPUT);// Зажим пилы
pinMode (in4, INPUT);// Основной зажим каретки
pinMode (DIR1, INPUT);// Двигатель перемещение каретки
pinMode (PUL1, INPUT);// Двигатель перемещение каретки
pinMode (DIR2, INPUT);// Двигатель перемещение пилы
pinMode (PUL2, INPUT);// Двигатель перемещение пилы
}
////////////////////////////////////////////////// функции //////////////////////////////////////////
void movesaw(int length, int speed, char move){ // функция поднятия пилы //1-расстояние, 2-скорость, 3-движение
for (int i = 0; i < length ; i++) { // быстрый подъем для отпила
digitalWrite(DIR2, move ); // LOW - движение вверх, HIGH - вниз
digitalWrite(PUL2, HIGH);
delayMicroseconds(speed); // скорость подьема
digitalWrite(PUL2, LOW);
Reading();
}
}
void movedetail(long length, int speed, char move){ //движение каретки //1-расстояние, 2-скорость, 3- направление
int sp=350;
for (long i = 0; i < length ; i++) { // откат каретки на захват трубки
if (i>500){ // условие разгона
sp=speed;
}
digitalWrite(DIR1, move); // LOW - движение от пилы к двинателю, HIGH - к пиле
digitalWrite(PUL1, HIGH);
delayMicroseconds(sp); // скорость отката
digitalWrite(PUL1, LOW);
Reading();
}
}
