Преобразование симола в двоичный код и вывод на светодиод

Asati
Offline
Зарегистрирован: 28.09.2015

Заранее извиняюсь если продублировал какую-то тему, но не  нашел ничего!!

Помогите решить проблемку, только начал заниматься с Ардуино.

Вводим символ например А, светодиод должен промигать соответственно 1000001 соответственно.

Как, я понимаю я должен переменную, которую получаю по serialread преобразовать в последовательность 0 и1 согласно ASCII и потом передать на digitalwrite.  Иеще предположим 1- короткая вспышка, 0-длинная вспышка.

С уважением......

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Во-первых, что такое "вводим символ" в Вашем понимании? Serial, матричная клавиатура, еще какая то другая клавиатура, персоналка, планшет?

Во-вторых, читайте про битовые операции, информации в гугле много, первая попавшаяся, здесь http://www.c-cpp.ru/books/bitovye-operatory

В-третьих, если нужно не просто включить/выключить по 1 и 0, то сделайте это отдельной функцией, например, которой на вход подавайте 0 или 1, а внутри функции решайте, что делать с этим 0 или 1, например, на 0 - "длинная вспышка", а на 1 - короткая или наоборот. Можно, конечно, не делать это функцией, но так для Вас же будет легче читать текст программы, да и понятней.

Когда формулируете вопрос, попробуйте представить, как мы читаем его, не видя, ни Ваших мыслей, ни то, что у Вас на столе. Мы не в курсе про всё это, телепатия - не наш конёк.

И да, скетч вставляйте в сообщение правильно, пока еще не начали. Плюс без скетча помочь Вам будет сложно или дорого.

 

Asati
Offline
Зарегистрирован: 28.09.2015

Извините, наверное действительно не до конца понятно сформулировал вопрос:

На клавиаткре компьютера, к котрому подключено Ардуино ввожу символ, например букву А, надо чтобы светодиод промигал введенный символ двоичным кодом ASCII.

В чем трудность: как перевести переменную simvol в 0 и 1, чтобы потом подать их на светодиод командой digitalwrite.

Как выводить на монитор в двоичном виде понятно:


int simvol = 0;   
 void setup() {
    Serial.begin(9600); 
}
 void loop() 
{
     if (Serial.available() > 0) {  
              simvol = Serial.read(); //вводим символ
        
        Serial.println(simvol, BIN); //выводим на монитор в виде 0 и 1
    }
}

 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Битовые опреации вам нужны, ссылкудаже вам дали...подскажу - из операций понадобится сдвиг.

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Мазохисты собрались..... смакуют.

Попробуй так что ли....

c=Serial.read();
for(i=0; i<8; i++) if (c & (B10000000 >> i)) Led(On); else Led(Off);

 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Смакую. Попробуйте выполнить Ваш код, ветка else в любом случае не выполнится)

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Yarik.Yar пишет:
ветка else в любом случае не выполнится)
Попробуйте выполнить. О результатах расскажите.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Пробую, рассказую. Не работает else. 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Yarik, не позорьтесь, учите матчасть.

Asati
Offline
Зарегистрирован: 28.09.2015

Спасибо! за помощь и обсуждение!

Использовал функцию 

bitRead()

и цикл, если кому интересно завтра могу выложить код.

С уважением....

Asati
Offline
Зарегистрирован: 28.09.2015
int simvol = 0;   
int chbit[7];
int i;
 void setup() {
    Serial.begin(9600); 
    pinMode(2, OUTPUT);
    
}
 void loop() 
{
     if (Serial.available() > 0) {  
              simvol = Serial.read(); //вводим символ
              Serial.println(simvol, BIN); //выводим на монитор в виде 0 и 1
                Serial.println("________________");
                digitalWrite(2,HIGH);
                delay(500);
              for(i=0;i<8;i++)
              {
 chbit[i]=bitRead(simvol,i);
  if (chbit[i]==1) 
  { 
     digitalWrite(2,chbit[i]);
     Serial.println(chbit[i]);
      delay(100);
      digitalWrite(2,LOW);
      delay(10);
  }
  else
  {
   digitalWrite(2,chbit[i]);
   Serial.println(chbit[i]);
      delay(50);
      digitalWrite(2,LOW);
      delay(50);
  }   
  
              }
     } 
}

Как и обещал код, может кому понадобится....