Спроба перенести єдиний символ на послідовний пристрій

Хороший день, У мене є серійний пристрій, який під час підключення через гіпертермінал дає мені звіт про стан, коли я натискаю клавішу «Введіть ключ» або будь-що, що потрібно, просто літеру d. Також Ctrl-t надасть мені інформацію про маршрутизацію.

Я хотів би натиснути кнопку, підключену до arduino, і відправити b до серійного пристрою і переглянути інформацію про стан від нього.

На цьому етапі у мене є послідовний пристрій, підключений до arduino, і я можу бачити повідомлення з нього, однак, коли я натискаю перемикач, підключений до контакту 2, послідовний пристрій не надсилає мені вихідний стан, як очікувалося, і як це видно за допомогою прямого послідовного з'єднання на мій комп'ютер з гіпертерміналом.

Хто-небудь має досвід або введення щодо цього?

#include 
// software serial #1: TX = digital pin 10, RX = digital pin 11
 SoftwareSerial portOne(10, 11);
 const int buttonPin = 2;    //the number of the pushbutton pin
 const int button1Pin = 4;
 const int ledPin =  13;     //the number of the LED pin
//define char to send to serial

char stat = 'd';
char route = '\x14';
// variables will change:
int buttonState = 0;        //variable for reading the pushbutton status
int button1State = 0;

// the setup function runs once when you press reset or power the board
void setup() {
 //initialize digital pin 13 as an output.
                pinMode(ledPin, OUTPUT);
                pinMode(buttonPin, INPUT);
                pinMode(button1Pin, INPUT);
                Serial.begin(4800);
                while (!Serial) {;//wait for serial port to connect. Needed for native USB port only
                }
               //Start each software serial port
                portOne.begin(4800);
                while (!portOne) {;//wait for serial port to connect. Needed for native USB port only
                }
              }

// the loop function runs over and over again forever
void loop() {
            static int Once = 0;
            static int Once1 = 0;
            buttonState = digitalRead(buttonPin);
            button1State = digitalRead(button1Pin);
 //check if the pushbutton is pressed.
 //if it is, the buttonState is HIGH:
            if (buttonState == HIGH ) { 
                                      if (Once == 0) {
                                                        Once = 1;
                                                       //turn LED on so I can tell the button is working
                                                        digitalWrite(ledPin, HIGH);
                                                       //send d to Radio
                                                        portOne.write(stat);
                                                       //send d to serial monitor so I can see the charector
                                                        Serial.print(stat);
                                      }
                                      }


if (buttonState == LOW) {
                         //turn LED off:
                          Once = 0;
                          digitalWrite(ledPin, LOW);

                          }


 //check if the other pushbutton is pressed.
 //if it is, the buttonState is HIGH:
  if (button1State == HIGH) {
    if (Once1 == 0) {
          Once1 = 1;
   //turn LED on:
  //digitalWrite(ledPin, HIGH);
   //send ctrl-t to radio
    portOne.write(route);
    } 
  }
  if (button1State == LOW) {
   //turn LED off:
    //digitalWrite(ledPin, LOW);
    Once1 = 0;
  }
    portOne.listen();
     //read data from the Software Serial portOne
  //and send to the hardware serial port:
   while (portOne.available() > 0) {
     char inByte = portOne.read();
     Serial.print(inByte);
   }
}

Breadboard

1
У своєму вступі ти написав "дає мені звіт про стан, коли я натискаю букву" b ". У коді ви написали //send d to Radio (і код дійсно це робить). Це правильно, і чи може це бути джерелом вашої помилки?
додано Автор caryden, джерело
З вашого питання це було не зовсім зрозуміло, але чи ви підтвердили, що напруга сигналу та полярність послідовного пристрою сумісні з Arduino? Традиційні серійні інтерфейси (наприклад, RS232 тощо) не є та вимагають інвертування транслятора рівня для взаємодії з Arduino.
додано Автор rossp, джерело
Рада, що ти зрозумів це. Остерігайтеся, що вплив таких напруг може назавжди пошкодити ваш Arduino. Що стосується того, як вона могла б працювати, я вважаю, що можливо, що серійна реалізація програмного забезпечення (навмисно або випадково) буде більш агресивною полярністю, ніж апаратна UART. Люди іноді ведуть приймачі RS232 з сигналом рівня логіки, який просто перевернуто до необхідної полярності, а не посилюється, і ви могли б уявити собі, намагаючись отримати їх з резисторно-діодною мережею.
додано Автор rossp, джерело
Ми повинні спостерігати заземлення, що йде на пристрій. Як конвенція, ви повинні підключити 5V до червоної лінії на макеті, а Gnd до синього кольору. Це незрозуміло, щоб змінити це. Будь ласка, додайте деякі налагоджувальні дисплеї, наприклад. Serial.println ("Відправлення d 'до пристрою"); - тоді ви будете знати, чи це проблема з виявленням перемикача або проблема з комами.
додано Автор Nick Gammon, джерело
Може бути, додати деякий час (Serial.available ()) portOne.print (Serial.read ()); щоб дозволити вам вводити символи з послідовного монітора на ваш пристрій. Потім ви можете обійти потенційні проблеми з підкресленням/розпалюванням.
додано Автор Dave X, джерело
Я бачу те, що ви говорите, однак, я думаю, що це більше проблеми з передачею символу на серійний пристрій. Ви бачите, чи я змінюю char stat з 'd' на 'c', це повинно «включити монітор усе», але це не відбувається, тому я гадаю, що символ не потрапляє до пристрою або його спотворено. ..
додано Автор DormoTheNord, джерело
Зрозуміло, вибачте, що моя макет має синій зліва і червоний направо, тому я зробив схему, щоб відповідати моїй макеті, і не змінював її на відповідність картині в Fritzing. У мене був цей Serial.println у моєму коді і я побачив індикацію щоразу, коли я натискаю кнопку. Я також іноді мав землю, з'єднану з пристрою до артюно. Я складу ці зміни і повернусь до вас.
додано Автор DormoTheNord, джерело
jrobert Дякую вам за те, що помітили, що чомусь під час набору тексту це "b", але "d" є правильним. Нік я додав грунт без змін і оновив зображення, щоб відобразити це, а також змінювати потужність/землю до макета. Крім того, у своєму коді вище ви повинні побачити //відправити d до Radio portOne.write (stat);//відправити d до послідовного монітора, щоб я міг побачити чорний Serial.print (stat);
додано Автор DormoTheNord, джерело
@ ChrisStratton Коли я вимірював послідовний зв'язок з пристрою, я знайшов лінії TX -9.2v. Виходячи з вашої пропозиції, я зробив кілька досліджень і на основі цього sparkfun.com/tutorials/215 його Схоже, мені дійсно потрібно запустити мікросхему MAX3323 (або подібну). Чудовий я мав змогу отримувати дані з пристрою для показу на arduino взагалі, і безумовно додав до моїй плутанині.
додано Автор DormoTheNord, джерело

Відповідей немає

0