/code/ Работаем с Arduino. Чтение и вывод данных

Раздел посвящен программированию с использованием Power Basic.
DarkMachine
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 24.02.2012 (Пт) 15:58

/code/ Работаем с Arduino. Чтение и вывод данных

Сообщение DarkMachine » 29.02.2012 (Ср) 10:01

Пример работы с Ардуино.
Реализовано чтение данных из порта (в моем случае СОМ4) в потоке.
Данные выводятся в виде вертикального линейного графика.

Выход из программы - клавиша ESC.

Для ознакомительных целей :)

Код: Выделить всё
#COMPILE EXE
#DIM ALL
#INCLUDE "Win32Api.inc"
%WINDOW_MAX  = 600& ' ширина/высота окна для вывода

GLOBAL nComm        AS LONG
GLOBAL fUpdating    AS LONG
GLOBAL fCloseThread AS LONG
GLOBAL tBuff AS STRING
GLOBAL tWin AS DWORD
GLOBAL vBuff, fInitGraph, fBufReady AS LONG
'
'
FUNCTION map(BYVAL x AS LONG, BYVAL in_min AS LONG, BYVAL in_max AS LONG,BYVAL out_min AS LONG, BYVAL out_max AS LONG) AS LONG
    FUNCTION = (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
END FUNCTION
'
'
FUNCTION ArduinoInit () AS LONG
    LOCAL dummy AS STRING
    COMM OPEN "COM4" AS #nComm
    IF ERRCLEAR THEN EXIT FUNCTION
    COMM SET #nComm, BAUD     = 9600
    COMM SET #nComm, BYTE     = 8
    COMM SET #nComm, PARITY   = %False
    COMM SET #nComm, STOP     = 1
    COMM SET #nComm, TXBUFFER = 4096
    COMM SET #nComm, RXBUFFER = 4096

    COMM PRINT #nComm, $NUL
    SLEEP 500 '2000
    IF COMM(#nComm, RXQUE) THEN
       COMM RECV #nComm, COMM(#nComm, RXQUE), dummy
    END IF
    FUNCTION = %TRUE
END FUNCTION
'
'
SUB ArduinoEnd ()
    LOCAL dummy AS STRING
    SLEEP 1000
    IF COMM(#nComm, RXQUE) THEN
        COMM RECV #nComm, COMM(#nComm, RXQUE), dummy
    END IF
    COMM CLOSE #nComm
END SUB
'
'
THREAD FUNCTION ReceiveData (BYVAL tWin AS DWORD) AS LONG
    LOCAL sBigBuffer, sBuffer, sTxt AS STRING, ncBytesInBuffer AS LONG

    WHILE ISFALSE fCloseThread
        ncBytesInBuffer = COMM(#nComm, RXQUE)
        IF ISFALSE ncBytesInBuffer OR fUpdating THEN
            stxt = ""
            'SLEEP 100
            ITERATE LOOP
        END IF
        '-Read incoming characters.

        COMM RECV #nComm, ncBytesInBuffer, sBuffer

        sBigBuffer = sBigBuffer & sBuffer
          fBufReady = %FALSE
          IF INSTR(sBigBuffer, $CR) THEN
             vBuff      = VAL(sBigBuffer)
             fBufReady  = %TRUE
             sBigBuffer = ""
          END IF
    WEND
    FUNCTION = %TRUE
END FUNCTION

FUNCTION GraphInit() AS LONG
    LOCAL i,x,n AS LONG
    GRAPHIC LINE (1,15)-(%WINDOW_MAX + 1,15), %BLACK
    FOR i = 1 TO 11
        x = 1+ (%WINDOW_MAX / 10) * (i-1)
        IF i MOD 2 =0 THEN
           GRAPHIC LINE (x,10)-(x,15), %BLACK
        ELSE
           GRAPHIC LINE (x,1)-(x, %WINDOW_MAX), %BLACK
           GRAPHIC SET POS (x+2, 1)
           GRAPHIC PRINT STR$(n)
           n+=1
        END IF
    NEXT i
END FUNCTION

FUNCTION GraphDisplay(BYVAL tVal AS LONG) AS LONG
    LOCAL aLog AS LONG
    STATIC yPos, Xold, YOld AS LONG
    IF fInitGraph = %TRUE THEN
       yPos = 20
       xOld = 1
       Yold = 20
       fInitGraph = %FALSE
    END IF
    ' АЦП в Ардуино 10 разрядный, поэтому максимальное значение 1024
    ' 
    alog=map(tVal,0,1024,1, %WINDOW_MAX + 20)
    GRAPHIC LINE( xOld,Ypos)-(alog, Ypos+1), %BLUE
    IF YPos+1 >= %WINDOW_MAX THEN
       Ypos=20
       GRAPHIC CLEAR
       CALL GraphInit
    ELSE
       YPos +=1
       Xold = alog
    END IF
    SLEEP(10)

END FUNCTION

FUNCTION PBMAIN () AS LONG
    LOCAL hThread, lRet, hF AS LONG
    hF = FREEFILE

    ' OPEN "data" FOR OUTPUT AS #hf

    GRAPHIC WINDOW NEW "Arduino Grapher",100,100, %WINDOW_MAX+20, %WINDOW_MAX+20 TO tWin
    GRAPHIC ATTACH tWin, 0

    IF ISFALSE ArduinoInit THEN
        MSGBOX "Arduino connection failed!",,""
        EXIT FUNCTION
    END IF
    THREAD CREATE ReceiveData(tWin) TO hThread
    ' ---
    fInitGraph = %TRUE
    CALL GraphInit
    DO
       IF fBufReady = %TRUE THEN GraphDisplay(vBuff)
       IF GRAPHIC$(INKEY$)=CHR$(27) THEN EXIT DO
    LOOP

    fCloseThread = %TRUE ' - close "listen" thread
    DO
        THREAD CLOSE hThread TO lRet
        SLEEP 0
    LOOP UNTIL ISTRUE lRet
    CALL ArduinoEnd() '
    GRAPHIC WINDOW END tWin
    ' CLOSE #hf
END FUNCTION


Код контроллера.
Надо скомпилировать и загрузить в Ардуино.
Читаем аналоговый сигнал с ножки А0 и отправляем результат в порт.
Код: Выделить всё
void setup() {
  Serial.begin(9600);
}
void loop() {
  Serial.println (analogRead(A0)) ;
  delay(10);
}


Скоро запостирую програмку для нахождения порта Ардуино.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: /code/ Работаем с Arduino. Чтение и вывод данных

Сообщение jangle » 29.02.2012 (Ср) 11:22

что такое Ардуино? :shock:

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: /code/ Работаем с Arduino. Чтение и вывод данных

Сообщение FireFenix » 29.02.2012 (Ср) 12:04

Изображение
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

DarkMachine
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 24.02.2012 (Пт) 15:58

Re: /code/ Работаем с Arduino. Чтение и вывод данных

Сообщение DarkMachine » 29.02.2012 (Ср) 12:07

arduino.ru

Arduino – это инструмент для проектирования электронных устройств (электронный конструктор) более плотно взаимодействующих с окружающей физической средой, чем стандартные персональные компьютеры, которые фактически не выходят за рамки виртуальности. Это платформа, предназначенная для «physical computing» с открытым программным кодом, построенная на простой печатной плате с современной средой для написания программного обеспечения.

Arduino применяется для создания электронных устройств с возможностью приема сигналов от различных цифровых и аналоговых датчиков, которые могут быть подключены к нему, и управления различными исполнительными устройствами. Проекты устройств, основанные на Arduino, могут работать самостоятельно или взаимодействовать с программным обеспечением на компьютере (напр.: Flash, Processing, MaxMSP). Платы могут быть собраны пользователем самостоятельно или куплены в сборе. Среда разработки программ с открытым исходным текстом доступна для бесплатного скачивания.

Язык программирования Arduino является реализацией Wiring, схожей платформы для «physical computing», основанной на мультимедийной среде программирования Processing.


arduino.cc
arduino-ru.blogspot.com
http://habrahabr.ru/blogs/arduino/

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: /code/ Работаем с Arduino. Чтение и вывод данных

Сообщение Хакер » 29.02.2012 (Ср) 13:37

jangle писал(а):что такое Ардуино? :shock:

Это нечто вроде этого, только для электронщиков :) .
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

bon818
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 267
Зарегистрирован: 29.08.2009 (Сб) 4:49
Откуда: Ташкент

Re: /code/ Работаем с Arduino. Чтение и вывод данных

Сообщение bon818 » 02.03.2012 (Пт) 1:40

Это нечто вроде этого, только для электронщиков Точно! :alien:
Язык программирования устройств Ардуино основан на C/C++. лучше уж сразу на С пробовать нормальные AVRы ,прошивок кучи на все случаи.
Время затраченное на это устройство можно использовать на чтото по универсальнее тотже Bascom AVR басик для AVR ,прошивок тоже хватает.
http://www.mcselec.com/index.php?option ... &Itemid=41
Обучалка > Учебник Bascom AVR > http://decada.org.ru/project/lessons/bascom_avr/
Если использовать готовую макетку то и паять может и не придётся.

Думаю вот на это надо ориентироваться.
STM32: эпоха 32-битных микроконтроллеров http://www.compeljournal.ru/enews/2011/2/3
В 32-битном сегменте разработчики редко работают с ассемблером, они в основном используют языки высокого уровня, например, язык C.
Операции с плавающей запятой на аппаратном уровне.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Re: /code/ Работаем с Arduino. Чтение и вывод данных

Сообщение Sirik » 03.03.2012 (Сб) 12:14

Новые Ардуины в 2012 году будут выпускать с 32-битным процессором, но опять же задаюсь вопросом: зачем это надо? Я писал кучу проектов на обычной Меге и на Нано и мне вполне хватает того что есть ;)
Конечно, если Вы хотите написать супер-пупер "Умный дом" или же бортовой компьютер к автомобилю Формулы 1, то да, оно то что надо xD
Состояний же любви — десять: любовный взгляд, привязанность в мыслях, рождение желания, бессонница, исхудание, отвращение к предметам восприятия, утрата стыда, безумие, потеря сознания и смерть — вот их признаки

bon818
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 267
Зарегистрирован: 29.08.2009 (Сб) 4:49
Откуда: Ташкент

Re: /code/ Работаем с Arduino. Чтение и вывод данных

Сообщение bon818 » 03.03.2012 (Сб) 23:43

Sirik писал(а):Новые Ардуины в 2012 году будут выпускать с 32-битным процессором, но опять же задаюсь вопросом: зачем это надо? Я писал кучу проектов на обычной Меге и на Нано и мне вполне хватает того что есть ;)
Конечно, если Вы хотите написать супер-пупер "Умный дом" или же бортовой компьютер к автомобилю Формулы 1, то да, оно то что надо xD


C 32-битным процессором можно использовать языки более высокого уровня, а STM32 ценой от 1$ можно пользовать по умолчанию для всего.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: /code/ Работаем с Arduino. Чтение и вывод данных

Сообщение FireFenix » 04.03.2012 (Вс) 2:08

bon818 писал(а):C 32-битным процессором можно использовать языки более высокого уровня

Да ладно?
Использование HLL от битности процессора... разработчики бы в гробу перевернулись
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる


Вернуться в Power Basic

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 30

    TopList